• ติดตามบน
เรียนรู้การเชื่อมโยงข้อมูลด้วย JOIN ในภาษา SQL (MySQL)

เรียนรู้การเชื่อมโยงข้อมูลด้วย JOIN ในภาษา SQL (MySQL)

Chalothorn Kosakul 14 กรกฎาคม 2569 10 ครั้ง

เรียนรู้การเชื่อมโยงข้อมูลด้วย JOIN ในภาษา SQL (MySQL)

จากบทเรียนการ ใช้คำสั่ง SELECT ในภาษา SQL พร้อมตัวอย่างใช้งานจริง (MySQL)

JOIN คืออะไร

เมื่อระบบฐานข้อมูลมีข้อมูลจำนวนมาก เราไม่นิยมเก็บข้อมูลทั้งหมดไว้ในตารางเดียว แต่จะแยกข้อมูลออกเป็นหลายตารางเพื่อลดความซ้ำซ้อน เช่น

  • ตารางลูกค้า (customers)
  • ตารางคำสั่งซื้อ (orders)
  • ตารางสินค้า (products)

เมื่อจำเป็นต้องแสดงข้อมูลร่วมกัน เช่น

"ลูกค้าคนใดซื้อสินค้าอะไร"

จึงต้องใช้คำสั่ง JOIN เพื่อเชื่อมโยงข้อมูลจากหลายตารางเข้าด้วยกัน กล่าวง่าย ๆ คือ:

JOIN คือการนำข้อมูลจากหลายตารางที่มีความสัมพันธ์กันมาแสดงเป็นผลลัพธ์เดียว

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

ตาราง customers

customer_idcustomer_nameprovince
1สมชายลำปาง
2สมหญิงเชียงใหม่
3อนันต์กรุงเทพฯ
4ศิริพรเชียงราย

ตาราง products

product_idproduct_nameprice
101Notebook Acer18900
102iPhone 1742900
103Logitech Mouse350
104Gaming Monitor7990

ตาราง orders

order_idcustomer_idproduct_idquantity
111011
211032
321021
431042

จะเห็นว่า orders เก็บเพียงรหัสลูกค้าและรหัสสินค้าเท่านั้น หากต้องการทราบว่า "สมชายซื้ออะไร" เราจึงจำเป็นต้องใช้ JOIN


ความสัมพันธ์ของตาราง (ER Diagram)



INNER JOIN

INNER JOIN จะแสดงเฉพาะข้อมูลที่จับคู่กันได้ตรงกันทั้งสองตารางเท่านั้น

โครงสร้าง Syntax

SELECT columns
FROM table1
INNER JOIN table2
ON table1.id = table2.id;

ตัวอย่างคำสั่ง

SELECT customers.customer_name, orders.quantity
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id;

ผลลัพธ์

ลูกค้าจำนวน
สมชาย1
สมชาย2
สมหญิง1
อนันต์2

INNER JOIN 3 ตาราง

เป็นรูปแบบที่นำไปใช้งานจริงมากที่สุด เพื่อดึงข้อมูลที่เชื่อมโยงกันแบบสมบูรณ์

SELECT customers.customer_name, products.product_name, orders.quantity
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id
INNER JOIN products ON orders.product_id = products.product_id;

ผลลัพธ์

ลูกค้าสินค้าจำนวน
สมชายNotebook Acer1
สมชายLogitech Mouse2
สมหญิงiPhone 171
อนันต์Gaming Monitor2

การใช้ Alias (นามแฝง)

ตั้งชื่อย่อให้ตารางเพื่อให้เขียนคำสั่งสั้นลงและอ่านง่ายขึ้น โดยเฉพาะเมื่อต้อง JOIN หลายตาราง

SELECT c.customer_name, p.product_name, o.quantity
FROM orders o
INNER JOIN customers c ON o.customer_id = c.customer_id
INNER JOIN products p ON o.product_id = p.product_id;

LEFT JOIN

จะแสดงข้อมูลทุกแถวของตารางด้านซ้าย (ตารางตั้งหลัก) แม้ว่าตารางด้านขวาจะไม่มีข้อมูลที่ตรงกันเลยก็ตาม (จะแสดงเป็นค่า NULL)

SELECT customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;

ผลลัพธ์

ลูกค้าOrder
สมชาย1
สมชาย2
สมหญิง3
อนันต์4
ศิริพรNULL

ข้อสังเกต: ศิริพรยังไม่เคยมีประวัติสั่งซื้อสินค้าเลย แต่ก็ยังแสดงรายชื่อออกมา โดยฝั่ง Order จะเป็น NULL


RIGHT JOIN

จะแสดงข้อมูลทุกแถวของตารางด้านขวาเป็นหลัก แม้ไม่มีข้อมูลฝั่งซ้ายมาจับคู่ก็ตาม

SELECT customers.customer_name, orders.order_id
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;

การใช้งาน JOIN ร่วมกับคำสั่งอื่น ๆ

1. JOIN พร้อม WHERE (ค้นหาเฉพาะลูกค้าจังหวัดลำปาง)

SELECT c.customer_name, p.product_name
FROM orders o
INNER JOIN customers c ON o.customer_id = c.customer_id
INNER JOIN products p ON o.product_id = p.product_id
WHERE c.province = 'ลำปาง';

2. JOIN พร้อม ORDER BY (เรียงราคาสินค้าจากมากไปน้อย)

SELECT c.customer_name, p.product_name, p.price
FROM orders o
INNER JOIN customers c ON o.customer_id = c.customer_id
INNER JOIN products p ON o.product_id = p.product_id
ORDER BY p.price DESC;

3. JOIN พร้อม GROUP BY (หายอดรวมจำนวนชิ้นที่ลูกค้าแต่ละคนซื้อ)

SELECT c.customer_name, SUM(o.quantity) AS total
FROM orders o
INNER JOIN customers c ON o.customer_id = c.customer_id
GROUP BY c.customer_name;

ผลลัพธ์

ลูกค้าจำนวนที่ซื้อ
สมชาย3
สมหญิง1
อนันต์2

สรุปประเภทของ JOIN

ประเภท JOINความหมายและการทำงาน
INNER JOINแสดงเฉพาะข้อมูลที่มี Key ตรงกันและจับคู่กันได้ทั้งสองตารางเท่านั้น
LEFT JOINแสดงข้อมูลทุกแถวของตารางซ้าย (หลัก) แม้ว่าตารางขวาจะไม่มีข้อมูลตรงกัน (พ่น NULL)
RIGHT JOINแสดงข้อมูลทุกแถวของตารางขวา (หลัก) แม้ว่าตารางซ้ายจะไม่มีข้อมูลตรงกัน

แบบฝึกหัดท้ายบท

  1. แสดงรายชื่อลูกค้าพร้อมสินค้าที่ซื้อ
  2. แสดงชื่อลูกค้า พร้อมราคาสินค้า
  3. แสดงลูกค้าที่อยู่จังหวัดเชียงใหม่
  4. เรียงราคาสินค้าจากมากไปน้อย
  5. แสดงจำนวนสินค้าที่ลูกค้าแต่ละคนซื้อ
  6. แสดงลูกค้าที่ยังไม่เคยสั่งซื้อสินค้า (ใช้ LEFT JOIN)
  7. แสดงสินค้าที่ถูกสั่งซื้อมากที่สุด
  8. หายอดซื้อรวมของลูกค้าแต่ละคน
  9. แสดงเฉพาะลูกค้าที่ซื้อสินค้าราคามากกว่า 10,000 บาท
  10. ใช้ Alias ให้กับทุกตารางในการเขียนคำสั่ง JOIN

แชร์บทความนี้