9 Eylül 2022 Cuma

SQL EXISTS ve NOT EXISTS

Giriş
EXIST (subquery) şeklinde kullanılır.
EXIST yerine COUNT(*) kullanılması çok verimsiz.

Örnek
Şu kod yanlış
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

Hiç yorum yok:

Yorum Gönder