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;
Kategori seçin...