SQL'de Birden Fazla Tablodan Listeleme Yapmak

Excel DüşeyAra (VLookUp) fonksiyonlarında olduğu gibi, veritabanı tabloları arasında ilişki kurup liste veya rapor oluşturmak istiyorum. 

Ogrenciler isimli bir ana tablom ve Kisiler isimli bir yardımcı tablom olsun. İki tablo arasında ortak kolonum KisiID kolonudur. Bu ortak kolon aracılığıyla Kisiler tablosundan KisiAdi ve KisiSoyadi bilgilerini getirteceğim. Ana tablom olan Ogrenciler tablosundan da OgrenciNo bilgisini görmek istiyorum. Önce Select cümlemizi görelim: 

Select 
OgrenciNo, KisiAdi, KisiSoyadi 
from Ogrenciler o 
left join Kisiler k on k.KisiID = o.KisiID 

Yukarıda yazdıklarımızın ne olduklarını anlayalım: 
Select cümlesinde bu amaçla tablo olarak önce ana tablomu yazıyorum. 
Yazış sırama göre ana tablo solda kaldığı için bağlanırken "soldakini esas al" anlamında Left Join yapıyorum. 
Left Join terimlerini yazdıktan sonra hangi tabloya bağlanacaksam o tablonun adını belirtiyorum. 
Tablo adından sonra hangi kolonlar üzerinden bağlantı kuracağımı belirtiyorum. 
Kolon adları iki tabloda da  aynı isimli ise, bu kolonların isimlerinin önünde tabloların takma adlarını kullanıyorum. Takma ad, Ogrenciler tablosu için o, Kisiler tablosu için k harfleridir. 
Takma ad ile kolon adı arasına nokta işareti koyuyorum. 

Excel DüşeyAra fonksiyonunda bilgi getirilecek her kolonda tek tek DüşeyAra yapılıyor. SQL'de ise bir kere bağlantı yapıldıktan sonra bağlantı yapılan tablolardan istenen kolon adlarının yazılması yeterli olmaktadır. 

Yukarıdaki listeleme işleminin sonucu aşağıdadır: 










İkinci örnek olarak, bir Sınavlar isimli ana tablomuz ve Dersler isimli yardımcı tablomuz olsun. Bu iki tablo arasında ortak kolon DersID kolonudur. Dersler tablosundan DersAdi bilgisini, ana tablo olan Sinavlar tablosundan ise SinavTarihi, SinavTipiKodu ve SinavSiraNo bilgilerini göstermemiz yeterlidir. 

Bu tablolar arasında yazılacak Select cümlesini, yukarıdaki örnekte olduğu gibi yazalım: 
Önce ana tablo olan Sinavlar tablosunu from teriminden sonra yazıyorum. 
Bu tabloya bir takma ad olarak s harfini kullanacağım. 
Yardımcı tablo olan Dersler tablosunu Left Join teriminden sonra yazıp bu tabloya da d harfini takma adı olarak tanımlayacağım. Takma adları anımsatıcı olacak şekilde belirliyorum. 

Select 
DersAdi, SinavTarihi, SinavTipiKodu, SinavSiraNo 
from Sinavlar s 
left join Dersler d on d.DersID = s.DersID 

Sorgu sonucu: 









Sinavlar ve Ogrenciler tablolarımız mevcut. 
Bu tablolarımızı birer yardımcı tablo olan SinavNotlari isimli bir de ana tablomuz olsa. 
Bu tabloda da bir öğrencinin bir sınavdan kaç not aldığı yazsa. 
Bu ana tablodan yardımcı tablolara bağlanırız, Öğrenci ve Sınav bilgilerini elde ederiz. 
Bu yardımcı tabloların yardımcı tabloları olan tablolara yukarıda bağlandığımız gibi bağlanıp, bu ikinci dereceden yardımcı tablolardan da Kişi ve Ders bilgilerini elde ederiz. 
Sonuç olarak Öğrenci, Kişi, Sınav, Ders bilgileri ile birlikte Ders Notunu listeleyebiliriz. 
SinavNotlari ana tablosuna da sn takma adı verelim. 
Tablolar arasındaki ilişki şeması aşağıdaki gibidir. Şemada tablolar arası bağlantı kolonları tablo isimleri arasına yazılmıştır. Tabloların takma adları da, tablo adlarının yanına yazılmıştır. Left Join yönleri de şemada okla gösterilmiştir. 




Bu şekilde yazılacak Select cümlesi ve sonucu aşağıdadır: 

Select 
DersAdi, SinavTarihi, SinavTipiKodu, SinavSiraNo, OgrenciNo, KisiAdi, KisiSoyadi, SinavNotu
from SinavNotlari sn 
left join Sinavlar s on s.SinavID = sn.SinavID
left join Dersler d on d.DersID = s.DersID 
left join Ogrenciler o on o.OgrenciID = sn.OgrenciID
left join Kisiler k on k.KisiID = o.KisiID











Bu blogdaki popüler yayınlar

Power BI'da Yeni Sütun Eklemek

Power BI Kullanımına Giriş

Power BI Üzerinde Fonksiyon Oluşturma ve Kullanma

Kümülatif Toplam

Ağırlıklı Ortalama Hesabı

SQL'de Group By Yaparak Rapor Oluşturmak

ETarihli Fonksiyonu

Bir Ürünün En Son Tarihli Fiyatının Bulunması