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.