LEFT JOIN กับ RIGHT JOIN ต่างกันที่ LEFT JOIN จะแสดงข้อมูลทั้งหมดจากตารางฝั่งซ้ายเป็นหลัก (ตารางแรกที่เขียน SQL) ส่วน RIGHT JOIN จะตรงกันข้ามคือแสดงข้อมูลทั้งหมดจากตารางฝั่งขวาแทน (ตารางสองที่เขียน SQL) มาดูตัวอย่างการเขียน LEFT JOIN และ RIGHT JOIN กันมีรายละเอียดดังนี้
ตัวอย่าง โครงสร้างตาราง orders และ order_details
1. ตาราง orders
2. ตาราง order_details
ทั้ง 2 ตารางเชื่อมกันผ่าน field id (primary key) ของตาราง orders กับ field order_id (foreign key) ของตาราง order_details วิเคราะห์จากข้อมูลจะเห็นว่าตาราง order_details ไม่มีข้อมูล order_id เท่ากับ 5 ซึ่งจุดนี้จะทำให้เห็นผลลัพธ์การใช้ LEFT JOIN และ RIGHT JOIN
ตัวอย่าง การเขียน LEFT JOIN
SELECT *
FROM
orders o
LEFT JOIN order_details od ON ( o.id = od.order_id )
ผลลัพธ์
id | created | paid_status | id | product_id | amount | order_id |
---|---|---|---|---|---|---|
1 | 2024-01-29 08:03:17 | paid | 2 | 3 | 2 | 1 |
1 | 2024-01-29 08:03:17 | paid | 1 | 1 | 2 | 1 |
2 | 2024-01-29 11:03:17 | paid | 3 | 2 | 1 | 2 |
5 | 2024-01-30 14:03:17 | unpaid | NULL | NULL | NULL | NULL |
กรณีนี้จะแสดงข้อมูลทั้งหมดจากตารางฝั่งซ้าย (คือตารางแรกที่ถูกเขียน SQL ก็คือ orders) ทำให้ข้อมูลจะแสดง id เลข 5 ด้วยแต่ข้อมูลจาก order_detail ในแถวดังกล่าวจะไม่มีข้อมูล เนื่องจากไม่มีข้อมูลที่สัมพันธ์กับตารางฝั่งซ้ายคือ orders
ตัวอย่าง การเขียน RIGHT JOIN
SELECT *
FROM
orders o
RIGHT JOIN order_details od ON ( o.id = od.order_id )
ผลลัพธ์
id | created | paid_status | id | product_id | amount | order_id |
---|---|---|---|---|---|---|
1 | 2024-01-29 08:03:17 | paid | 1 | 1 | 2 | 1 |
1 | 2024-01-29 08:03:17 | paid | 2 | 3 | 2 | 1 |
2 | 2024-01-29 11:03:17 | paid | 3 | 2 | 1 | 2 |
กรณีนี้จะแสดงข้อมูลทั้งหมดจากตารางฝั่งขวา (คือตารางที่สองที่ถูกเขียน SQL ก็คือ order_details) ทำให้ข้อมูลจะแสดงเพียง 3 แถวเนื่องจาก order_id (foreign key) ไม่มีข้อมูลเลข 5 ที่อยู่ในตาราง orders field id (primary key)