เทคนิคการ Join ข้อมูล ตอนที่ 2
พูดถึงว่าทำไมต้อง Join ไปแล้ว มาดูข้อดีข้อเสียของการ Join กันบ้าง
ข้อดี ถ้าดูที่จุดประสงค์ของการ Join ข้อดีของมันก็ตามจุดประสงค์นั่นแหละครับ คือ สามารถใช้ในการรวมข้อมูลหลายๆรายการเข้าเป็นข้อมูลชุดเดียวได้ ลดการซ้ำซ้อน และ แก้ไขง่าย
ข้อเสีย หลักๆเลยคงเป็น query ที่ยุ่งยากขึ้น เนื่องจากต้องเขียนคำสั่งเพื่อรวมข้อมูลจากหลายๆตารางเข้าด้วยกัน ซึ่งหากออกแบบไม่ดีมีโอกาสที่จะได้ข้อมูลที่ไม่ถูกต้องหรือไม่ก็ทำให้มีการประมวลผลช้า
ผลลัพท์
หรือหากต้องการเฉพาะข้อมูลของ ปู ก็ต้องกำหนด WHERE ลงไปด้วยตามคำสั่งด้านล่าง
ข้อดี ถ้าดูที่จุดประสงค์ของการ Join ข้อดีของมันก็ตามจุดประสงค์นั่นแหละครับ คือ สามารถใช้ในการรวมข้อมูลหลายๆรายการเข้าเป็นข้อมูลชุดเดียวได้ ลดการซ้ำซ้อน และ แก้ไขง่าย
ข้อเสีย หลักๆเลยคงเป็น query ที่ยุ่งยากขึ้น เนื่องจากต้องเขียนคำสั่งเพื่อรวมข้อมูลจากหลายๆตารางเข้าด้วยกัน ซึ่งหากออกแบบไม่ดีมีโอกาสที่จะได้ข้อมูลที่ไม่ถูกต้องหรือไม่ก็ทำให้มีการประมวลผลช้า
รูปแบบในการ Join
- INNER LOIN เป็นการจับคู่เฉพาะข้อมูลที่ตรงกันเท่านั้น หากข้อมูลแถวใดไม่สามารถจับคู่ได้จะไม่ถูกนำมาเป็นผลลัพท์
- OUTER JOIN เป็นการจับคู่รายการที่ตรงกัน แต่หากข้อมูลแถวใดไม่สามารถจับคู่ได้ จะยังคงคืนค่าข้อมูลแถวนั้นในผลลัพท์ด้วย โดยรายการที่ไม่สามารถจับคู่ได้จะคืนค่า NULL ออกมา
- LEFT JOIN คล้ายๆ OUTER JOIN โดยที่ข้อมูลในตารางด้านซ้ายจะคืนค่าออกมาทุกแถว ในขณะที่ข้อมูลในตารางด้านขวาจะคืนค่าเฉพาะข้อมูลที่จับคู่กับตารางด้านซ้ายเท่านั้น
- RIGHT JOIN ตรงกันข้ามกับ LEFT JOIN โดยคืนค่าข้อมูลทุกแถวในตารางด้านขวา และคืนค่าข้อมูลในตารางด้านซ้ายเฉพาะที่จับคู่กับตารางด้านขวาได้เท่านั้น
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
- คำสั่งที่ใช้ในการ JOIN จะอยู่ภายใต้ ON เท่านั้น
- การกรองผลลัพท์ จะอยู่ภายใต้ WHERE
- สามารถ 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 | พี | หมา |
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