Giriş
EXIST (subquery) şeklinde kullanılır.
EXIST yerine COUNT(*) kullanılması çok verimsiz.
Örnek
Şu kod yanlış
SELECT COUNT(*) FROM actor aJOIN film_actor fa USING (actor_id) WHERE a.last_name = 'WAHLBERG'
Doğrusu şöyle
SELECT EXISTS ( SELECT * FROM actor a JOIN film_actor fa USING (actor_id) WHERE a.last_name = 'WAHLBERG' )
Örnek
Şöyle yaparız. Burada student tablosu üzerinde yürünüyor. Her öğrencinin başka derslere ait bir sürü notu daha student_grade tablosunda var. EXIST kullandığımız için bir öğrencinin tüm notlarını dolaşırken eğer ders ismi Math ve notu 10 ise EXISTS hemen TRUE döner ve öğrenci için çalışan döngüden çıkarız. Dolayısıyla daha hızlı
ÖrnekSELECT id, first_name, last_nameFROM studentWHERE EXISTS (SELECT 1FROM student_gradeWHEREstudent_grade.student_id = student.id ANDstudent_grade.grade = 10 ANDstudent_grade.class_name = 'Math')ORDER BY idSELECT id, first_name, last_nameFROM studentWHERE NOT EXSITS (SELECT 1FROM student_gradeWHEREstudent_grade.student_id = student.id ANDstudent_grade.grade < 9)ORDER BY id
Şöyle yaparız. Burada student tablosu üzerinde yürünüyor. Her öğrencinin başka derslere ait bir sürü notu daha student_grade tablosunda var. NOT EXIST kullandığımız için bir öğrencinin tüm notlarını dolaşırken eğer ders ismi Math ve notu 9'dan az ise NOT EXISTS hemen FALSE döner ve öğrenci için çalışan döngüden çıkarız. Dolayısıyla daha hızlı
SELECT id, first_name, last_nameFROM studentWHERE NOT EXSITS (SELECT 1FROM student_gradeWHEREstudent_grade.student_id = student.id ANDstudent_grade.grade < 9)ORDER BY id
Hiç yorum yok:
Yorum Gönder