Kategoriler: Genel

MsSQL – Birleştirme İfadeleri (JOIN)

SQL ile ilgili geçen yazımızda genel SQL komutlarına giriş yapmış ve kullanımı hakkında örnekler vermiştik. Bu komutlar genel olarak tüm işlemlerinizde size yetecektir; ancak SQL “o kadarlık” bir dil değildir. Size daha sadece yolun başındayız diyebilirim…
Bu yazımızda SQL ile iki tabodaki ortak bir veriye göre bu iki tabloyu birleştirmeyi öğreneceğiz, yani JOIN ifadelerini…

Birleştirme ifadeleri INNER JOIN ve LEFT, RIGHT JOIN olmak üzere 2 ye ayrılır. Zamanı geldikçe her ikisini de kullanacaksınız. Bu yazımızda da aşağıdaki tablo yapısını kullanacağız.

tblKisiler
tblSiteler

1) INNER JOIN

Inner Join ifadesi iki tablodaki ortak bir veriye göre bu iki tabloyu birleştirip tek bir sonuç almada kullanılır.

Yapısı:

FROM tablo1 INNER JOIN tablo2 ON tablo1.alan1 karsilastirmaOperatoru tablo2.alan2

Bölümler Açıklama
tablo1, tablo2 Verilerin birleştirileceği tabloların adları
alan1, alan2 Birleştirilecek alanların isimleri. Eğer bu alanlar sayı türünde değiller ise aynı veri türünde olmaları gerekir; ancak aynı isimde olmaları zorunlu değildir.
karsilastirmaOperatoru Herhangi bir ilişkisel karşılaştırma operatörü: “=,” “<,” “>,” “<=,” “>=,” veya “<>.”

Inner join’i anlatmaya şöyle devam edelim; mesela ben tblKisiler tablomdaki kişilerin yaptığı sitelerin isimlerini almak istiyorum. Bunu yapabileceğim ortak alanlar ise tblKisiler tablosundaki fldID alanı ve fldSiteler tablosundaki fldUID alanı. Gördüğünüz gibi ikiside farklı bir isme sahip ama bana bu birleştirme işleminde yardımcı olacaklar.

SELECT tblKisiler.fldAD, tblKisiler.fldSoyad,tblSiteler.fldSiteAD from tblKisiler
INNER JOIN tblSiteler ON tblKisiler.fldID = tblSiteler.fldUID

Bu SQL bize kişilerin adını, soyadını ve yaptığı sitenin adını verecektir. Eğer bu yöntemi kullanmamış olsaydık bu verileri ekrana yazdırmak için iki tane sorgu kullanmak zorunda olacaktır.

Inner Join ile tüm alanları karşılaştırıp bağlayabilirsiniz; ancak Memo ve OLE Object alanlarını birleştirmek isterseniz hata alırsınız. Bu alanlarla JOIN işlemi yapmayınız.

Bir sorguda istediğiniz kadar Inner Join kullanabilirsiniz. Böylece sadece iki tabloyu değil; istediğiniz kadar tabloyu aynı anda birbirine bağlayabilirsiniz.

Inner Join, sadece iki tabloda da var olan verileri alır. Yani eğer tblKisiler tablosundaki bir kişinin tblSiteler tablosunda hiç kaydı olmasaydı yukarıdaki sorguda o kişi hiç seçilmeyecekti ve sonuçta çıkmayacaktı.

2) LEFT JOIN, RIGHT JOIN

Inner Join’e oldukça benzese de bu bağlama türünün bir farkı vardır. Inner Join, daha önce de dediğim gibi, sadece iki tabloda da var olan verileri esas alır; eğer bir tabloda karşılık yoksa, o kaydı hiç ekrana getirmez. Ancak LEFT veya RIGHT join ‘de istediğiniz yandaki (Left veya Right) tüm veriler ekrana gelir.Tanımı biraz karışık gibi de olsa, birazdan örneklerle daha iyi anlayacaksınız.

Yapısı:

FROM tablo1 [ LEFT | RIGHT ] JOIN tablo2 ON tablo1.alan1 karsilastirmaOperatoru tablo2.alan2

