Diferențe între EXISTS și IN în SQL

Luați în considerare obiectivele SQL atunci când alegeți EXISTS sau IN.

Operator IN

Operatorul IN returnează un rând în cazul în care o valoare tabelă. Dacă câmpul CONDIȚIONAT corespunde unei liste de valori IN. IN este folosit în mod obișnuit ca parte a unei interogări principale sau împreună cu o subchetare. Exemplul 1: WHERE Table.Field în ('a', 'b', 'c') Exemplul 2: WHERE Table.Field în (set de valori returnate de subchetare)

Operatorul EXISTĂ

Operatorul EXISTS returnează toate liniile principale de interogare dacă subcheta conține orice rânduri. EXISTS se utilizează numai în combinație cu o subchetare. Rândurile returnate sunt determinate prin filtrarea la nivelul principal de interogare. Exemplu: WHERE EXISTS (set de valori returnate ale subchetei)

diferență

IN nu poate evalua NULL-urile, deci rândurile sunt întotdeauna false și nu sunt returnate. EXISTS poate evalua NULL, deci rândurile pot fi returnate.

similarități

EXISTS și IN ambele suport subdotare corelate și necorelate și ambele pot produce rezultate similare similare. Când se corelează, EXISTS și IN se potrivesc cu un câmp de interogare principal cu un câmp de subchetare (ex: main.id = subquery.id). Subcoretarea este evaluată rând după rând, pentru fiecare meci găsit. În acest caz, IN și EXISTS vor returna aceleași rânduri bazate pe identificări similare. Atunci când acestea nu sunt corelate, EXISTS și IN procesează mai întâi subdotarea lor și apoi potrivesc rezultatele cu interogarea principală.

Performanța EXISTS și IN

Performanța este determinată de optimizatorul bazei de date și de planul de execuție pe care îl utilizează pentru codul care este executat. Pentru EXISTS și IN, optimizatorul poate alege diferite căi. În Oracle, NO EXISTS evită un anti-join și, de obicei, se dovedește a fi mai rapid decât NO IN. Pe scurt, este nevoie de un pic de încercare și de eroare pentru a determina cea mai rapidă cale, în funcție de baza de date și versiunea sa de utilizare. Asigurați-vă că utilizați operatorul care garantează rezultatele corecte, dacă toate acestea, încercați să înlocuiți EXISTS și IN pentru a vedea cu adevărat care dintre ele este mai rapidă.