Eşleşenleri birleştir
INNER JOIN, ON koşulunu sağlayan satır çiftlerini birleştirir. Eşi olmayan satırlar sonuçta yer almaz.
SELECT o.order_id, o.order_date, c.first_name, c.last_name
FROM orders AS o
INNER JOIN customers AS c
ON o.customer_id = c.customer_id
LIMIT 10;
ovectablo takma adlarıdır; sorguyu kısaltır.- Aynı adlı sütun iki tabloda varsa (
customer_idgibi) hangi tablodan geldiğini belirtmen gerekir:o.customer_id. INNERkelimesi isteğe bağlıdır; sadeceJOINyazmak aynı şeydir.
Join'den sonra gruplama
Kategori bazında satılan adet:
SELECT p.category, SUM(oi.quantity) AS adet FROM order_items oi JOIN products p ON p.product_id = oi.product_id GROUP BY p.category ORDER BY adet DESC;
Eski usul yazım
Eski kodlarda FROM a, b WHERE a.id = b.a_id görebilirsin. Aynı sonucu verir ama birleştirme koşulunu WHERE'e karıştırdığı için okunması zordur ve koşul unutulursa her satırı her satırla eşleştirir. Açık JOIN ... ON yazımını tercih et.
JOIN customers USING (customer_id) kısaltması kullanılabilir.Derinleş: bir JOIN'i doğrulamak
Birleştirmeden sonra hep iki şeyi kontrol et: satır sayısı beklediğin gibi mi ve anahtar benzersiz mi? Siparişleri restoranlarla birleştirmek sipariş sayısını değiştirmemelidir, çünkü her siparişin tek bir restoranı vardır:
SELECT COUNT(*) AS siparis,
(SELECT COUNT(*) FROM lk_orders o JOIN lk_restaurants r ON r.restaurant_id = o.restaurant_id) AS birlesik
FROM lk_orders;
İki sayı farklıysa ya eşleşmeyen satırlar düşmüştür (INNER JOIN eşi olmayanları atar) ya da “bir” sandığın taraf aslında “çok”tur.