Razlike između operatora EXISTS i IN u SQL-u

Autor: Peter Berry
Datum Stvaranja: 12 Kolovoz 2021
Datum Ažuriranja: 7 Svibanj 2024
Anonim
ODBC PRIKLJUČAK
Video: ODBC PRIKLJUČAK

Sadržaj

Stalni izazov u korištenju SQL-a je određivanje ispravne uporabe operatora EXISTS i IN. Dva operatera mogu proizvesti iste rezultate, ali ne uvijek. Osim toga, postoji značajna rasprava o tome kako je svaki operater optimiziran za brzinu. Korisnici bi trebali razumjeti različite atribute svakog operatora i eksperimentirati s njima kako bi odredili prikladnu uporabu.


Razmotrite svoje SQL ciljeve pri odabiru POSTOJEĆI ili IN (Jupiterimages / Photos.com / Getty Images)

Operator IN

Operator IN vraća redak ako vrijednost polja tablice zadovoljava uvjet WHERE u popisu vrijednosti IN. Obično se koristi kao dio glavnog upita ili u vezi s poduprtom.

Primjer 1: WHERE table.field IN ('a', 'b', 'c') Primjer 2: WHERE table.field IN (poduprt koji vraća skup)

POSTOJI operator

Operator EXISTS vraća sve glavne retke ako poduprt sadrži bilo koji redak. Koristi se samo zajedno s poduprtom. Vraćeni redovi određeni su filtrom u glavnom upitu.

Primjer: WHERE EXISTS (poduprt koji vraća skup)

razlika

Operator IN ne može procijeniti NULL vrijednosti, tako da će takve linije uvijek biti lažne i neće biti vraćene, za razliku od operatora EXISTS, koji procjenjuje i vraća linije s NULL vrijednostima.


sličnosti

I EXISTS i IN podržavaju korelirane i nekorelirane podupite, a oba mogu dati slične rezultate. Kada se koreliraju, oni zadovoljavaju glavno polje upita za polje podupita (npr.: Principal.id = subquery.id). Podupit vrednuje red po red za svaki pronađeni događaj. U tom slučaju, IN i EXISTS vraćaju iste linije na temelju sličnih "id" uvjeta. Kada nisu povezani, dva operatora obrađuju svoje podupite i zatim kombiniraju rezultate za glavni upit.

predstava

Izvedba se određuje optimizatorom baze podataka i planom izvršenja koji se koristi za izvršeni kod. Za EXISTS i IN, optimizator može odabrati različite staze. U Oracleu, NOT EXISTS je obično brži od NOT IN. Na kraju, neki pokušaji i pogreške su potrebni za sortiranje najkraće staze, ovisno o bazi podataka i verziji koja se koristi. Obavezno prvo upotrijebite operatera koji jamči ispravne rezultate, a zatim pokušajte zamijeniti operatore da biste vidjeli koji je najbrži.