Alt Sorgulamalar (Subqueries)

Eyl 08, 2013
Alt sorgulamalar; karmaşık sorgulamaları, birbirini izleyen adımlardan oluşan bir diziye çevirir ve böylece tek bir ifade ile sorgulama işlemi yapılmış olur. Bir sorgulama işlemi diğer bir sorgulama işleminin sonuçları kullanılarak yapılacaksa (o sorgulama işleminin sonuçları içinden yapılacaksa) alt sorgulamalar kullanılır. Bir sorgulama bünyesinde birden çok sorgulamaya gerek duymuyorsa alt sorgulama kullanmaya gerek yoktur. Genellikle bir alt sorgulamanın yaptığı işi "join" de yapabilir. Aralarındaki fark şudur; "join" kullanıldığında alt sorgulamaya göre daha yüksek performans sağlanır; çünkü alt sorgulama kullanıldığında daha fazla adıma ihtiyaç duyulur ki, bu da performansın biraz daha düşük olmasına neden olur.
Alt sorgulamaları kullanırken bazı noktalara dikkat etmek gerekir: Alt sorgulama, iki parantez içine yazılmalıdır. Tek bir değer döndüren alt sorgulamada "select" ifadesi ile bir alan ismi kullanılabilir. 'Text' ve 'image' veri tipindeki alanlarda alt sorgulama işlemi yapılamaz. Bir sorgulama işleminde istenilen sayıda alt sorgulama kullanılabilir.

Alt Sorgulamaların Uygulanması

Tek Değer Döndüren Alt Sorgulama:

Bu tür alt sorgulamaların sonucunda bir tane değer döndürülür ve bu değer dış sorgulamada bir başka değer ile karşılaştırılarak asıl sorgulama işlemi gerçekleştirilir. "Where" ifadesinde alt sorgulama yapılacaksa karşılaştırma operatörü kullanılmalıdır. Alt sorgulamanın sonucunda birden çok değer döndürülürse SQL Sever sorgulama sonucunda hata verecektir. "Aggregate" fonksiyonlar (MAX,MIN,AVG vb.) kullanılarak yine tek değer döndürmek mümkündür. Bir de her alt sorgulamanın sadece bir kez çalışabildiğini unutmamak gerekir.

Örnek: COMPANY ve CLASS adlı iki tablo olsun :

COMPANY  tablosundan age alanında en büyük değere karşılık gelen satır(lar)dakicompany_name'i seçmek için şu uygulama yapılır:

 

Örnek: CLASS tablosunda en küçük yaşa karşılık gelen satırdaki comment alanı the_smallest diye tanımlanırsa ve değeri istenirse şu uygulama yapılır:

Birden Çok Değer Döndüren Alt Sorgulama

Bir alt sorgulamanın sonucu tek bir değer değil de birden çok değerden oluşan liste şeklindedir. Böyle alt sorgulamalarda  "where" ifadesinde genellikle "in" anahtar kelimesi kullanılır:

Örnek:  Bu örnekte önce alt sorgulama incelenirse; iki tablonun da age alanlarında aynı değerlere sahip ve company_name'i ITU_BIM olmayan  satırlarda  age alanındaki değerler alt sorgulamanın sonucudur. CLASS tablosunun age alanındaki değerlerin alt sorgulamanın sonucunun içinde olmaması için "not in" kullanıldı. Bu koşulları sağlaması şartı ile CLASStablosundan age ve comment alanlarındaki değerler istenirse esas sorgulamanın sonucuna ulaşılmış olunur.