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:
OgrenciNo,
(select KisiAdi + ' ' + KisiSoyadi from Kisiler k where k.KisiID = o.KisiID) as “Adı Soyadı”
from Ogrenciler o
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:
OgrenciNo
from Ogrenciler o
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:
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.

Yorumlar
Yorum Gönder