Erinevused EXISTSi ja IN operaatorite vahel SQLis

Autor: Peter Berry
Loomise Kuupäev: 12 August 2021
Värskenduse Kuupäev: 21 November 2024
Anonim
SQL
Videot: SQL

Sisu

SQL-i kasutamise pidev väljakutse on määrata EXISTSi ja IN-operaatorite õige kasutamine. Mõlemad operaatorid saavad toota samu tulemusi, kuid mitte alati. Lisaks sellele arutatakse olulisel määral, kuidas iga operaator on optimeeritud kiiruse jaoks. Kasutajad peaksid mõistma iga operaatori erinevaid atribuute ja katsetama neid kahe sobiva kasutamise kindlaksmääramiseks.


Vaadake oma SQL-eesmärke, kui valite EXISTS või IN (Jupiterimages / Photos.com / Getty Images)

IN operaator

IN-operaator tagastab rea, kui tabeli väli väärtus vastab IN-väärtuste loendis olevale WHERE-olukorrale. Seda kasutatakse tavaliselt peamise päringu osana või koos allküsimusega.

Näide 1: WHERE table.field IN ('a', 'b', 'c') Näide 2: WHERE tabel. Väli IN (komplekti tagastav päring)

EXISTS operaator

EXISTSi operaator tagastab kõik suuremad read, kui subquery sisaldab ridu. Seda kasutatakse ainult koos subqueryga. Tagastatavad read määravad peamised päringud filtriga.

Näide: KUS EXISTS (komplekti tagastav päring)

Erinevus

IN-operaator ei saa NULL-väärtusi hinnata, nii et sellised jooned on alati valed ja neid ei tagastata erinevalt EXISTS-operaatorist, mis hindab ja tagastab NULL-väärtustega ridu.


Sarnasused

Nii EXISTS kui IN toetavad korrelatsiooniga ja korrelatsioonita alamküsimusi ning mõlemad võivad anda sarnaseid tulemusi. Kui need on omavahel seotud, rahuldavad nad alamküsitlusvälja põhipäringuvälja (nt. Print.id = subquery.id). Subquery hindab rida rida iga leitud juhtumi kohta. Sellisel juhul tagastavad IN ja EXISTS samad read sarnaste id-tingimuste alusel. Kui need on korrelatsioonita, töötlevad kaks operaatorit oma allküsimusi ja ühendavad seejärel peamise päringu tulemused.

Toimivus

Toimivuse määrab andmebaasi optimeerija ja teostatud koodi täitmiseks kasutatav plaan. EXISTS ja IN puhul saab optimeerija valida erinevaid teid. Oracle'is pole NOT EXISTS tavaliselt kiirem kui NOT IN. Lõpuks on lühima tee sorteerimiseks vajalikud katsed ja vead, sõltuvalt kasutatavast andmebaasist ja versioonist. Kindlasti kasutage operaatorit, kes tagab esimesed õiged tulemused, ja proovige seejärel asendada operaatorid, et näha, mis on kõige kiirem.