Alt Sorgular
Çoğunlukla bir sorgulamayı bir tablo ile yapmak mümkün olmaz. Bazen select sorgusundaki şart, başka bir tablodaki verilere göre sınırlandırılmak istenirse aşağıdakine benzer bir sorgu yapısı kullanılması gerekir.
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT * FROM kitap WHERE turno in ( SELECT turno FROM tur WHERE turad='ROMAN' ) |
Burada önce içteki sorgu çalışıp turnolar ROMAN türünün numarası alınır.(Bu örnekte bir tane fakat birden fazlada eşleşen tür olabilir.)
Önemli not: Alt sorgularda eşleşen alan sayısı(alan içindeki değerler birden fazla olabilir.) tek olmalıdır. Birden fazla alanda eşleşme yapılacaksa her şart için ayrı alt sorgular yapılıp AND, OR operatörleri ile birleştirme yapılabilir.
Örnek: Fıkra ve hikaye türündeki kitapların adını ve türünü listeleyin.
1 2 3 4 5 | select kitap.kitapadi, tur.turadi from kitap,tur where kitap.turno=tur.turno and tur.turadi in ('Hikaye','Fıkra') |
Örnek: ROMAN türünde ve ortalama sayfa sayısından büyük olan kitapları listeleyen sorguyu yazınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | SELECT * FROM kitap WHERE sayfasayisi > ( SELECT AVG(sayfasayisi) FROM kitap WHERE turno =( SELECT turno FROM tur WHERE turad='ROMAN' ) ) AND turno=( SELECT turno FROM tur WHERE turad='ROMAN' ) |
İçteki döngünün çok sayıda değer döndüreceği zamanlarda In, Any ve All komutları sıkça kullanılmaktadır.
SQL IN Komutu
In komutu belirtilen değerlerden herhangi birine eşit olan kayıtları listelemeyi sağlar.
Örnek: Fıkra ve hikaye türündeki kitapların adını ve türünü listeleyin.
1 2 3 4 5 | select kitap.kitapadi, tur.turadi from kitap,tur where kitap.turno=tur.turno and tur.turadi in ('Hikaye','Fıkra') |
SQL ANY ve ALL Komutları
ANY ve ALL operatörleri WHERE veya HAVING yan tümcesiyle kullanılır.
SQL ANY Komutu
Alt sorgu değerlerinden herhangi biri koşulu karşılıyorsa, ANY işleç true değerini döndürür.
SQL ALL Komutu
Tüm alt sorgu değerleri koşulu karşılıyorsa ALL işleci true değerini döndürür.
Örnek: Tür numarası 3 olan kitaplardan en büyük sayfasayından büyük olan kitapları listeler.
1 2 3 4 5 6 | select * from kitap where sayfasayisi > ALL (select sayfasayisi FROM kitap where turno=3) |
Alternatif sorgu: MAX fonksiyonu ile daha temiz bir sorgu elde edebiliriz.
1 2 3 4 5 6 | select * from kitap where sayfasayisi > (select max(sayfasayisi) FROM kitap where turno=3) |
Örnek: Tür numarası 3 olan en düşük sayfa sayısı olan kitabın sayfa sayısından büyük olan kitapları listeler.
1 2 3 4 5 6 | select * from kitap where sayfasayisi > ANY (select sayfasayisi FROM kitap where turno=3) |
1 2 3 4 5 6 | select * from kitap where sayfasayisi > (select min(sayfasayisi) FROM kitap where turno=3) |
Yorum Yap