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.