SQL IN versus SQL BESTAAT
Dit artikel bespreekt in detail de IN en de EXISTS operators in SQL . Het is een veel voorkomende vraag tussen ontwikkelaars wat het verschil is tussen deze twee operators. Laten we, om het verschil te weten, eerst in detail over elk van deze operators praten.
IN-operator
De IN-operator wordt gebruikt om resultaten te krijgen wanneer een opgegeven waarde overeenkomt met een waarde in een reeks waarden of wordt geretourneerd door een innerlijke query. Deze operator kan ook worden gebruikt met de WHERE clausule om meer dan één waarde op te geven. De IN-operator wordt vaak het acroniem voor de OR-operator genoemd omdat het het gebruik van meerdere OR-voorwaarden in SELECT-, INSERT-, UPDATE- of DELETE-query's vermindert .
In deze operator wordt de subquery eerst opgelost en dat resultaat wordt vervolgens gebruikt om de buitenste query op te lossen.
Het volgende is de algemene syntaxis van de IN-operator:
SELECT column_name FROM table_name WHERE column_name IN (value1, value2, …);
Voorbeeld:
Laten we eens kijken naar de volgende klantentabel.
Cust_id | Klantnaam | Stad | Beroep |
1 | Harry | Kolkata | Zakelijk |
2 | Ron | Mumbai | Dokter |
3 | Albus | Delhi | Ingenieur |
4 | Dobby | Pune | Wetenschapper |
5 | Sneep | Bangalore | Leerling |
Vraag:
SELECT * FROM Customer WHERE Occupation IN ('Doctor', 'Scientist', 'Engineer');
De bovenstaande zoekopdracht levert alle klanten op die ofwel dokter, wetenschapper of ingenieur zijn.
Uitvoer:
Cust_id | Klantnaam | Stad | Beroep |
2 | Ron | Mumbai | Dokter |
3 | Albus | Delhi | Ingenieur |
4 | Dobby | Pune | Wetenschapper |
EXISTS-operator
De EXISTS-operator, in tegenstelling tot de IN-operator, retourneert een Booleaanse waarde. Deze operator controleert het resultaat van de inner query en retourneert een Booleaanse waarde, d.w.z. waar of onwaar. Als de inner query een enkele of meerdere records retourneert, retourneert de operator true, anders retourneert deze false als er geen records worden gevonden.
Deze operator is ook efficiënt omdat hij de verdere verwerking stopt zodra de eerste echte gebeurtenis wordt gedetecteerd.
Het volgende is de syntaxis van de EXISTS-operator:
SELECT column_names FROM table_name WHERE NOT EXISTS ( SELECT column_names FROM table_name WHERE condition );
Voorbeeld:
Laten we eens kijken naar de volgende klantentabel.
Cust_id | Naam | Beroep | Leeftijd |
101 | Harry | Ingenieur | 32 |
102 | Ron | Ontwikkelaar | 30 |
103 | Dobby | Leider | 28 |
104 | Albus | Wetenschapper | 45 |
105 | Sneep | Timmerman | 26 |
106 | Gember | Acteur | 25 |
107 | NULL | NULL | NULL |
Laten we een andere tafel overwegen.
Order_id | Cust_id | Productnaam | Order_date |
1 | 101 | Laptop | 2021-01-10 |
2 | 103 | Bureaublad | 202-02-12 |
3 | 106 | IPhone | 2021-02-15 |
4 | 104 | Mobiel | 201-03-05 |
5 | 102 | TV | 2021-03-20 |
Vraag:
SELECT Name, Occupation FROM Customer WHERE EXISTS ( SELECT * FROM Orders WHERE Customer.Cust_id = Orders.Cust_id );
De bovenstaande zoekopdracht retourneert de naam en het beroep van alle klanten die ten minste één bestelling hebben geplaatst.
Uitvoer:
Naam | Beroep |
Harry | Ingenieur |
Ron | Ontwikkelaar |
Dobby | Leider |
Albus | Wetenschapper |
Gember | Acteur |
Verschillentabel tussen IN en EXISTS-operator
De belangrijkste verschillen tussen de IN-operator en de EXISTS-operator worden hieronder in tabelvorm weergegeven:
IN-operator | BESTAT Exploitant |
Het minimaliseert het gebruik van de OR-voorwaarden. | Het controleert het bestaan van een record in de inner query. |
Het vergelijkt de waarden van de inner query met de waarde van de outer query. | Het vergelijkt de waarden tussen de innerlijke query en de subquery niet. |
Het controleert alle waarden binnen het blok van de IN-clausule. | Het stopt elke verdere uitvoering zodra aan de eerste echte voorwaarde is voldaan. |
Het kan TRUE, FALSE of NULL retourneren. | Het geeft TRUE of FALSE terug. |
Het kan worden gebruikt om NULL-waarden te controleren. | Het kan niet worden gebruikt om NULL-waarden te controleren. |
Het wordt gebruikt met zowel subquery's als waarden. | Het wordt alleen gebruikt met subquery's. |
Uitvoering is sneller als het resultaat van de innerlijke query minder is. | De uitvoering is sneller, zelfs als het resultaat van de innerlijke query groot is. Het is efficiënter dan de IN-operator. |
Syntaxis :SELECT column_names FROM table_name WHERE column_name IN (subquery); | Syntaxis :SELECT column_namesFROM table_nameWHERE [NIET] BESTAAT (subquery); |
Conclusie:
In dit onderwerp is een vergelijking gemaakt tussen de IN-operator en de EXISTS-operators van SQL. Beide operators doen dezelfde operatie, maar hun interne werking is anders. Ze hebben een andere logische werking. Elk van hen kan worden geselecteerd op basis van de vereiste. Maar als de gegevensset groot is, wordt het altijd aanbevolen om voor de EXISTS-operator te gaan.