Giriş
EXIST (subquery) şeklinde kullanılır.
EXIST yerine COUNT(*) kullanılması çok verimsiz.
Örnek
SELECT COUNT(*) FROM actor a
JOIN 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ı
SELECT id, first_name, last_name
FROM student
WHERE EXISTS (
SELECT 1
FROM student_grade
WHERE
student_grade.student_id = student.id AND
student_grade.grade = 10 AND
student_grade.class_name = 'Math'
)
ORDER BY id
SELECT id, first_name, last_name
FROM student
WHERE NOT EXSITS (
SELECT 1
FROM student_grade
WHERE
student_grade.student_id = student.id AND
student_grade.grade < 9
)
ORDER BY id
Ö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. 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_name
FROM student
WHERE NOT EXSITS (
SELECT 1
FROM student_grade
WHERE
student_grade.student_id = student.id AND
student_grade.grade < 9
)
ORDER BY id