MySQL ความต่างระหว่าง LEFT, RIGHT, INNER และ OUTER JOIN

ความต่างระหว่าง LEFT-RIGHT-INNER-OUTER-JOIN-7
ความต่างระหว่าง LEFT-RIGHT-INNER-OUTER-JOIN-7

จากบทความเรื่องการใช้งาน UNION เพื่อรวมข้อมูลมากกว่า 2 ตาราง ใน MySQL การใช้งาน UNION ใน MySQL คำสั่งการ JOIN ข้อมูลใน MySQL นั้น จะแตกต่างจากคำสั่งการ UNION คือ การ JOIN จะเป็นการรวมข้อมูลของทุกตาราง ไว้เป็นชุดเดียวกัน แต่ยังเก็บ Column ของทุกตารางไว้ทั้งหมด ส่วนการ UNION จะเป็นการรวมข้อมูล ทั้งตาราง และ Column มาไว้ในตารางหลักเพียงที่เดียว

เริ่มจาก ทำความเข้าใจก่อนว่า ตารางไหน LEFT และตารางไหน RIGHT

ก่อนจะเริ่มใช้คำสั่ง JOIN ใน MySQL ทำความเข้าใจก่อนว่า อันไหนคือตาราง LEFT และ อันไหนคือตาราง RIGHT อธิบายให้เข้าใจง่าย ๆ คือ ตารางไหนอยู่ทางซ้ายมือของเรา คือ Left Table ตารางไหนอยู่ทางขวามือของเรา คือ Right Table ดูอธิบายตามตามด้านล่างครับ

companies คือตารางซ้าย และ suppliers คือตารางขวา

แต่ถ้าสลับตำแหน่งกันแบบนี้ suppliers จะกลายเป็นตารางซ้าย และ companies คือตารางขวา

อธิบายการ JOIN แต่ละแบบ

  • LEFT JOIN คือ การรวมข้อมูลของตารางฐานข้อมูล ตั้งแต่ 2 ตารางขึ้นไป โดยให้ความสำคัญกับตารางทางฝั่งซ้าย

ความหมายคือ เรียกข้อมูลตารางทางซ้ายมาทั้งหมดเมื่อเข้าเงื่อนไข ส่วนตารางทางฝั่งขวา ถ้าไม่มีข้อมูลจะแสดงเป็น NULL ตัวอย่างตามภาพด้านล่าง ข้อมูลตาราง LEFT มาทั้งหมด แต่ข้อมูลตาราง RIGHT มี 1 Row ที่เป็นค่า NULL เพราะไม่ตรงตามเงื่อนไข (companies.company_id = suppliers.supplier_id)

คำสั่ง MySQL LEFT JOIN สำหรับทดสอบ Query

SELECT * FROM companies LEFT JOIN suppliers ON (companies.company_id = suppliers.supplier_id)
  • RIGHT JOIN คือ การรวมข้อมูลของตารางฐานข้อมูล ตั้งแต่ 2 ตารางขึ้นไป โดยให้ความสำคัญกับตารางทางฝั่งขวา

ความหมายคือ เรียกข้อมูลตารางทางขวามาทั้งหมดเมื่อเข้าเงื่อนไข ส่วนตารางทางฝั่งซ้าย ถ้าไม่มีข้อมูลจะแสดงเป็น NULL ตัวอย่างตามภาพด้านล่าง ข้อมูลตาราง RIGHT มาทั้งหมด แต่ข้อมูลตาราง LEFT มี 1 Row ที่เป็นค่า NULL เพราะไม่ตรงตามเงื่อนไข (companies.company_id = suppliers.supplier_id)

คำสั่ง MySQL RIGHT สำหรับทดสอบ Query

SELECT * FROM companies RIGHT JOIN suppliers ON (companies.company_id = suppliers.supplier_id)
  • INNER JOIN คือ การรวมข้อมูลของตารางฐานข้อมูล ตั้งแต่ 2 ตารางขึ้นไป โดยให้ความสำคัญกับเงื่อนไขภายใน ON

ความหมายคือจะต้องตรงตามเงื่อนไขเท่านั้นถึงจะนำข้อมูลนั้นมาแสดง ตัวอย่างตามภาพด้านล่าง จะเห็นได้ว่าข้อมูลที่ได้มา จะต้องมี company_id และ supplier_id ที่ตรงกันเท่านั้น

คำสั่ง MySQL INNER JOIN สำหรับทดสอบ Query

SELECT * FROM companies INNER JOIN suppliers ON (companies.company_id = suppliers.supplier_id)
  • OUTER JOIN ใน MySQL จะไม่มีคำสั่ง OUTER JOIN หรือ FULL OUTER JOIN โดยตรง แต่จะเป็นการใช้ร่วมกับคำสั่ง UNION เพื่อให้ได้ผลลัพธ์เดียวกันกับ FULL OUTER JOIN ในภาษา SQL อื่น ๆ

ผลลัพธ์ที่ได้ คือ จะเป็นการรวมข้อมูลตารางเข้าด้วยกัน แต่แยก column ชัดเจน ( ซึ่งจะแตกต่างจากคำสั่ง UNION ที่จะเป็นการรวมทั้งตารางและ column เข้าด้วยกัน )

คำสั่ง MySQL OUTER JOIN สำหรับทดสอบ Query

SELECT * FROM companies AS a LEFT OUTER JOIN suppliers AS b ON (a.company_id = b.supplier_id) UNION SELECT * FROM companies AS a RIGHT OUTER JOIN suppliers AS b ON (a.company_id = b.supplier_id)

เสริมท้ายบทความ อีกนิดหนึ่งครับ ในภาษา MySQL นั้น คำสั่ง LEFT JOIN กับ คำสั่ง LEFT OUTER JOIN จะให้ผลลัพธ์ของข้อมูล ไม่แตกต่างกันเลย เช่นเดียวกันกับคำสั่ง RIGHT JOIN และ RIGHT OUTER JOIN

Leave a Reply