Devdit
 

จอยตาราง SQL ด้วย JOIN, LEFT JOIN และ RIGHT JOIN

249

บทความนี้สอนจอยตาราง SQL ทั้งหมด 3 วิธีคือ JOIN หรือ INNER JOIN และ LEFT JOIN และสุดท้าย RIGHT JOIN โดยการจอยตารางทั้ง 3 วิธีนั้นจะมีความแตกต่างด้านผลลัพธ์ คำสั่ง และวัตถุประสงค์ในการจอยตาราง SQL โดยมีรายละเอียดดังนี้

 

ตัวอย่าง คำสั่งการจอยตาราง SQL

1. JOIN หรือ INNER JOIN คือการจอยตารางด้วยคำสั่ง SQL โดยจะแสดงข้อมูลที่เหมือนกันจาก field primary key และ foreign key ของทั้ง 2 ตาราง

2. LEFT JOIN หรือ LEFT OUTER JOIN คือการจอยตารางด้วยคำสั่ง SQL โดยจะแสดงข้อมูลทั้งหมดของตารางฝั่งซ้าย (ตารางแรกที่ถูกกล่าวถึง) เป็นหลัก พร้อมกับข้อมูลของตารางฝั่งขวา (ตารางที่สอง) หากไม่มีข้อมูลจะแสดงเป็น NULL

3. RIGHT JOIN หรือ RIGHT OUTER JOIN คือการจอยตารางด้วยคำสั่ง SQL โดยจะแสดงข้อมูลทั้งหมดของตารางฝั่งขวา (ตารางที่สองที่ถูกกล่าวถึง) เป็นหลัก พร้อมกับข้อมูลของตารางฝั่งซ้าย (ตารางที่หนึ่ง) หากไม่มีข้อมูลจะแสดงเป็น NULL

 

ตัวอย่าง ตารางข้อมูลทั้ง 2 ที่จะนำมาจอย

1. ตาราง orders โดย primary key คือ field id

idcreatedpaid_status
12024-01-29 08:03:17paid
22024-01-29 11:03:17paid
32024-01-29 12:03:17paid
42024-01-30 08:03:17unpaid
52024-01-30 14:03:17unpaid

 

2. ตาราง orders_details โดย primary key คือ field id และ foreign key คือ order_id

idproduct_idamountorder_id
1121
2621
3212
4313
5733
64104
75104

 

ตัวอย่าง วิธีการจอยตาราง SQL แบบ JOIN หรือ INNER JOIN

SELECT *
FROM
orders o
JOIN order_details od ON ( o.id = od.order_id )

ผลลัพธ์

idcreatedpaid_statusidproduct_idamountorder_id
12024-01-29 08:03:17paid1121
12024-01-29 08:03:17paid2621
22024-01-29 11:03:17paid3212
32024-01-29 12:03:17paid4313
32024-01-29 12:03:17paid5733
42024-01-30 08:03:17unpaid64104
42024-01-30 08:03:17unpaid75104

จากผลลัพธ์เป็นการจอยตารางโดยแสดงข้อมูลที่เหมือนกันของ field id (primary key) จากตาราง orders และ field order_id (foreign key) จากตาราง order_details

 

ตัวอย่าง วิธีการจอยตาราง SQL แบบ LEFT JOIN หรือ LEFT OUTER JOIN

SELECT *
FROM
orders o
LEFT JOIN order_details od ON ( o.id = od.order_id )

ผลลัพธ์

idcreatedpaid_statusidproduct_idamountorder_id
12024-01-29 08:03:17paid1121
12024-01-29 08:03:17paid2621
22024-01-29 11:03:17paid3212
32024-01-29 12:03:17paid4313
32024-01-29 12:03:17paid5733
42024-01-30 08:03:17unpaid64104
42024-01-30 08:03:17unpaid75104
52024-01-30 14:03:17unpaidNULLNULLNULLNULL

จากผลลัพธ์การใช้ LEFT JOIN จะเห็นว่าแถว id 5 ของ orders นั้นข้อมูลจากตาราง order_details จะมีค่าเป็น NULL ทั้งหมด เนื่องจาก field order_id (foreign key) ของตาราง order_details ไม่มีข้อมูลหมายเลข 5 ที่ตรงกับ field id (primary key) ของตาราง orders แต่ด้วยการใช้ LEFT JOIN จึงทำให้ต้องแสดงข้อมูลทั้งหมดจากตารางฝั่งซ้าย (ตารางแรกที่ถูกกล่าวถึง) คือตาราง orders

 

ตัวอย่าง วิธีการจอยตาราง SQL แบบ RIGHT JOIN หรือ RIGHT OUTER JOIN

SELECT *
FROM
orders o
RIGHT JOIN order_details od ON ( o.id = od.order_id )

ผลลัพธ์

idcreatedpaid_statusidproduct_idamountorder_id
12024-01-29 08:03:17paid1121
12024-01-29 08:03:17paid2621
22024-01-29 11:03:17paid3212
32024-01-29 12:03:17paid4313
32024-01-29 12:03:17paid5733
42024-01-30 08:03:17unpaid64104
42024-01-30 08:03:17unpaid75104

จากผลลัพธ์การใช้ RIGHT JOIN ซึ่งจะแสดงข้อมูลทั้งหมดจากตารางฝั่งขวา (ตารางที่สองที่ถูกกล่าวถึง) คือตาราง order_details จึงทำให้ข้อมูล id (primary key) ของตาราง orders ไม่แสดง เนื่องจากตาราง field order_id (foreign key) ของตาราง order_details ไม่มีค่าเลข 5

 

สรุป ในบทความนี้เราได้เรียนรู้การจอยตารางด้วยคำสั่ง SQL ประกอบด้วย JOIN, LEFT JOIN และ RIGHT JOIN ซึ่งการจอยทั้ง 3 นั้นมีวัตถุประสงค์การใช้งาน ผลลัพธ์ และวิธีการเขียนไม่เหมือนกัน เราจึงควรเลือกใช้การจอยตาราง SQL ให้เหมาะสมกับความสัมพันธ์ของข้อมูล และผลลัพธ์ที่ต้องการแสดงผล

แก้ไข 2 เดือนที่แล้ว
ชอบ
ลิ้งก์
แชร์
Devdit มีช่อง YouTube แล้ว
เราสร้างวิดีโอเกี่ยวกับเทคโนโลยี ทำตามง่ายๆ