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.