Bu eğitimde, MySQL EXISTS operatörünü nasıl kullanacağınızı ve sorguların performansını artırmak için ne zaman kullanacağınızı öğreneceksiniz.
EXISTS operatörü, TRUE veya FALSE döndüren bir Boolean operatörüdür. EXISTS operatörü genellikle bir “var” durumunu test etmek için alt sorguda kullanılır.
Aşağıdaki, EXISTS operatörünün ortak kullanımını göstermektedir.
1 2 3 4 5 6 7 8 | SELECT sutunlar FROM tablo_adi WHERE [NOT] EXISTS(altsorgu); |
Alt sorgu herhangi bir satır döndürürse, EXISTS operatörü true, aksi halde false döndürür.
Ek olarak, EXISTS operatörü, eşleşen bir satır bulduğunda hemen işlemeyi sonlandırır. Bu özellik nedeniyle, bazı durumlarda sorgunun performansını artırmak için EXISTS operatörünü kullanabilirsiniz.
NOT operatörü, EXISTS operatörünü olumsuzlar. Başka bir deyişle, alt sorgu satır döndürmezse, aksi takdirde false döndürürse NOT EXISTS true değerini döndürür.
SELECT *, SELECT sütunu, SELECT sabit veya alt sorgudaki herhangi bir şeyi kullanabilirsiniz. Sonuçlar aynıdır çünkü MySQL SELECT yan tümcesinde görünen sutunlar’ı yok sayar.
MySQL EXISTS Örnekleri
Örnek: Bir ve üzerinde kitap alan öğrencileri listeleyen sorguyu yazınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SELECT ograd, ogrsoyad FROM ogrenci WHERE EXISTS( SELECT ogrno FROM islem WHERE islem.ogrno=ogrenci.ogrno ) |
Örnek: Hiç kitap almayan öğrencileri listeleyiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SELECT ograd, ogrsoyad FROM ogrenci WHERE NOT EXISTS( SELECT ogrno FROM islem WHERE islem.ogrno=ogrenci.ogrno ) |
EXISTS yan tümcesi SELECT ifadesinde kullanılabileceği gibi INSERT, UPDATE ve DELETE ifadeleri ile de kullanılabilir.
MySQL EXISTS vs. IN Karşılaştırması
Örnek: Bir ve üzerinde kitap alan öğrencileri listeleyen sorguyu IN kullanarak yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SELECT ograd, ogrsoyad FROM ogrenci WHERE ogrno IN( SELECT ogrno FROM islem WHERE islem.ogrno=ogrenci.ogrno ) |
Örnek: Bir ve üzerinde kitap alan öğrencileri listeleyen sorguyu yazınız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SELECT ograd, ogrsoyad FROM ogrenci WHERE EXISTS( SELECT ogrno FROM islem WHERE islem.ogrno=ogrenci.ogrno ) |
EXISTS işlecini kullanan sorgu, IN işlecini kullanandan çok daha hızlı.
Bunun nedeni, EXISTS operatörünün “en azından bulunan” prensibine dayanarak çalışmasıdır. True değerini döndürür ve en az bir eşleşen satır bulunduğunda taramayı durdurur.
Diğer taraftan, IN operatörü bir alt sorgu ile birleştirildiğinde, MySQL önce alt sorguyu işlemeli ve sonra sorgunun tamamını işlemek için alt sorgunun sonucunu kullanır.
Genel kural, alt sorgu yüksek miktarda veri içeriyorsa, EXISTS operatörünün daha iyi performans sağlamasıdır.
Ancak, IN işlecini kullanan sorgu alt sorgudan döndürülen sonuç kümesi çok küçükse daha hızlı çalışır.
Bu eğitimde, MySQL EXISTS operatörünü tartıştık ve sorgunun performansını artırmak için EXISTS operatörünü kullanma konusunda bazı yönergeler sunduk.
1 Yorum