Bu eğitimde, size karmaşık sorgular yazmak ve MySQL alt sorgusunu nasıl kullanacağınızı ve ilişkili alt sorgu kavramını nasıl açıklayacağınızı göstereceğiz.
MySQL alt sorgusu, SELECT, INSERT, UPDATE veya DELETE gibi başka bir sorgunun içine yerleştirilmiş bir sorgudur. Ayrıca, bir MySQL alt sorgusu başka bir alt sorgunun içine yerleştirilebilir.
Bir MySQL alt sorgusu iç sorgu olarak adlandırılırken, alt sorguyu içeren sorgu dış sorgu olarak adlandırılır. Bir alt sorgu ifadenin kullanıldığı ve parantez içinde kapatılması gereken her yerde kullanılabilir.
Aşağıdaki sorgu ve devamında bulunan sorgular şekildeki tablolar kullanılarak hazırlanmıştır.
Örnek : Aşağıda bulunan sorgu türü ROMAN olan kitapları listelemektedir.
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' ) |
Bu örnekte:
- Alt sorgu, ROMAN türündeki tüm kitapların listesini döndürür.
- Dış sorgu alt sorgu tarafından döndürülen sonuç setinde bulunan turno kodlarında bulunan kitapları seçer.
Sorgu çalıştırıldığında, alt sorgu ilk önce çalışır ve bir sonuç kümesi döndürür. Ardından, bu sonuç kümesi dış sorgunun bir girişi olarak kullanılır.
WHERE yan tümcesinde MySQL alt sorgusu
Alt sorgu tarafından döndürülen tek bir değeri, WHERE yan tümcesinde ifade ile karşılaştırmak için karşılaştırma işleçlerini (örneğin, =,>, <, vb.) kullanabilirsiniz.
Örnek: Kitap numarası 10 olan “Benim Üniversitelerim” isimli kitabın yazarın adını ve soyadını yazdıran alt sorguyu yapınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT * FROM yazar WHERE yazarno in ( SELECT yazarno FROM kitap WHERE kitapno =10 ) |
Eşitlik operatörüne ek olarak, (>) ‘dan daha büyük, (<)’ dan küçük gibi diğer karşılaştırma operatörlerini kullanabilirsiniz.
İlginizi çekebilir: MySQL Dersleri
Örnek: Sayfa sayısı, ortalama sayfa sayısından büyük olan kitapları listeleyen sorguyu yazınız. Alt sorgu ortalama sayfa sayısını bulacak, dış sorgu ise bu ortalamanın üzerindeki kitapları listeleyecek.
1 2 3 4 5 6 7 8 9 10 11 | SELECT * FROM kitap WHERE sayfasayisi > ( SELECT AVG(sayfasayisi) FROM kitap ) |
Alt alta sorgular da yazabiliriz. Aşağıdaki örnekte alt alta 2 tane sorgu yazılmıştır. Örneği inceleyiniz.
Ö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' ) |
IN ve NOT IN operatörleri ile MySQL alt sorgusu
Bir alt sorgu birden fazla değer döndürürse, WHERE yan tümcesinde IN veya NOT IN operatörü gibi diğer operatörleri kullanabilirsiniz.
Örnek: 3 numaralı öğrencinin almadığı kitapları listeleyen sorguyu yapınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | SELECT * FROM kitap WHERE kitapno NOT IN ( SELECT DISTINCT kitapno FROM islem WHERE ogrno=3 ) |
FROM yan tümcesinde MySQL alt sorgusu
FROM yan tümcesinde bir alt sorgu kullandığınızda, bir alt sorgudan döndürülen sonuç kümesi geçici bir tablo olarak kullanılır. Bu tablo türetilmiş bir tablo veya materyalize edilmiş alt sorgu olarak adlandırılır.
Örnek: Aşağıdaki alt sorgu, öğrencilerin okudukları kitap sayılarını göstermektedir. Bu sorguyu liste takma adı ile dış sorguya gönderip, dış sorguda en fazla okunan kitap, en az okunan kitap ve ortalama okunan kitap adetleri gösterilmektedir.
1 2 3 4 5 6 7 8 9 10 11 | SELECT MAX(adet),MIN(adet),AVG(adet) FROM (SELECT ogrno, COUNT(islemno) as adet FROM islem GROUP BY ogrno) as liste |
Bu eğitimde, daha karmaşık sorgular oluşturmak için MySQL alt sorgusunu ve ilişkili alt sorguyu nasıl kullanacağınızı gösterdik.
1 Yorum