Bölümler Açıklama
tablo1, tablo2 Verilerin birleştirileceği tabloların adları
alan1, alan2 Birleştirilecek alanların isimleri. Eğer bu alanlar sayı türünde değiller ise aynı veri türünde olmaları gerekir; ancak aynı isimde olmaları zorunlu değildir.
karsilastirmaOperatoru Herhangi bir ilişkisel karşılaştırma operatörü: “=,” “<,” “>,” “<=,” “>=,” veya “<>.”

Eğer bir sorgu da Right JOIN kullanırsanız,( tabloSOL.alan1 = tabloSAG.alan2 ), sağ taraftaki tabloda bulunan (tabloSAG) tüm veriler, soldaki tabloda olup olmadığına bakılmaksınız ekrana yazılacaktır. Karşılığı bulunanlarda gerekli veri ekranda yazacak olmayanlarda ise yazacaktır.

Eğer bir sorgu da Left JOIN kullanırsanız,( tabloSOL.alan1 = tabloSAG.alan2 ), sol taraftaki tabloda bulunan (tabloSOL) tüm veriler, sağdaki tabloda olup olmadığına bakılmaksınız ekrana yazılacaktır. Karşılığı bulunanlarda gerekli veri ekranda yazacak olmayanlarda ise yazacaktır.

Bu küçük fark dışında Inner Join ile benzerlik gösterir. Inner Join’de dikkat etmeniz gereken noktalara burada da dikkat etmelisiniz.

3) UNIOIN

Union komutu, iki ya da daha fazlanın sonuçlarını tek bir sonuç gibi ekrana yazdırır. Bu tablolarda herhangi bir kriter uyumu söz konusu olmayabilir.

UNION pek tercih edilmez ancak yine de nasıl kullandığını görmeniz açısından bir örnek yapalım. Ben aşağıdaki kod ile tblKisiler tablosundan fldAD alanını ve tblSiteler tablosundan, fldSiteAd alanını AD isimli yeni bir alan altında listeleteceğim. Sıra ile tüm kayıtlar aşağı doğru listelenecektir.

SELECT fldAd as AD from tblKisiler
UNION
Select fldSiteAD from tblSiteler

Union komutu ile ilgili bilmeniz gereken en önemli şey, SELECT ile aynı sayıda alan seçilmelidir; aksi takdirde hata mesajı ile karşılaşırsınız.

Bul-Tikla

Son Yazılar

Yerdeniz Büyücüsü – Ursula K. Le Guin

Yerdeniz Büyücüsü – Ursula K. Le Guin 1968 senesinde piyasaya çıkan Yerdeniz Büyücüsü (A Wizard…

24 saat ago

Jön Türkler – Türk Dili ve Edebiyatı

Jön Türkler Osmanlı Modernleşmesinin Mimarları: Jön Türkler ve Düşünce Dünyası Osmanlı Devleti’nin son yüzyılı, bir…

1 gün ago

Bilgenin Sarsılmazlığı Özeti ve Konusu

Bilgenin Sarsılmazlığı – SenecaTür:FelsefeYazar:SenecaYayınlanma Zamanı:2017Yayınevi:Doğu Batı YayınlarıISBN:9789752410794MevzusuKitap, gerçek bilge insanoğlunun hakaretler, haksızlıklar ve fena şans…

3 gün ago

Koca Mehmet Ragıp Paşa – Türk Dili ve Edebiyatı

Koca Mehmet Ragıp Paşa Koca Mehmet Ragıp Paşa (D: 1698, İstanbul – Ö: 8 Nisan…

4 gün ago

Felsefede Determinizm Nedir? – Türk Dili ve Edebiyatı

Determinizm İnsanlık zamanı süresince yönelttiğimiz en köklü sorulardan biri şudur: “Kararlarımızı hakikaten biz mi veriyoruz,…

4 gün ago

Adem ile Havva’nın Güncesi Özeti, Konusu ve Karakterleri

Adem’le Havva’nın Güncesi – Mark TwainTür:RomanYazar:Mark TwainYayınlanma Zamanı:2006Yayınevi:Yapı Kredi YayınlarıISBN:9789750811524KarakterlerHavva: Meraklı, duygusal, güzel duyu duygusu…

5 gün ago