SQL'de Alt Sorgu

Bir sorgunun içinden başka bir sorgu kullandığımızda bu içteki sorguya alt sorgu anlamında Subquery adı verilmektedir. Bir Subquery örneği görelim:

Select

OgrenciNo,

(select KisiAdi + ' ' + KisiSoyadi from Kisiler k where k.KisiID = o.KisiID) as “Adı Soyadı”

from Ogrenciler o

Bu iç içe sorguda, alt sorgu Kisiler tablosuna bağlanıyor. Ogrenciler tablosundaki KisiID değerine karşılık olan Kisiler tablosundaki KisiID değeriyle Kisiler tablosundan KisiAdi ve KisiSoyadi bilgilerini okumaktadır.

Alt sorguda okuduğu KisiAdi ve KisiSoyadi bilgilerini aralarına boşluk karakteri ekleyerek yan yana getirmektedir. 

Bu alt sorgu yerine aslında left join kullanılır, fakat Alt Sorgu örneği olsun diye bu şekilde kullandık. Bu sorgu, Kişi Adı ve Soyadını Kişiler tablosundan bir alt sorguyla okumaktadır.

Left Join cümleciğinde kullandığımız ‘on’ yerine burada ‘where’ kullanıyoruz, çünkü normal bir Select işlemi yapıyoruz. Bu Select cümlesinin ‘where’ koşul cümleciğiyle istediğimiz kaydı bulduruyoruz.

Bulduğumuz sonucunun bir kolon adı olmadığından, takma ad olarak örneğin “Adı Soyadı” ismini kullanıyoruz.

Alt sorgudaki koşul cümleciğinde eşittir işaretinin sol tarafında Kisiler tablosuna ait KisiID kolonu ve sağ tarafında ise Ogrenciler tablosuna ait KisiID kolonu bulunmaktadır. Aynı anda bağlanılmış olan iki tabloda da aynı isimli kolon olduğundan, programa bu kolonlardan soldakinin hangi tabloya ve sağdakinin hangi tabloya ait olduğunu söylemek amacıyla kolon adlarının önüne belirteç olarak tabloların takma adlarını yazdık. Sorguda görüldüğü gibi Ogrenciler tablosu için ‘o’ ve Kisiler tablosu için ‘k’ takma adlarını tanımladık.

Alt sorgu yerine Left Join kullanmak çok daha iyidir. Hem hız kazandırır. Hem de bir bağlantıyla birden fazla kolondan bilgi getirilebilir. Alt sorguda ise, her kolon için tek tek sorgu yazmak gerekecektir ya da okunan birden fazla kolon hepsini yan yana metin birleştirmesiyle tek kolon olarak gösterilebilecektir. Dolayısıyla bu amaçla Left Join kullanmanızı tavsiye ederim.

Alt sorgunun bir başka kullanımı, bir koşul cümleciğinde eşittir işaretinin sağ tarafına bir değer getirtmek içindir. Aşağıdaki örneğimizi inceleyelim:

select

OgrenciNo

from Ogrenciler o

 where KisiID = (select KisiID from Kisiler where KisiAdi='Ahmet' and KisiSoyadi = 'Yılmaz')

 

Bu örnekte Kisiler tablosuna bir Left Join kullanarak bağlanılmamıştır. Dolayısıyla istediğimiz kişinin ID numarasını bir alt sorguyla elde edilip, bu kişinin Ogrenciler tablosundaki istenen kaydı okunabilmiştir.

Bu konuda bir başka örnek görelim:

Select AdiSoyadi, Maasi

from Maaslar

where Maasi = (Select Max(Maasi) from Maaslar)

Buradaki Select cümlesi, Maaslar tablosundaki en yüksek maaşlı kişilerin isimlerini ve maaşı listelemektedir. En yüksek maaş değeri, alt sorguyla bulunmakta ve koşul cümleciğindeki eşittir işaretinin sağ tarafına getirtilmektedir. Listeleme yapan Select cümlesi de Maasi bu değere eşit olanları listelemektedir.


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

SQL'de Birden Fazla Tablodan Listeleme Yapmak

ETarihli Fonksiyonu

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