JOIN’leri ezberlemek yerine tek bir örnekle görelim. İki tablomuz var:
ogrenciler
| id | ad | sinif_id |
|---|---|---|
| 1 | Ayşe | 10 |
| 2 | Mehmet | 20 |
| 3 | Zeynep | NULL |
siniflar
| id | sinif_adi |
|---|---|
| 10 | 9-A |
| 20 | 9-B |
| 30 | 10-C |
-- INNER JOIN: sadece iki tarafta da eşleşenler
SELECT o.ad, s.sinif_adi
FROM ogrenciler o
INNER JOIN siniflar s ON s.id = o.sinif_id;
-- Ayşe 9-A | Mehmet 9-B
-- LEFT JOIN: soldaki herkes + eşleşen varsa sağdan bilgi
SELECT o.ad, s.sinif_adi
FROM ogrenciler o
LEFT JOIN siniflar s ON s.id = o.sinif_id;
-- Ayşe 9-A | Mehmet 9-B | Zeynep NULL
-- RIGHT JOIN: sağdaki her sınıf + varsa öğrencisi
SELECT o.ad, s.sinif_adi
FROM ogrenciler o
RIGHT JOIN siniflar s ON s.id = o.sinif_id;
-- Ayşe 9-A | Mehmet 9-B | NULL 10-C
-- FULL OUTER JOIN: iki taraftaki herkes (MySQL desteklemez, PostgreSQL/SQL Server destekler)
SELECT o.ad, s.sinif_adi
FROM ogrenciler o
FULL OUTER JOIN siniflar s ON s.id = o.sinif_id;
-- Ayşe 9-A | Mehmet 9-B | Zeynep NULL | NULL 10-C
Pratik ipucu: “Sınıfı olmayan öğrencileri bul” gibi sorular LEFT JOIN + WHERE s.id IS NULL ile çözülür:
SELECT o.ad
FROM ogrenciler o
LEFT JOIN siniflar s ON s.id = o.sinif_id
WHERE s.id IS NULL; -- Zeynep
MySQL’de FULL OUTER JOIN gerekiyorsa LEFT JOIN ve RIGHT JOIN sonuçlarını UNION ile birleştirebilirsin.