sql >> Database >  >> RDS >> Database

SQL IN versus SQL BESTAAT

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.


  1. Wat zijn de verschillen tussen SQL en MySQL

  2. Hoe het prestatieprobleem in een relationele database te beschrijven?

  3. Postgres kon geen verbinding maken met de server

  4. Authenticatie-plug-in 'caching_sha2_password' wordt niet ondersteund