Joinler iki tabloyu birleştirip, iki tablodan aynı andan veri seçmeye(select) yarar.
Joinler hepsi aslında kartezyen çarpımı yapar. Ve iki tipi vardır. İnner, Outer.
Inner join iki tablonun kartezyen çarpımını alıp where operatorle birleştirir.
Ayrıca null değerleri birbine bağlayamaz, bu sebeple outer ile asıl işlevsel farkı null değerlerin olamamasıdır.
(Bazı dillerde CROSS operator ile yapılır)
Outer join yine kartezyen çarpımı yapar. Ve farklı syntaxı vardır bu sebeple JOIN operatore vardır. En önemli işlevsel farkı null kabul etmesidir. Ve nullu ne taraftan kabul ettiğine göre 3'e ayrılır.
Sol taraf asla null olamaz, ama sağ taraf null olabilir.
Sqlite'de sadece left join var.
Sol taraf null olabilir, ama sağ taraf null olamaz.
Pek yaygın kullanılmaz.
İki tarafta null olabilir.
Motorda Full outer desteği yoksa, aynı sonucu left ve right joinlenmiş tabloları UNION operatorler birleştirerekte ulaşabilirsin.
Kullanılacak pek senaryo yoktur.
INNER JOIN örneği:
SELECT customers.customer_id, customers.customer_name, orders.order_id, orders.order_date
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id;
LEFT JOIN örneği:
SELECT customers.customer_id, customers.customer_name, orders.order_id, orders.order_date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;
RIGHT JOIN örneği:
SELECT customers.customer_id, customers.customer_name, orders.order_id, orders.order_date
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id;
FULL JOIN örneği:
SELECT customers.customer_id, customers.customer_name, orders.order_id, orders.order_date
FROM customers
FULL JOIN orders ON customers.customer_id = orders.customer_id;