ตอนแรกทำงานไป ทำงานมา ก็เกิดสงสัยว่า JOIN นี่มีกี่แบบ โดยมีคำถามหลายข้อเลย โดยผมขอสรุปเป็นข้อๆ ดังนี้
คำถาม: LEFT JOIN กับ LEFT OUTER JOIN ต่างกันอย่างไร
คำตอบ: ไม่ต่างกันเลย การทำงานเหมือนกัน
คำถาม: INNER JOIN กับ OUTER JOIN ต่างๆกันอย่างไร
คำตอบ: INNER JOIN เอาข้อมูลมาที่เหมือนกันท้ังสองฝั่งมาเทรวมกัน(Intersect) กัน แต่ OUTER JOIN เป็นการเทข้อมูลทั้งฝั่งใดฝั่งหนึ่ง หรือทั้งสองฝั่งมารวมกัน(Union)
คำถาม: แล้วมีการ JOIN แบบอื่นๆ หรือไม่
คำตอบ: มี โดยผมขอเกริ่นสรุปรูปแบบการ JOIN ของ TABLE ก่อน เพื่อเป็นการท้าวความหลังก่อนนะครับ
- INNER JOIN หรือ JOIN ดู Key ที่มีเหมือนกันทั้งสองกัน
- OUTER JOIN ดู Key ที่มีในฝั่งใดฝั่งหนึ่งเป็นหลัก หรือ ทั้งสองฝั่ง
- CROSS JOIN(Cartesian JOIN) ใช้เมื่อไม่มี Key ที่สามารถเขื่อมโยงตารางทั้งสองได้ ก็จะเอาข้อมูลของทั้งสองฝั่งมา JOIN กันในทุกๆ กรณีที่เป็นไปได้(คล้ายๆกับความน่าจะเป็น) ยกตัวอย่างเช่น ตาราง A มี 2 แุถว และตาราง B มี 3 แถว ผลลัพธ์ที่ได้จะออกมี 6 แุถว
ตาราง A
A1 | B1 A2 | B2
ตาราง B
X1 | Y1 | Z1 X2 | Y2 | Z2 X3 | Y3 | Z3
ผลลัพธ์ที่ได้จากการ CROSS JOIN (A, B)
A1 | B1 | X1 | Y1 | Z1 A1 | B1 | X2 | Y2 | Z2 A1 | B1 | X3 | Y3 | Z3 A2 | B2 | Y1 | Y1 | Z1 A2 | B2 | Y2 | Y2 | Z2 A2 | B2 | Y3 | Y3 | Z3
- และแบบสุดท้าย SELF JOIN คือ การ JOIN ในตัวมันเอง หรือการ JOIN ในตารางเดียวกัน
หมายเหตุ
- การ JOIN แบบ CROSS JOIN และ SELF JOIN อาจจะไม่มีครบในทุกๆ DBMS ก็ได้นะครับ เวลานำไปใช้งานจริง อาจจะไม่หาคำสั่งพวกนี้ไม่เจอนะครับ
- ผมได้แนบตารางสรุปการ JOINS ว่ามีลักษณะอย่างไร ดังรูป
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.