Съдържание
Постоянно предизвикателство при използването на SQL е определянето на правилното използване на операторите EXISTS и IN. Двата оператора могат да дадат същите резултати, но не винаги. Освен това има сериозни дебати за това как всеки оператор е оптимизиран за скорост. Потребителите трябва да разбират различните атрибути на всеки оператор и да експериментират с двете, за да определят подходящата употреба.
Обмислете вашите SQL цели, когато избирате EXISTS или IN (Jupiterimages / Photos.com / Getty Images)
IN оператор
Операторът IN връща ред, ако стойността на поле на таблица удовлетворява условието WHERE в списъка на стойностите на IN. Обикновено се използва като част от основна заявка или във връзка с подзапитване.
Пример 1: WHERE table.field IN ('a', 'b', 'c') Пример 2: WHERE table.field IN (подзаявка, която връща набор)
Съществува оператор
Операторът EXISTS връща всички основни редове, ако подзаявка съдържа редове. Използва се само във връзка с подзапитване. Върнатите редове се определят от филтъра в основната заявка.
Пример: WHERE EXISTS (подзаявка, която връща набор)
разлика
Операторът IN не може да оцени NULL стойности, така че тези линии винаги ще бъдат false, и няма да бъдат връщани, за разлика от оператора EXISTS, който оценява и връща линии с NULL стойности.
прилики
Както EXISTS, така и IN поддържат корелирани и некоррелирани подзаявки и и двете могат да дадат подобни резултати. Когато са корелирани, те отговарят на основното поле на заявка за поле на подзапитване (напр .: principal.id = subquery.id). Подзаявката оценява ред по ред за всеки намерен случай. В този случай IN и EXISTS ще върнат същите линии въз основа на подобни "id" условия. Когато не са свързани, двата оператора обработват своите подзаявки и след това комбинират резултатите за основната заявка.
производителност
Производителността се определя от оптимизатора на базата данни и плана за изпълнение, използван за изпълнения код. За EXISTS и IN оптимизаторът може да избере различни пътища. В Oracle NOT EXISTS обикновено е по-бърз от NOT IN. В крайна сметка са необходими някои опити и грешки за сортиране на най-краткия път, в зависимост от използваната база данни и версия. Уверете се, че първо използвате оператора, който гарантира правилните резултати, след което опитайте да замените операторите, за да видите кой е най-бързият.