Birleştirme Sorguları
Aşağıdaki örnek iki tablo üzerinden örneklerle açıklayalım.
Genel ifade
SELECT ..1.. FROM ..2.. INNER JOIN ..3.. ON ..4.. ..5..
1 nolu yere, listede görünmesini istediğimiz kolonlar bulunur.
Birleştirilen tablolarda aynı isimli kolonlar bulunabilir. Kolonun hangi tabloya ait olduğunu belirlemek için, aşağıdaki gibi yazılabilir.
"tbl_Urun" tablosunda bulunan "UrunKodu" alanı aşağıdaki gibi ifade edilir.
tbl_Urun.UrunKodu
"tbl_SiparisDetay" tablosunda bulunan "UrunKodu" alanı aşağıdaki gibi ifade edilir.
tbl_SiparisDetay.UrunKodu
2 ve 3 nolu yere, birleştirilen tabloların isimleri yazılır.
Tablo isimleri uzun olduğu için tablolara bu sorguda geçerli olmak üzere bir ya da iki karakterlik kısa takma isim verilir.
... tbl_Urun u INNER JOIN tbl_SiparisDetay s ...
Sorgu içinde tbl_Urun için u, tbl_SiparisDetay için s'yi kullanacağız. u.adi, u.UrunKodu, s.UrunKodu gibi
SELECT tbl_SiparisDetay.SiparisNo, tbl_SiparisDetay.urunKodu,
tbl_SiparisDetay.miktar, tbl_SiparisDetay.Fiyat,
tbl_urun.UrunAdi, tbl_urun.Birimi
FROM tbl_SiparisDetay INNER JOIN tbl_urun ON ...
yerine kısa isimli olarak
SELECT s.SiparisNo, s.urunKodu,
s.miktar, s.Fiyat,
u.UrunAdi, u.Birimi
FROM tbl_SiparisDetay s INNER JOIN tbl_urun u ON ...
yazacağız.
4 nolu yere, birleştirme koşulu yazılır.
... s.UrunKodu = u.UrunKodu ...
s deki ürünkodu ile u daki urunkodu eşleşen kayıtlar listelenir. Eşleşmeyenler listede bulunmaz.
SELECT s.SiparisNo, s.urunKodu, s.miktar, s. Fiyat,
u.UrunAdi, u.Birimi FROM tbl_SiparisDetay s
INNER JOIN tbl_urun u ON s.UrunKodu = u.UrunKodu
Birleşen tabloları küme olarak ele alırsak, kesişim kümesi listede bulunur.
Yukarıdaki birleştirme sorgusunu aşağıdaki gibi de yazabiliriz.
SELECT s.SiparisNo, s.urunKodu, s.miktar, s. Fiyat,
u.UrunAdi, u.Birimi FROM tbl_SiparisDetay s, tbl_urun u
WHERE s.UrunKodu = u.UrunKodu
tbl_urun, tbl_siparis_detay ve birleşmiş sorgu sonucunu incelediğimizde; Siparişdetay da bulunan H kodlu ürün, urun tablosunda bulunmadığı için listede bulunmadı
ve ÜrünTablosundaki E kodlu ürün, sipariş detay tablosunda bulunmadığı için listede bulunmadı.
Soru
1 nolu siparişte bulunan ürünleri, ürün adıyla birlikte listeleyiniz.
Çözüm-1
SELECT s.*, u.UrunAdi FROM tbl_SiparisDetay s INNER JOIN
tbl_Urun u ON s.UrunKodu = u.UrunKodu WHERE s.SiparisNo=1
Çözüm-2
SELECT s.*, u.UrunAdi FROM tbl_SiparisDetay s, tbl_Urun u
WHERE s.UrunKodu = u.UrunKodu and s.SiparisNo=1
ON deyimine göre sol tarafta bulunan tablodaki "H" kodlu ürünü de listelemek için INNER JOIN yerine LEFT JOIN yazmamız gerekir.
LEFT JOIN sayesinde sol tarafta yazılı tablonun tüm kayıtları listede bulunur. Sağ taraftaki tablonun değerleri, karşılığı olmadığı için
NULL olur.
SELECT s.*, u.UrunAdi FROM tbl_SiparisDetay s LEFT JOIN
tbl_Urun u ON s.UrunKodu = u.UrunKodu WHERE s.SiparisNo=1
ON deyimine göre sağ tarafta bulunan tablodaki tüm kayıtları listelemek için INNER JOIN yerine RIGHT JOIN yazmamız gerekir.
RIGHT JOIN sayesinde sağ tarafta yazılı tablonun tüm kayıtları listede bulunur. Sol taraftaki tablonun değerleri, karşılığı olmadığı için
NULL olur.
SELECT s.*, u.UrunAdi FROM tbl_SiparisDetay s RIGHT JOIN
tbl_Urun u ON s.UrunKodu = u.UrunKodu WHERE s.SiparisNo=1
ÖZEL NOT:
... LEFT JOIN ... : Solda bulunan tablonun tüm kayıtlarını, sağında bulunan tabloların eşleşen kayıtlarını listeler.
... RIGHT JOIN ... : Sağda bulunan tablonun tüm kayıtlarını, solda bulunan tablonun eşleşen kayıtlarını listeler.