SQL JOINS

ตอนแรกทำงานไป ทำงานมา ก็เกิดสงสัยว่า 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 ในตารางเดียวกัน

หมายเหตุ

  1. การ JOIN แบบ CROSS JOIN และ SELF JOIN อาจจะไม่มีครบในทุกๆ DBMS ก็ได้นะครับ เวลานำไปใช้งานจริง อาจจะไม่หาคำสั่งพวกนี้ไม่เจอนะครับ
  2. ผมได้แนบตารางสรุปการ JOINS ว่ามีลักษณะอย่างไร ดังรูป

SQL Joins


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.