СЪЩЕСТВУВА
EXISTS буквално е за проверка за съществуването на определени критерии. В текущия стандартен SQL той ще ви позволи да посочите повече от един критерий за сравнение - Т.Е. ако искате да знаете кога col_a и col_b съвпадат - което го прави малко по-силен от клаузата IN. MySQL IN поддържа кортежи, но синтаксисът не е преносим, така че EXISTS е по-добър избор както за четимост, така и за преносимост.
Другото нещо, което трябва да знаете с EXISTS, е как работи - EXISTS връща булево значение и ще върне булево значение при първото съвпадение. Така че, ако имате работа с дубликати/множества, EXISTS ще бъдат по-бързи за изпълнение от IN или JOIN в зависимост от данните и нуждите.
В
IN е синтактична захар за клаузи ИЛИ. Въпреки че е много удобно, има проблеми с работата с много стойности за това сравнение (на север от 1000).
НЕ
Операторът NOT просто обръща логиката.
Подзаявки срещу JOIN
Мантрата „винаги използвайте обединения“ е погрешна, тъй като JOIN рискува да раздуе набора от резултати, ако има повече от един дъщерен запис срещу родител. Да, можете да използвате DISTINCT или GROUP BY, за да се справите с това, но е много вероятно това да доведе до ползата от използването на JOIN. Познавайте данните си и какво искате за набор от резултати – те са ключови за писане на SQL, който се представя добре.
За да повторим да знаем кога и защо да знаем какво да използваме - LEFT JOIN IS NULL е най-бързият списък за изключване в MySQL ако сравнените колони НЕ могат да бъдат null , в противен случай NOT IN/NOT EXISTS са по-добър избор.
Справка:
- MySQL:LEFT JOIN/IS NULL, NOT IN, NOT EXISTS на nullable колони
- MySQL:LEFT JOIN/IS NULL, NOT IN, NOT EXISTS на НЕ подлежащи на null колони