Razlike med operaterji EXISTS in IN v SQL

Avtor: Peter Berry
Datum Ustvarjanja: 12 Avgust 2021
Datum Posodobitve: 21 November 2024
Anonim
30 глупых вопросов Data Engineer [Карьера в IT]
Video.: 30 глупых вопросов Data Engineer [Карьера в IT]

Vsebina

Stalen izziv pri uporabi SQL je določanje pravilne uporabe operatorjev EXISTS in IN. Oba operaterja lahko dosežeta enake rezultate, vendar ne vedno. Poleg tega obstaja precejšnja razprava o tem, kako je vsak operater optimiziran za hitrost. Uporabniki bi morali razumeti različne atribute vsakega operaterja in eksperimentirati z obema, da bi določili ustrezno uporabo.


Upoštevajte cilje SQL, ko izberete EXISTS ali IN (Jupiterimages / Photos.com / Getty Images)

Operator IN

Operator IN vrne vrstico, če vrednost polja tabele izpolnjuje pogoj WHERE v seznamu vrednosti IN. Običajno se uporablja kot del glavne poizvedbe ali v povezavi s podpoizvedbo.

Primer 1: WHERE tabela polja IN ('a', 'b', 'c') Primer 2: WHERE table.field IN (podpoizvedba, ki vrne niz)

OBSTOJEČI operater

Operater EXISTS vrne vse glavne vrstice, če podpoizvedba vsebuje vse vrstice. Uporablja se samo v povezavi s podpoizvedbo. Vrnjene vrstice določa filter v glavni poizvedbi.

Primer: WHERE EXISTS (podpoizvedba, ki vrne niz)

Razlika

Operator IN ne more ovrednotiti vrednosti NULL, zato bodo take vrstice vedno napačne in ne bodo vrnjene, za razliko od operaterja EXISTS, ki ocenjuje in vrne linije z vrednostmi NULL.


Podobnosti

Tako EXISTS kot IN podpirata korelirane in nekorelirane podpoizvedbe in oba lahko ustvarita podobne rezultate. Ko se ujemajo, zadoščajo glavnemu polju za poizvedbo za podporočilno polje (npr .: principal.id = subquery.id). Podpoizvedba oceni vrstico za vrstico za vsak najdeni dogodek. V tem primeru bodo IN in EXISTS vrnili iste vrstice na podlagi podobnih pogojev "id". Kadar nista povezani, oba operaterja obdelujeta svoje podpoizvedbe in nato združita rezultate za glavno poizvedbo.

Uspešnost

Učinkovitost določa optimizator baze podatkov in izvedbeni načrt, ki se uporablja za izvedeno kodo. Za EXISTS in IN lahko optimizator izbere različne poti. V Oracleu NOT EXISTS je običajno hitrejši od NOT IN. Na koncu so potrebni nekateri poskusi in napake za razvrščanje najkrajše poti, odvisno od baze podatkov in različice, ki jo uporabljate. Bodite prepričani, da najprej uporabite operaterja, ki jamči pravilne rezultate, nato pa poskusite zamenjati operaterje, da vidite, katera je najhitrejša.