บทความนี้เป็นการแนะนำคำสั่ง JOIN ของ MySQL ที่มีไว้สำหรับ เชื่อมต่อหลายตารางเข้าด้วยกัน เพื่อนำมาแสดงผล หรือนำมาสร้างเงื่อนไขต่างๆ โดยที่คำสั่ง JOIN จะมี อย่างน้อย 4 แบบคือ

ผมจะใช้ตารางเดียวกันกับบทความในตอนที่ 3 แต่รอบนี้ผมจะเพิ่มแถวที่ไม่ได้สัมพันธ์กับตารางอื่นๆลงไปด้วย ดังนี้
ตารางที่ 1 ตารางสมาชิก (members)
| member_id | name | |
|---|---|---|
| 1 | Mr.A | [email protected] |
| 2 | Mr.B | [email protected] |
| 3 | Mr.C | [email protected] |
| 4 | Mr.D | [email protected] |
ตารางที่ 2 ตารางประวัติการสั่งซื้อ (orders)
| id | member_id | product_id | amount |
|---|---|---|---|
| 1 | 1 | P2 | 5 |
| 2 | 1 | P3 | 2 |
| 3 | 2 | P1 | 3 |
| 4 | 0 | P2 | 1 |
ตารางที่ 3 ตารางสินค้า (products)
| product_id | name | price |
|---|---|---|
| P1 | Coffee | 35 |
| P2 | Alcohol | 20 |
| P3 | Cigarette | 70 |
เมื่อใช้คำสั่ง INNER JOIN และ ON ดังนี้ เพื่อแสดงแค่ลูกค้าที่มีประวัติการซื้อเท่านั้น
SELECT m.member_id, m.name, o.product_id, o.amount FROM members as m INNER JOIN orders as o ON o.member_id = m.member_id;
จะได้ผลลัพท์ดังนี้
| member_id | name | product_id | amount |
|---|---|---|---|
| 1 | Mr.A | P2 | 5 |
| 1 | Mr.A | P3 | 2 |
| 2 | Mr.B | P1 | 3 |
เมื่อใช้คำสั่ง LEFT JOIN และ ON ดังนี้ จะได้ผลลัพท์ของลูกค้าที่ไม่มีประวัติซื้อของใน Orders เข้ามาด้วย
SELECT m.member_id, m.name, o.product_id, o.amount FROM members as m LEFT JOIN orders as o ON o.member_id = m.member_id;
จะได้ผลลัพท์ดังนี้
| member_id | name | product_id | amount |
|---|---|---|---|
| 1 | Mr.A | P2 | 5 |
| 1 | Mr.A | P3 | 2 |
| 2 | Mr.B | P1 | 3 |
| 3 | Mr.C | NULL | NULL |
| 4 | Mr.D | NULL | NULL |
เมื่อใช้คำสั่ง RIGHT JOIN และ ON ดังนี้ จะได้ผลลัพท์ของการซื้อที่ไม่มีประวัติลูกค้าอยู่ เข้ามาด้วย
SELECT m.member_id, m.name, o.product_id, o.amount FROM members as m RIGHT JOIN orders as o ON o.member_id = m.member_id;
จะได้ผลลัพท์ดังนี้
| member_id | name | product_id | amount |
|---|---|---|---|
| 1 | Mr.A | P2 | 5 |
| 1 | Mr.A | P3 | 2 |
| 2 | Mr.B | P1 | 3 |
| NULL | NULL | P2 | 1 |
เมื่อใช้คำสั่ง CROSS JOIN และ ON ดังนี้ จะได้ผลลัพท์ของการซื้อที่มีประวัติลูกค้าอยู่เท่านั้น หมายถึงทั้งสองตารางที่ข้อมูลสัมพันธ์กัน
SELECT m.member_id, m.name, o.product_id, o.amount FROM members as m CROSS JOIN orders as o ON o.member_id = m.member_id;
จะได้ผลลัพท์ดังนี้
| member_id | name | product_id | amount |
|---|---|---|---|
| 1 | Mr.A | P2 | 5 |
| 1 | Mr.A | P3 | 2 |
| 2 | Mr.B | P1 | 3 |
