Zincirleme JOIN
Müşteri → sipariş → sipariş satırı → ürün yolunu takip edelim:
SELECT c.city,
p.category,
ROUND(SUM(oi.quantity * oi.unit_price * (1 - oi.discount)), 2) AS ciro
FROM customers c
JOIN orders o ON o.customer_id = c.customer_id
JOIN order_items oi ON oi.order_id = o.order_id
JOIN products p ON p.product_id = oi.product_id
WHERE o.status = 'delivered'
GROUP BY c.city, p.category
ORDER BY ciro DESC
LIMIT 10;
Fan-out: satırların çoğalması
Bire-çok ilişkide JOIN yaptığında “bir” tarafındaki satır “çok” tarafındaki her satır için tekrarlanır. Sipariş tablosunu satırlarıyla birleştirip sipariş sayısını COUNT(*) ile sayarsan, sipariş satırı sayısını bulursun:
SELECT COUNT(*) AS yanlis, COUNT(DISTINCT o.order_id) AS dogru FROM orders o JOIN order_items oi ON oi.order_id = o.order_id;
Derinleş: grain tablosu
Birleştirdiğin her tablonun bir satırının neyi temsil ettiğini yaz:
| Tablo | Bir satır |
|---|---|
| lk_orders | bir sipariş |
| lk_order_lines | bir siparişteki bir ürün |
| lk_ratings | bir siparişin değerlendirmesi (0 ya da 1) |
Siparişleri satırlarla birleştirince tanecik “sipariş satırı” olur; siparişe ait tutarlar (bahşiş, teslimat ücreti) satır sayısı kadar tekrarlanır. Ya önce satırları sipariş düzeyine topla, ya da siparişe ait tutarları ayrı bir sorguda hesapla.