Serkan Ayyıldız

Meraklı bir yazılım uzmanı...

SQL Inner Join Sorgusu

Uzun bir aradan sonra SQL meraklılarına yeniden selamlar :)

Veritabanı derslerimizin en başından beri normalizasyon konusunu öğrenmeye çalışıyor ve bu konuya göre profesyonel bir veritabanı tasarımı ile BakkalDB veritabanımızı geliştirmiştik.

Hatırlarsanız örnek veritabanımızdaki tabloları foreign key anahtarlama sistemi ile aralarındaki ilişkiye göre bağlamıştık:

bakkaldb

Tablolar arası ilişkileri gerçekleştirdikten sonra veri girişi için SQL insert sorgusunu öğrenmiş ve bağlı tablolara veri girişlerini gerçekleştirmiştik.Bu sayede bir diğer tablodaki veriyi diğer tabloya referans olarak vermiştik.Örneğin, müşteriler tablosundaki MusteriID kolonumuzu Sepetler tablosundaki MusteriID ile bağdaştırarak bir alışveriş sepetinin yalnızca bir müşteriye ait olabileceğini veritabanında kurgulamıştık.

Bağlı tablolar arasında veri girişini öğrendiğimize göre şimdide bağlı tablolardaki verileri listelemeyi öğreneceğiz.Bu işlem için SQL Select sorgusunu kullanacağız ve ayriyeten Join (birleştir) deyimini öğreneceğiz.
SQL Join yapısıın syntaxı ise:

Select * from Tablo1
JOIN_TİPİ join Tablo2 on Tablo1.Ortak_Kolon=Tablo2.Ortak_Kolon

ya da 

Select Tablo1_HerhangiKolon,Tablo1_HerhangiKolon2,Tablo2_HerhangiKolon... from Tablo1
JOIN_TİPİ join Tablo2 on Tablo1.Ortak_Kolon=Tablo2.Ortak_Kolon

şeklindedir.Bağlı tablolardaki tüm kolonları listelemek yerine yıldız karakteri yerine bağladığımız tabloların adını yazdıktan sonra nokta işaretinden sonra istediğimiz kolonların listelemesini sağlayabiliriz.

SQL Join kavramı ile yukarıdaki bahsettiğim bağlı tablolar arasındaki verileri birbirleriyle birleştirerek tek bir görüntüde listelememizi sağlar.Verilerden bir ya da birkaçının boş (null) kolona sahip olabileceği için 7 farklı join tipi mevcuttur:

SQL-Join

Yukarıdaki görselde 7 farklı join tipi gösterilmiş ve her küme bir SQL tablosunu temsil etmektedir ancak join ile ilgili gördüğünüz gibi yalnızca iki tabloyu değil,sonsuz sayıdaki birbirlerine bağlı tablolardaki verileri ilişkilendirebilme şansına sahibiz.
Görselde yer alan her join tipini bu makale dizimizde ayrı ayrı öğreneceğiz,tabi bugünkü konumuz SQL Inner Join olacak.

Inner join (içine bağla) her iki tabloda ortak yer alan bilginin boş (null) geçilmediği durumlarda çalışmakta ve verileri birbirleriyle eşleştirmektedir.
Buraya kadar henüz örnek vermediğimiz için bahsettiklerimden herhangi birşey anlamamış olabilirsiniz,önemli değil nasıl olsa birazdan yapacağımız örneklerle kafanızda hayal meyal birşeyler canlanacaktır :)

Şimdi SQL Server Management Studio uygulamamızı açarak örnek veritabanımız olan BakkalDB veritabanımıza bağlanıyoruz ve veritabanımızdaki tabloların ilişkilerini bir kez daha görelim:

bakkaldb

Örnek olarak Kategoriler ve Alt Kategoriler tablosunu ele alalım:

SQL-Kategori-Alt-Kategori

Her iki tablo arasındaki ilişkiye bakarsak ortak kolonlar olarak KategoriID kolonu olduğunu görebiliyoruz,o halde inner join sorgumuzda ortak kolonumuzu KategoriID olarak belirtiyoruz:

SQL-Inner-Join

Karşımızda ise hem Kategoriler hem de Alt Kategoriler tablolarına ait kolonları ve içerisindeki verileri listeli halde görüyoruz,burada dikkat etmemiz gereken her satır her iki tablodaki kolonların ortak bağlantı noktasına göre getirilmiştir.
Anlaşılması kolay olsun diye şöyle diyebiliriz:

Alt kategori adı "Bisküvi" olan veri, aslında Kategoriler tablosunun "Hazır Gıda" kategorisinin alt kategorisidir...

Bu demek oluyor ki "Bisküvi" alt kategorisi "Sebze" Kategorisinin ya da farklı bir kategorinin alt kategorisi değildir.
Şimdi ise yıldız karakterini kaldıralım ve her kategorinin alt kategori listesini getirelim:

SQL-Inner-Join-Sorgusu

SQL join sorgularında genellikle yıldız karakteri ile verilerin çağrılması pek kullanılmaz çünkü birden çok tablonun her kolonuna ait verileri yığın bir şekilde kullanmak hem performans olarak etkiliyor hem de verilerin çok fazla olması anlaşılması zor bir veri analizine sebep olmaktadır.O yüzden az ve öz verileri listelemekte fayda var.

Join sorgumuzu ilerletelim ve şimdi de ürünler tablomuzu sorgumuza dahil edelim:

SQL-Join-Sorgusu

Dikkat ederseniz Ürünler tablosunu sorgumuza dahil edebilmek için AltKategoriID kolonunu kullandık,bunun sebebi Ürünler tablosunun şu an ki join sorgumuzda kullandığımız AltKategoriler tablosuyla bir bağlantısı vardı,hatta veritabanı tablo yapımıza tekrar bakarsanız aradaki bağlantıyı görebilirsiniz.

Örnekleri devam ettirmek istersek diğer tabloları da tıpkı bu şekilde aralarındaki ilişkiye göre birbirine bağlayabilir ve istediğimiz bağlı verileri listelemeye devam edebiliriz ancak bunun yerine where deyimini kullanarak daha önce öğrendiğimiz SQL koşul ifadesini join sorgusunda nasıl kullanabiliriz görelim istiyorum.

Inner join sorgumuzun son haline göre kategori adı "Hazır Gıda" olan kayıtları listeleyelim:

Inner-Join-Where

Where koşulu olarak kategorinin adı yerine o kategorinin ID değerini kullanarak filtreleme yapabilirdik ancak bu kez ID değerlerine göre değil isim değerlerine göre sorgulama yapalım istedim.
Şimdi ise yine daha önce öğrendiğimiz order by sorgusu ile listemizi ürün adına göre listeyelim:

Inner-Join-Order-By

Elbette SQL sorgularında sınırlamamız yer almıyor ve doğru yazdığımız her durumda verileri çok rahatlıkla listeleme şansına sahibiz.Eğer join sorgusu dışında where ve order by sorgularında kafanız karıştıysa ya bu ilgili iki konudaki makalemi okumadınız ya da tekrar okumanız gerekiyor demektir :)

SQL Inner join konusuyla ilgili olarak anlatacaklarım henüz bu kadarla sınırlandırıyorum,ilerleyen makalelerimizde diğer join tiplerini öğreneceğiz ve bu konulara tekrar tekrar değinmeye devam edeceğiz.

Makalemize son noktayı koyuyor ve bir sonraki makalemizde görüşmek üzere hoşçakalın diyorum :)



Bir yorum bırak E-posta adresiniz yayınlanmayacaktır.

Menu