sql >> Database teknologi >  >> RDS >> Database

SQL IN vs SQL EKSISTERER

SQL IN vs SQL EKSISTERER

Denne artikel diskuterer i detaljer om IN- og EXISTS-operatorerne i SQL . Det er et almindeligt spørgsmål mellem udviklere, hvad er forskellen mellem disse to operatører. For at kende forskellen, lad os først diskutere hver af disse operatører i detaljer.

IN-operatør

IN-operatøren bruges til at få resultater, når en specificeret værdi matcher en værdi i et sæt værdier eller returneres af en indre forespørgsel. Denne operator kan også bruges med Hvor klausul for at angive mere end én værdi. IN-operatoren omtales ofte som akronymet for OR-operatoren, fordi den reducerer brugen af ​​flere OR-betingelser i SELECT, INSERT, UPDATE eller DELETE-forespørgsler .

I denne operator er underforespørgslen først løst, og det resultat bruges derefter til at løse den ydre forespørgsel.

Følgende er den generelle syntaks for IN-operatoren:

SELECT column_name
 FROM table_name
 WHERE column_name IN (value1, value2, …); 

Eksempel:

Lad os overveje følgende kundetabel.

Kunde-id Kundenavn By Beskæftigelse
1 Harry Kolkata Forretning
2 Ron Mumbai Læge
3 Albus Delhi Ingeniør
4 Dobby Pune Forsker
5 Snape Bangalore Student

Forespørgsel:

SELECT *
 FROM Customer    
 WHERE Occupation IN ('Doctor', 'Scientist', 'Engineer'); 

Ovenstående forespørgsel vil returnere alle kunder, som enten er læge eller videnskabsmand eller ingeniør.

Output:

Kunde-id Kundenavn By Beskæftigelse
2 Ron Mumbai Læge
3 Albus Delhi Ingeniør
4 Dobby Pune Forsker

FINDER operatør

Operatoren EXISTS, i modsætning til IN-operatoren, returnerer en boolsk værdi. Denne operator kontrollerer resultatet af den indre forespørgsel og returnerer en boolsk værdi, dvs. enten sand eller falsk. Hvis den indre forespørgsel returnerer en enkelt eller flere poster, så returnerer operatoren sand, ellers returnerer den falsk, når der ikke findes nogen poster.

Denne operatør er også effektiv, da den stopper yderligere behandling, så snart den første sande hændelse detekteres.

Følgende er syntaksen for EXISTS-operatoren:

SELECT column_names    
 FROM table_name    
 WHERE NOT EXISTS (    
 SELECT column_names     
 FROM table_name     
 WHERE condition    
 ); 

Eksempel:

Lad os overveje følgende kundetabel.

Kunde-id Navn Beskæftigelse Alder
101 Harry Ingeniør 32
102 Ron Udvikler 30
103 Dobby Leder 28
104 Albus Forsker 45
105 Snape Tømrer 26
106 Ingefær Skuespiller 25
107 NULL NULL NULL

Lad os overveje et andet bord.

Order_id Kunde-id Produktnavn Ordre_dato
1 101 Bærbar 2021-01-10
2 103 Skrivebord 2021-02-12
3 106 IPhone 2021-02-15
4 104 Mobil 2021-03-05
5 102 TV 2021-03-20

Forespørgsel:

SELECT Name, Occupation
 FROM Customer    
 WHERE EXISTS (
 SELECT *
 FROM Orders     
 WHERE Customer.Cust_id = Orders.Cust_id
 ); 

Ovenstående forespørgsel returnerer navn og stilling på alle de kunder, der har afgivet mindst én ordre.

Output:

Navn Beskæftigelse
Harry Ingeniør
Ron Udvikler
Dobby Leder
Albus Forsker
Ingefær Skuespiller

Forskelstabel mellem IN og EXISTS operator

De vigtigste forskelle mellem IN-operatøren og EXISTS-operatøren er angivet nedenfor i tabelform:

IN-operatør FINDER operatør
Det minimerer brugen af ​​OR-betingelserne. Det kontrollerer eksistensen af ​​en post i den indre forespørgsel.
Den sammenligner værdierne af den indre forespørgsel med værdien af ​​den ydre forespørgsel. Den sammenligner ikke værdierne mellem den indre forespørgsel og underforespørgslen.
Den tjekker alle værdierne inde i blokken af ​​IN-sætningen. Det stopper enhver yderligere udførelse, så snart den første sande betingelse er opfyldt.
Det kan returnere TRUE, FALSE eller NULL. Det returnerer enten SAND eller FALSK.
Det kan bruges til at kontrollere NULL-værdier. Den kan ikke bruges til at kontrollere NULL-værdier.
Det bruges med både underforespørgsler og værdier. Det bruges kun med underforespørgsler.
Udførelsen er hurtigere, når resultatet af den indre forespørgsel er mindre. Udførelsen er hurtigere, selv når resultatet af den indre forespørgsel er stort. Det er mere effektivt end IN-operatøren.
Syntaks :SELECT column_names FROM table_name WHERE column_name IN (underforespørgsel); Syntaks :SELECT column_namesFROM table_name WHERE [IKKE] FINDER (underforespørgsel);

Konklusion:

I dette emne er der foretaget en sammenligning mellem IN-operatoren og EXISTS-operatorerne i SQL. Begge operatører udfører den samme operation, men deres interne arbejde er forskelligt. De har forskellig logisk funktion. Enhver af dem kan vælges i henhold til kravet. Men hvis datasættet er stort, anbefales det altid at gå efter EXISTS-operatøren.


  1. Forbinder SQL Server til PostgreSQL

  2. 5 grunde til, at Microsoft Access er fantastisk til startups

  3. Installation af WordPress 5 på ZEIT nu med MySQL Hosting

  4. SQL Server Operativsystem fejl 5:5 (Adgang nægtes.)