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
- แสดง order พร้อมชื่อลูกค้า
- แสดงลูกค้าทุกคนพร้อม order ถ้ามี
- หาลูกค้าที่ไม่เคยมี order
- สรุปยอดขายรวมแยกตามลูกค้า