Różnice między operatorami EXISTS i IN w SQL

Autor: Peter Berry
Data Utworzenia: 12 Sierpień 2021
Data Aktualizacji: 1 Lipiec 2024
Anonim
Różnice między operatorami EXISTS i IN w SQL - Artykuły
Różnice między operatorami EXISTS i IN w SQL - Artykuły

Zawartość

Stałym wyzwaniem w korzystaniu z SQL jest określenie właściwego użycia operatorów EXISTS i IN. Obaj operatorzy mogą uzyskać takie same wyniki, ale nie zawsze. Ponadto toczy się poważna debata na temat optymalizacji prędkości każdego operatora. Użytkownicy powinni rozumieć różne atrybuty każdego operatora i eksperymentować z dwoma, aby określić odpowiednie użycie.


Rozważ swoje cele SQL, wybierając EXISTS lub IN (Jupiterimages / Photos.com / Getty Images)

Operator IN

Operator IN zwraca wiersz, jeśli wartość pola tabeli spełnia warunek WHERE na liście wartości IN. Zazwyczaj jest używany jako część głównego zapytania lub w połączeniu z podzapytaniem.

Przykład 1: WHERE table.field IN ('a', 'b', 'c') Przykład 2: WHERE table.field IN (Podzapytanie, które zwraca zestaw)

Operator EXISTS

Operator EXISTS zwraca wszystkie główne wiersze, jeśli podzapytanie zawiera jakiekolwiek wiersze. Jest używany tylko w połączeniu z podzapytaniem. Zwrócone wiersze są określane przez filtr w głównym zapytaniu.

Przykład: WHERE EXISTS (podzapytanie, które zwraca zestaw)

Różnica

Operator IN nie może oceniać wartości NULL, więc takie linie zawsze będą fałszywe i nie będą zwracane, w przeciwieństwie do operatora EXISTS, który ocenia i zwraca linie z wartościami NULL.


Podobieństwa

Zarówno EXISTS, jak i IN obsługują skorelowane i nieskorelowane podzapytania i oba mogą dawać podobne wyniki. Gdy są skorelowane, spełniają główne pole zapytania dla pola podzapytania (np .: principal.id = subquery.id). Podzapytanie ocenia wiersz po wierszu dla każdego znalezionego zdarzenia. W tym przypadku IN i EXISTS zwrócą te same linie na podstawie podobnych warunków „id”. Gdy nie są skorelowane, dwa operatory przetwarzają podzapytania, a następnie łączą wyniki dla głównego zapytania.

Wydajność

Wydajność jest określana przez optymalizator bazy danych i plan wykonania używany dla wykonanego kodu. Dla EXISTS i IN optymalizator może wybierać różne ścieżki. W Oracle NOT EXISTS jest zazwyczaj szybszy niż NOT IN. W końcu niektóre próby i błędy są wymagane do sortowania najkrótszej ścieżki, w zależności od używanej bazy danych i wersji. Upewnij się, że używasz operatora, który najpierw gwarantuje poprawne wyniki, a następnie spróbuj zastąpić operatorów, aby zobaczyć, który jest najszybszy.