Разлики между операторите EXISTS и IN в SQL

Автор: Peter Berry
Дата На Създаване: 12 Август 2021
Дата На Актуализиране: 11 Може 2024
Anonim
30 глупых вопросов Agile-коучу [Карьера в IT]
Видео: 30 глупых вопросов Agile-коучу [Карьера в IT]

Съдържание

Постоянно предизвикателство при използването на 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. В крайна сметка са необходими някои опити и грешки за сортиране на най-краткия път, в зависимост от използваната база данни и версия. Уверете се, че първо използвате оператора, който гарантира правилните резултати, след което опитайте да замените операторите, за да видите кой е най-бързият.