Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL JOIN: ON vs USING - ความแตกต่างและเมื่อไหร่ใช้แบบไหน

ทั้ง ON และ USING ใช้ระบุเงื่อนไขการ Join แต่มีความแตกต่างใน Syntax และความยืดหยุ่น

ON - ยืดหยุ่นกว่า (ใช้ส่วนใหญ่)

  • ระบุเงื่อนไขได้ทุกแบบ: table1.col = table2.col, table1.col > table2.col, table1.col = 'value'
  • ชื่อคอลัมน์ใน 2 ตาราง ไม่ต้องเหมือนกัน
  • รองรับ Multiple Conditions: ON t1.a = t2.a AND t1.b = t2.b

ตัวอย่าง ON

SELECT 
    ForeignTableDemo.Id, 
    ForeignTableDemo.Name, 
    PrimaryTableDemo.Address
FROM ForeignTableDemo
JOIN PrimaryTableDemo
    ON ForeignTableDemo.FK = PrimaryTableDemo.FK;

ผลลัพธ์

+------+------+---------+
| Id   | Name | Address |
+------+------+---------+
| 1    | John | US      |
| 2    | Bob  | UK      |
+------+------+---------+

USING - สั้นกว่า (ใช้เมื่อชื่อคอลัมน์เหมือนกัน)

  • ใช้ได้ก็ต่อเมื่อ ชื่อคอลัมน์เหมือนกันทั้ง 2 ตาราง
  • Syntax สั้น: USING (column_name)
  • คอลัมน์ที่ Join จะปรากฏใน Result แค่คอลัมน์เดียว (ไม่ซ้ำ)
  • ไม่รองรับเงื่อนไขซับซ้อน (แค่ Equality)

ตัวอย่าง USING

SELECT * 
FROM ForeignTableDemo 
JOIN PrimaryTableDemo USING (FK)
WHERE FK = 1;

ผลลัพธ์ (คอลัมน์ FK แสดงครั้งเดียว)

+------+------+------+---------+
| FK   | Id   | Name | Address |
+------+------+------+---------+
| 1    | 1    | John | US      |
+------+------+------+---------+

ตารางเปรียบเทียบ

คุณสมบัติONUSING
ชื่อคอลัมน์ต้องเหมือนกันไม่ต้องต้องเหมือนกัน
เงื่อนไขซับซ้อนได้ (>, <, AND, OR, Functions)ได้แค่ Equality
คอลัมน์ Join ใน Resultปรากฏ 2 ครั้ง (table1.col, table2.col)ปรากฏ 1 ครั้ง
Alias Tableต้องใช้ Alias เสมอไม่ต้อง (แต่แนะนำ)
Natural Joinไม่เกี่ยวข้องคล้าย NATURAL JOIN

แนวทางเลือกใช้

  • ใช้ ON - กรณีส่วนใหญ่, ชื่อคอลัมน์ต่างกัน, เงื่อนไขซับซ้อน
  • ใช้ USING - ชื่อคอลัมน์เหมือนกันหมด, Query สั้น, خوانง่าย
  • หลีกเลี่ยง NATURAL JOIN - Opacity, Dangerous (Join ทุกคอลัมน์ชื่อเหมือนอัตโนมัติ)