ทั้ง 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 |
+------+------+------+---------+
ตารางเปรียบเทียบ
| คุณสมบัติ | ON | USING |
|---|---|---|
| ชื่อคอลัมน์ต้องเหมือนกัน | ไม่ต้อง | ต้องเหมือนกัน |
| เงื่อนไขซับซ้อน | ได้ (>, <, 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 ทุกคอลัมน์ชื่อเหมือนอัตโนมัติ)