A-AA+then

พูดถึงว่าทำไมต้อง Join ไปแล้ว มาดูข้อดีข้อเสียของการ Join กันบ้าง
ข้อดี ถ้าดูที่จุดประสงค์ของการ Join ข้อดีของมันก็ตามจุดประสงค์นั่นแหละครับ คือ สามารถใช้ในการรวมข้อมูลหลายๆรายการเข้าเป็นข้อมูลชุดเดียวได้ ลดการซ้ำซ้อน และ แก้ไขง่าย
ข้อเสีย หลักๆเลยคงเป็น query ที่ยุ่งยากขึ้น เนื่องจากต้องเขียนคำสั่งเพื่อรวมข้อมูลจากหลายๆตารางเข้าด้วยกัน ซึ่งหากออกแบบไม่ดีมีโอกาศที่จะได้ข้อมูลที่ไม่ถูกต้องหรือไม่ก็ทำให้มีการประมวลผลช้า

รูปแบบในการ Join

  • INNER LOIN เป็นการจับคู่เฉพาะข้อมูลที่ตรงกันเท่านั้น หากข้อมูลแถวใดไม่สามารถจับคู่ได้จะไม่ถูกนำมาเป็นผลลัพท์
  • OUTER JOIN เป็นการจับคู่รายการที่ตรงกัน แต่หากข้อมูลแถวใดไม่สามารถจับคู่ได้ จะยังคงคืนค่าข้อมูลแถวนั้นในผลลัพท์ด้วย โดยรายการที่ไม่สามารถจับคู่ได้จะคืนค่า NULL ออกมา
  • LEFT JOIN คล้ายๆ OUTER JOIN โดยที่ข้อมูลในตารางด้านซ้ายจะคืนค่าออกมาทุกแถว ในขณะที่ข้อมูลในตารางด้านขวาจะคืนค่าเฉพาะข้อมูลที่จับคู่กับตารางด้านซ้ายเท่านั้น
  • RIGHT JOIN ตรงกันข้ามกับ LEFT JOIN โดยคืนค่าข้อมูลทุกแถวในตารางด้านขวา และคืนค่าข้อมูลในตารางด้านซ้ายเฉพาะที่จับคู่กับตารางด้านขวาได้เท่านั้น
ทั้ง 4 รูปแบบมีวิธีการใช้ที่เหมือนกัน ต่างกันแค่ผลลัพท์ที่ได้เท่านั้น
SELECT L.field1,R.field1 FROM left_table AS L
[INNER, OUTER, LEFT, RIGHT] JOIN right_table AS R ON R.field=L.field
WHERE ....

กฎในการ JOIN

  1. คำสั่งที่ใช้ในการ JOIN จะอยู่ภายใต้ ON เท่านั้น
  2. การกรองผลลัพท์ จะอยู่ภายใต้ WHERE
  3. สามารถ JOIN ได้หลายตาราง และสามารถจับคู่กับตารางที่นำมา JOIN ได้ด้วย โดยจะสามารถจับคู่กับตารางที่นำมา JOIN ก่อนเท่านั้น
SELECT I.item_id,I.detail,G.cat_name FROM items AS I
INNER JOIN categories AS C ON C.item_id=I.item_id
INNER JOIN category AS G ON G.cat_id=C.cat_id

ผลลัพท์
item_id detail cat_name
1 ปู หมา
1 ปู แมว
2 พี หมา
หรือหากต้องการเฉพาะข้อมูลของ ปู ก็ต้องกำหนด WHERE ลงไปด้วยตามคำสั่งด้านล่าง
SELECT I.item_id,I.detail,G.cat_name FROM items AS I
INNER JOIN categories AS C ON C.item_id=I.item_id
INNER JOIN category AS G ON G.cat_id=C.cat_id
WHERE I.item_id=1

Relate

^