ฐานข้อมูล MySQL (5) คำสั่ง JOIN

Computer Database 01 มิถุนายน พ.ศ. 2566 570
Home / Articles / 50

บทความนี้เป็นการแนะนำคำสั่ง JOIN ของ MySQL ที่มีไว้สำหรับ เชื่อมต่อหลายตารางเข้าด้วยกัน เพื่อนำมาแสดงผล หรือนำมาสร้างเงื่อนไขต่างๆ โดยที่คำสั่ง JOIN จะมี อย่างน้อย 4 แบบคือ

MySQL Join

  • INNER JOIN แสดงข้อมูลส่วนที่มีข้อมูลตรงกันจากทั้งสองตาราง
  • LEFT JOIN แสดงข้อมูลของตารางซ้าย โดยที่มีข้อมูลบางส่วนตรงกันกับตารางด้านขวา
  • RIGHT JOIN แสดงข้อมูลของตารางขวา โดยที่มีข้อมูลบางส่วนตรงกันกับตารางด้านซ้าย
  • CROSS JOIN แสดงข้อมูลทั้งหมดจากสองตาราง

ตัวอย่างตาราง

ผมจะใช้ตารางเดียวกันกับบทความในตอนที่ 3 แต่รอบนี้ผมจะเพิ่มแถวที่ไม่ได้สัมพันธ์กับตารางอื่นๆลงไปด้วย ดังนี้

ตารางที่ 1 ตารางสมาชิก (members)

member_id name email
1 Mr.A [email protected]
2 Mr.B [email protected]
3 Mr.C [email protected]
4 Mr.D [email protected]

ตารางที่ 2 ตารางประวัติการสั่งซื้อ (orders)

id member_id product_id amount
1 1 P2 5
2 1 P3 2
3 2 P1 3
4 0 P2 1

ตารางที่ 3 ตารางสินค้า (products)

product_id name price
P1 Coffee 35
P2 Alcohol 20
P3 Cigarette 70

ใช้คำสั่ง INNER JOIN

เมื่อใช้คำสั่ง INNER JOIN และ ON ดังนี้ เพื่อแสดงแค่ลูกค้าที่มีประวัติการซื้อเท่านั้น

SELECT m.member_id, m.name, o.product_id, o.amount FROM members as m INNER JOIN orders as o ON o.member_id = m.member_id;

จะได้ผลลัพท์ดังนี้

member_id name product_id amount
1 Mr.A P2 5
1 Mr.A P3 2
2 Mr.B P1 3

ใช้คำสั่ง LEFT JOIN

เมื่อใช้คำสั่ง LEFT JOIN และ ON ดังนี้ จะได้ผลลัพท์ของลูกค้าที่ไม่มีประวัติซื้อของใน Orders เข้ามาด้วย

SELECT m.member_id, m.name, o.product_id, o.amount FROM members as m LEFT JOIN orders as o ON o.member_id = m.member_id;

จะได้ผลลัพท์ดังนี้

member_id name product_id amount
1 Mr.A P2 5
1 Mr.A P3 2
2 Mr.B P1 3
3 Mr.C NULL NULL
4 Mr.D NULL NULL

ใช้คำสั่ง RIGHT JOIN

เมื่อใช้คำสั่ง RIGHT JOIN และ ON ดังนี้ จะได้ผลลัพท์ของการซื้อที่ไม่มีประวัติลูกค้าอยู่ เข้ามาด้วย

SELECT m.member_id, m.name, o.product_id, o.amount FROM members as m RIGHT JOIN orders as o ON o.member_id = m.member_id;

จะได้ผลลัพท์ดังนี้

member_id name product_id amount
1 Mr.A P2 5
1 Mr.A P3 2
2 Mr.B P1 3
NULL NULL P2 1

ใช้คำสั่ง CROSS JOIN

เมื่อใช้คำสั่ง CROSS JOIN และ ON ดังนี้ จะได้ผลลัพท์ของการซื้อที่มีประวัติลูกค้าอยู่เท่านั้น หมายถึงทั้งสองตารางที่ข้อมูลสัมพันธ์กัน

SELECT m.member_id, m.name, o.product_id, o.amount FROM members as m CROSS JOIN orders as o ON o.member_id = m.member_id;

จะได้ผลลัพท์ดังนี้

member_id name product_id amount
1 Mr.A P2 5
1 Mr.A P3 2
2 Mr.B P1 3
Profile Picture.
  • Name (Pen name): Sunny Jirakit (Sunny420x)
  • Study: Bachelor Degree of Computer Science from Chiang Mai Rajabhat University
  • Personality: Architect (INTJ-T)
  • Experience: JavaScript,  Angular.js, React.js, Next.js  Express.js, Unity C#, Socket.io