Kenan k?l??aslan

  • Baca Hesabı
  • Sürtünme Kaybı
  • Diferansiyel Denklem
  • Denklem Çözümü
SQL Server

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.

beyaz_sayfa_en_alt_oval