Sorgu içinde sorgu kümesidir.İç sorgunun dış sorguya değer döndürmesi şeklinde çalışan bütün yapıdır.Şimdi bunu örnekler ile açıklayalım.
//Aşağıdaki sorguda Sicil tablosunda bulunan kişilerin adını,soyadını ve bulunduğu ilçe adını(İlçe tablosundaki ilceid ile Sicil tablosundaki karşılığı olan (PK) ev_ilce_kodu eşitliğinde dönen ilçe adı) sorgular.
Select adi, soyadi, (select ilce_adi from ilce where ilceid=ev_ilce_kodu) ilce from Sicil
// Aşağıdaki sorguda Kişi tablosunda bulunan Efe soyadlı kişinin ücretinden büyük ücrete sahip kişileri listeleyen sorgudur.Bu tür ana sorguda (=, >, >=, <, <=, <>) gibi oparatörler kullanılıyorsa subquery den dönen sonuç tek olmalıdır.
SELECT adi, ücret
FROM Kişi
WHERE ücret > (SELECT ücret FROM Kişi WHERE Soyadı= 'Efe');
Eğer Subquery de birden fazla sonuç döner ise burada IN, ALL ve ANY operatörlerini kullanıcağız.
// departmans tablosunda departman adı Sales olan kayıtların id lerini bul ve employees tablosuna giderek bu id lere eşit employeesleri getir.
IN Kullanımı
Büyüktür küçüktür gibi operatörler ile kullanılmaz. Alt sorguda dönen sonuçlara eşit olanları getirecektir.
SELECT * FROM employees WHERE department_id IN
(SELECT department_id FROM departments WHERE department_name='Sales');
ALL Kullanımı
Karşılığı MIN (salary)’dir.
//adı john olanları bulup salarylerine bak.En düşük maaşı bul ve bu koşula uyan employeesleri getir.
SELECT * FROM employees WHERE salary > ALL
(SELECT salary FROM employees WHERE first_name='John' ) ;
ANY Kullanımı
ANY’nin karşılığı MAX (salary)’dir.
//adı john olanları bulup salarylerine bak.En yüksek maaşı bul ve bu koşula uyan employeesleri getir.
SELECT * FROM employees WHERE salary > ANY
(SELECT salary FROM employees WHERE first_name='John' ) ;