ISTNIEJE
EXISTS dosłownie służy do sprawdzania istnienia określonych kryteriów. W obecnym standardowym SQL pozwoli ci określić więcej niż jedno kryterium porównania - IE, jeśli chcesz wiedzieć, kiedy oba col_a i col_b pasują - co czyni je nieco silniejszymi niż klauzula IN. MySQL IN obsługuje krotki, ale składnia nie jest przenośna, więc EXISTS jest lepszym wyborem zarówno ze względu na czytelność, jak i przenośność.
Inną rzeczą, o której należy pamiętać w przypadku funkcji EXISTS, jest to, jak to działa — EXISTS zwraca wartość logiczną i zwraca wartość logiczną przy pierwszym dopasowaniu. Więc jeśli masz do czynienia z duplikatami/wielokrotnościami, EXISTS będzie szybsze do wykonania niż IN lub JOIN, w zależności od danych i potrzeb.
W
IN jest cukrem składniowym dla klauzul OR. Chociaż jest to bardzo przychylne, istnieją problemy z obsługą wielu wartości dla tego porównania (na północ od 1000).
NIE
Operator NOT po prostu odwraca logikę.
Podzapytania a JOIN
Mantra „zawsze używaj złączeń” jest błędna, ponieważ JOIN ryzykuje zawyżenie zestawu wyników, jeśli istnieje więcej niż jeden rekord podrzędny przeciwko rodzicowi. Tak, możesz użyć DISTINCT lub GROUP BY, aby sobie z tym poradzić, ale jest bardzo prawdopodobne, że zapewnia to korzyści płynące z użycia opcji JOIN. Poznaj swoje dane i informacje o tym, czego oczekujesz od zestawu wyników — to jest klucz do pisania SQL, które działa dobrze.
Aby powtórzyć, że wiesz, kiedy i dlaczego wiedzieć, czego użyć — LEFT JOIN IS NULL to najszybsza lista wykluczeń w MySQL jeśli porównywane kolumny NIE dopuszczają wartości null , w przeciwnym razie opcja NOT IN/NOT EXISTS jest lepszym wyborem.
Odniesienie:
- MySQL:LEWE JOIN/JEST NULL, NIE W, NIE ISTNIEJE w kolumnach dopuszczających wartość null
- MySQL:LEFT JOIN/JEST NULL, NOT IN, NIE ISTNIEJE w kolumnach, które nie mogą zawierać wartości null