Logo

06 JOIN เพื่อเชื่อมข้อมูลหลาย Table

JOIN เพื่อเชื่อมข้อมูลหลาย Table

ข้อมูลจริงมักถูกแยกหลาย table เช่น ลูกค้าอยู่ใน customers และคำสั่งซื้ออยู่ใน orders เราใช้ JOIN เพื่อรวมข้อมูลเข้าด้วยกัน

INNER JOIN

ดึงเฉพาะ row ที่ match กันทั้งสอง table

SELECT
  orders.order_id,
  customers.name,
  orders.amount
FROM orders
INNER JOIN customers
  ON orders.customer_id = customers.customer_id;

ใช้ Alias ให้ SQL สั้นลง

SELECT
  o.order_id,
  c.name,
  o.amount
FROM orders AS o
INNER JOIN customers AS c
  ON o.customer_id = c.customer_id;

LEFT JOIN

ดึงข้อมูลจาก table ซ้ายทั้งหมด แม้ table ขวาไม่มีข้อมูล match

SELECT
  c.customer_id,
  c.name,
  o.order_id,
  o.amount
FROM customers AS c
LEFT JOIN orders AS o
  ON c.customer_id = o.customer_id;

ใช้หา customer ที่ยังไม่เคยสั่งซื้อ

SELECT
  c.customer_id,
  c.name
FROM customers AS c
LEFT JOIN orders AS o
  ON c.customer_id = o.customer_id
WHERE o.order_id IS NULL;

JOIN แล้ว GROUP BY

SELECT
  c.customer_id,
  c.name,
  SUM(o.amount) AS total_amount
FROM customers AS c
INNER JOIN orders AS o
  ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.name
ORDER BY total_amount DESC;

ข้อควรระวัง

  • ตรวจสอบ key ที่ใช้ join ให้ถูก
  • ระวัง row เพิ่มขึ้นถ้า join แบบ one-to-many
  • อย่าใช้ SELECT * ตอน join หลาย table เพราะ column อาจซ้ำและอ่านยาก

แบบฝึกหัด

มี table customers และ orders

  1. แสดง order พร้อมชื่อลูกค้า
  2. แสดงลูกค้าทุกคนพร้อม order ถ้ามี
  3. หาลูกค้าที่ไม่เคยมี order
  4. สรุปยอดขายรวมแยกตามลูกค้า