Database
 sql >> Base de données >  >> RDS >> Database

SQL IN vs SQL EXISTE

SQL IN vs SQL EXISTS

Cet article traite en détail des opérateurs IN et EXISTS en SQL . C'est une question courante entre les développeurs de savoir quelle est la différence entre ces deux opérateurs. Pour connaître la différence, discutons d'abord de chacun de ces opérateurs en détail.

Opérateur IN

L'opérateur IN est utilisé pour obtenir des résultats lorsqu'une valeur spécifiée correspond à une valeur dans un ensemble de valeurs ou est renvoyée par une requête interne. Cet opérateur peut également être utilisé avec le WHERE clause pour spécifier plusieurs valeurs. L'opérateur IN est souvent appelé l'acronyme de l'opérateur OR car il réduit l'utilisation de plusieurs conditions OR dans les requêtes SELECT, INSERT, UPDATE ou DELETE .

Dans cet opérateur, la sous-requête est résolue en premier et ce résultat est ensuite utilisé pour résoudre la requête externe.

Voici la syntaxe générale de l'opérateur IN :

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

Exemple :

Considérons la table Customer suivante.

ID_client Nom_client Ville Profession
1 Harry Calcutta Entreprise
2 Ron Bombay Docteur
3 Albus Delhi Ingénieur
4 Dobby Pune Scientifique
5 Rogue Bangalore Étudiant

Requête :

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

La requête ci-dessus renverra tous les clients qui sont docteurs, scientifiques ou ingénieurs.

Sortie :

ID_client Nom_client Ville Profession
2 Ron Bombay Docteur
3 Albus Delhi Ingénieur
4 Dobby Pune Scientifique

Opérateur EXISTS

L'opérateur EXISTS, contrairement à l'opérateur IN, renvoie une valeur booléenne. Cet opérateur vérifie le résultat de la requête interne et renvoie une valeur booléenne, c'est-à-dire vrai ou faux. Si la requête interne renvoie un enregistrement unique ou multiple, l'opérateur renvoie vrai, sinon il renvoie faux lorsqu'aucun enregistrement n'est trouvé.

Cet opérateur est également efficace car il arrête tout traitement ultérieur dès que le premier événement vrai est détecté.

Voici la syntaxe de l'opérateur EXISTS :

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

Exemple :

Considérons la table Customer suivante.

ID_client Nom Profession Âge
101 Harry Ingénieur 32
102 Ron Développeur 30
103 Dobby Chef 28
104 Albus Scientifique 45
105 Rogue Charpentier 26
106 Gingembre Acteur 25
107 NULL NULL NULL

Considérons une autre table Commandes.

Order_id ID_client Product_name Order_date
1 101 Ordinateur portable 2021-01-10
2 103 Bureau 2021-02-12
3 106 iPhone 2021-02-15
4 104 Mobile 2021-03-05
5 102 TV 2021-03-20

Requête :

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

La requête ci-dessus renverra le nom et la profession de tous les clients qui ont passé au moins une commande.

Sortie :

Nom Profession
Harry Ingénieur
Ron Développeur
Dobby Chef
Albus Scientifique
Gingembre Acteur

Tableau des différences entre les opérateurs IN et EXISTS

Les principales différences entre l'opérateur IN et l'opérateur EXISTS sont répertoriées ci-dessous sous forme de tableau :

Opérateur IN Opérateur EXISTS
Cela minimise l'utilisation des conditions OU. Il vérifie l'existence d'un enregistrement dans la requête interne.
Il compare les valeurs de la requête interne avec la valeur de la requête externe. Il ne compare pas les valeurs entre la requête interne et la sous-requête.
Il vérifie toutes les valeurs à l'intérieur du bloc de la clause IN. Il arrête toute exécution ultérieure dès que la première condition vraie est remplie.
Il peut renvoyer TRUE, FALSE ou NULL. Il renvoie soit TRUE ou FALSE.
Il peut être utilisé pour vérifier les valeurs NULL. Il ne peut pas être utilisé pour vérifier les valeurs NULL.
Il est utilisé avec les sous-requêtes et les valeurs. Il est utilisé uniquement avec les sous-requêtes.
L'exécution est plus rapide lorsque le résultat de la requête interne est inférieur. L'exécution est plus rapide même lorsque le résultat de la requête interne est volumineux. Il est plus efficace que l'opérateur IN.
Syntaxe :SELECT nom_colonne FROM nom_table WHERE nom_colonne IN (sous-requête); Syntaxe :SELECT nom_colonneFROM nom_tableWHERE [NOT] EXISTS (subquery);

Conclusion :

Dans cette rubrique, une comparaison a été faite entre l'opérateur IN et les opérateurs EXISTS de SQL. Les deux opérateurs effectuent la même opération mais leur fonctionnement interne est différent. Ils ont un fonctionnement logique différent. N'importe lequel d'entre eux peut être sélectionné en fonction des besoins. Mais, si l'ensemble de données est volumineux, il est toujours recommandé d'opter pour l'opérateur EXISTS.