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

Autor: Peter Berry
Data Creației: 11 August 2021
Data Actualizării: 20 Noiembrie 2024
Anonim
Diferențe între operatorii EXISTS și IN în SQL - Articole
Diferențe între operatorii EXISTS și IN în SQL - Articole

Conţinut

O provocare constantă în utilizarea SQL este determinarea utilizării corecte a operatorilor EXISTS și IN. Cei doi operatori pot obține aceleași rezultate, dar nu întotdeauna. În plus, există o dezbatere considerabilă despre modul în care fiecare operator este optimizat pentru viteză. Utilizatorii ar trebui să înțeleagă diferitele atribute ale fiecărui operator și să experimenteze cele două pentru a determina utilizarea adecvată.


Luați în considerare obiectivele SQL atunci când alegeți EXISTS sau IN (Jupiterimages / Photos.com / Getty Images)

IN operator

Operatorul IN returnează un rând dacă valoarea câmpului unui tabel satisface condiția WHERE dintr-o listă de valori IN. Acesta este de obicei utilizat ca parte a unei interogări principale sau în legătură cu o subchetare.

Exemplul 1: WHERE table.field IN ('a', 'b', 'c') Exemplul 2: WHERE table.field IN (Subquery care returnează un set)

Operator EXISTS

Operatorul EXISTS returnează toate rândurile majore dacă o subchetă conține orice rânduri. Se utilizează numai în legătură cu o subcotare. Rândurile returnate sunt determinate de filtrul din interogarea principală.

Exemplu: WHERE EXISTS (Subchetul care returnează un set)


diferență

Operatorul IN nu poate evalua valorile NULL, astfel încât aceste linii vor fi întotdeauna false și nu vor fi returnate, spre deosebire de operatorul EXISTS, care evaluează și returnează liniile cu valori NULL.

similarități

Ambele subsisteme EXISTS și IN corelate și necorelate, ambele pot produce rezultate similare. Când sunt corelate, ele satisfac un câmp de interogare principal pentru un câmp de subchetare (de exemplu: principal.id = subquery.id). Subcâmpul evaluează rândul după rând, pentru fiecare eveniment găsit. În acest caz, IN și EXISTS vor returna aceleași linii bazate pe condiții similare "id". Când sunt necorelate, cei doi operatori își procesează subdotarea și apoi combină rezultatele pentru interogarea principală.

performanță

Performanța este determinată de optimizatorul bazei de date și de planul de execuție utilizat pentru codul executat. Pentru EXISTS și IN, optimizatorul poate alege diferite căi. În Oracle, NOT EXISTS este de obicei mai rapid decât NOT IN. În final, sunt necesare câteva încercări și erori pentru a sorta calea cea mai scurtă, în funcție de baza de date și versiunea utilizată. Asigurați-vă că utilizați operatorul care garantează mai întâi rezultatele corecte și apoi încercați să înlocuiți operatorii pentru a vedea care este cel mai rapid.