JOIN ใน SQL Server
JOIN ใช้ดึงข้อมูลจากหลายตารางโดยเชื่อมโยงผ่านคอลัมน์ที่เกี่ยวข้อง มี 4 ประเภทหลัก:
- INNER JOIN - คืนเฉพาะแถวที่ match ทั้งสองฝั่ง
- LEFT OUTER JOIN (LEFT JOIN) - คืนทุกแถวฝั่งซ้าย + match ฝั่งขวา
- RIGHT OUTER JOIN (RIGHT JOIN) - คืนทุกแถวฝั่งขวา + match ฝั่งซ้าย
- FULL OUTER JOIN (FULL JOIN) - คืนทุกแถวทั้งสองฝั่ง
1. INNER JOIN
SELECT columns
FROM table1
INNER JOIN table2 ON table1.col = table2.col;

ผลลัพธ์ = ส่วนทับซ้อน (สีฟ้า)
ตัวอย่าง
SELECT nhacung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay
FROM nhacung
INNER JOIN donhang ON nhacung.nhacung_id = donhang.nhacung_id;
ข้อมูลตัวอย่าง:
| nhacung_id | nhacung_ten |
|---|---|
| 10000 | IBM |
| 10001 | Hewlett Packard |
| 10002 | Microsoft |
| 10003 | NVIDIA |
| donhang_id | nhacung_id | donhang_ngay |
|---|---|---|
| 500125 | 10000 | 2003/05/12 |
| 500126 | 10001 | 2003/05/13 |
| 500127 | 10004 | 2003/05/14 |
ผลลัพธ์: คืน IBM, Hewlett Packard (match) — Microsoft, NVIDIA หาย (ไม่มี order), order 500127 หาย (ไม่มี supplier)
รูปแบบเก่า (ไม่แนะนำ)
SELECT nhacung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay
FROM nhacung, donhang
WHERE nhacung.nhacung_id = donhang.nhacung_id;
2. LEFT OUTER JOIN
SELECT columns
FROM table1
LEFT [OUTER] JOIN table2 ON table1.col = table2.col;

ผลลัพธ์ = ทั้ง table1 (สีฟ้า) + match จาก table2
ตัวอย่าง
SELECT nhacung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay
FROM nhacung
LEFT OUTER JOIN donhang ON nhacung.nhacung_id = donhang.nhacung_id;
คืน supplier ทั้ง 4 แถว Microsoft, NVIDIA มี donhang_ngay = NULL
3. RIGHT OUTER JOIN
SELECT columns
FROM table1
RIGHT [OUTER] JOIN table2 ON table1.col = table2.col;

ผลลัพธ์ = ทั้ง table2 + match จาก table1
ตัวอย่าง
SELECT donhang.donhang_id, donhang.donhang_ngay, nhacung.nhacung_ten
FROM nhacung
RIGHT OUTER JOIN donhang ON nhacung.nhacung_id = donhang.nhacung_id;
คืน order ทั้ง 3 แถว order 500127 มี nhacung_ten = NULL
4. FULL OUTER JOIN
SELECT columns
FROM table1
FULL [OUTER] JOIN table2 ON table1.col = table2.col;

ผลลัพธ์ = Union ของทั้งสองตาราง (สีเขียว)
ตัวอย่าง
SELECT nhacung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay
FROM nhacung
FULL OUTER JOIN donhang ON nhacung.nhacung_id = donhang.nhacung_id;
คืน supplier ทั้ง 4 + order ทั้ง 3 Microsoft, NVIDIA มี donhang_ngay=NULL, order 500127 มี nhacung_id/ten=NULL
สรุปเลือกใช้
- ต้องการเฉพาะที่ match → INNER JOIN
- ต้องการข้อมูลฝั่งซ้ายหมด → LEFT JOIN
- ต้องการข้อมูลฝั่งขวามหมด → RIGHT JOIN
- ต้องการข้อมูลทั้งสองฝั่งหมด → FULL JOIN