JOIN

INNER JOIN iki veya daha fazla tablodaki ilişkili değerleri seçmek/birleştirmek için
kullanılır. Özetle; SQL INNER JOIN ifadesi ortak değere sahip tabloları birleştirmek için
kullanılır.
SELECT c.customer_id, first_name, amount, payment_date FROM customer as c INNER JOIN payment p ON p.customer_id= c.customer_id ORDER BY payment_date DESC;
Sorguya iki tane tablo katılmış. Customer tablosundaki customer_id değeri
ile payment tablosundaki customer_id değerlerini karşılaştırıp eşit olanların
customer_id , first_name , amount ve payment_date değerlerini getiren
sorgudur.
“customer as c” ile customer tablosuna ‘c’ takma adı verilmiştir.
c.customer_id = customer.customer_id alias verilmesinin sebebi
sorguyu kısaltmaktır.
“payment p” ile payment tablosuna ‘p’ takma adı verilmiştir.
Her iki tablo da aynı customer_id sütununa sahip olduğundan, USING ifadesi
kullanılabilir.

SELECT customer_id, first_name, last_name, amount, payment_date FROM customer INNER JOIN payment USING(customer_id) ORDER BY payment_date; SELECT c.customer_id, c.first_name customer_first_name, c.last_ name customer_last_name, s.first_name staff_first_name, s.last_ name staff_last_name, amount, payment_date FROM customer c INNER JOIN payment p ON p.customer_id = c.customer_id INNER JOIN staffs ON p.staff_id = s.staff_id ORDER BY payment_date;

SELECT inventory.film_id FROM rental INNER JOIN inventory ON inventory.inventory_id = rental.inventory_id WHERE return_date BETWEEN ‘2005-05-29’ AND ‘2005-05-30’;
Left join
Sol tablodaki (tablo1) tüm satırları ve koşul ile belirtilen sağ tablodaki (tablo2) satırları
seçmek/birleştirmek için kullanılır. Sol tablodaki değer ile sağ tablodaki eşleşmeyen
değer olması durumunda sağ tablodaki değerler ‘NULL’ değerini alır.
SELECT column_names FROM table1 LEFT JOIN table2 ON table1.column_ name = table2.column_name WHERE conditions;
SELECT film.film_id, title, inventory_id FROM film LEFT JOIN inventory ON inventory.film_id = film.film_id ORDER BY title;
Film tablosundaki her satır, inventory tablosunda sıfır veya birçok satıra sahip
olabilir. inventory tablosundaki her satır, film tablosunda yalnızca bir satıra sahiptir.
film_id sütunu, film ve inventory tabloları arasındaki bağlantıyı kurar.
SELECT film.film_id, film.title, inventory_id FROM film LEFT JOIN inventory ON inventory.film_id = film.film_id WHERE inventory. film_id IS NULL ORDER BY title ;
Her iki tablo da ON yan tümcesinde kullanılan sütun adına sahipse, USING ifadesini şu
şekilde kullanabilirsiniz:
SELECT f.film_id, title, inventory_id FROM film f LEFT JOIN inventory i USING (film_id) WHERE i.film_id IS NULL ORDER BY title;
Self join
Self join işlemi, bir tablonun kendisi ile join işlemine girmesi işlemidir. Tablo içinde
bulunan satırlar arasında referans ilişkisi vardır.
ÖRNEK: Sorgu aynı uzunluktaki film çiftlerini ve uzunluklarını ekrana getirir.
SELECT f1.title, f2.title, f1.length FROM film f1 INNER JOIN film f2 ON f1.film_id <> f2.film_id AND f1.length = f2.length;
