L’opérateur SQL EXISTS permet de vérifier qu’une sous-requête contient une valeur spé­ci­fique. Le résultat est une valeur booléenne. Il est également possible d’in­ter­ro­ger plusieurs con­di­tions.

Qu’est-ce que SQL EXISTS ?

Dans le Struc­tu­red Query Language (SQL), il existe, outre les requêtes ré­gu­lières, le principe des « sous-requêtes » ou sub­que­ries. Si vous souhaitez vérifier qu’une valeur définie est présente dans une de ces sous-requêtes, vous pouvez utiliser l’opérateur SQL EXISTS. Celui-ci applique une condition définie à la sous-requête et affiche la valeur TRUE (donc « vrai ») si celle-ci est remplie. Ce n’est que si c’est le cas que la requête su­pé­rieure est exécutée. SQL EXISTS peut être exécuté avec les commandes SQL DELETE, INSERT, SELECT et UPDATE.

Serveurs virtuels (VPS)
VPS éco­no­miques sur serveurs Dell En­ter­prise
  • 1 Gbit/s de bande passante et trafic illimité
  • Dis­po­ni­bi­lité de 99,99 % et cer­ti­fi­ca­tion ISO
  • As­sis­tance 24/7 primée pour sa qualité et con­seil­ler personnel

Syntaxe et fonc­tion­ne­ment

Nous allons main­te­nant vous montrer le fonc­tion­ne­ment de SQL EXISTS en com­bi­nai­son avec SELECT. La syntaxe cor­res­pon­dante se présente comme suit :

SELECT Nom_de_la_colonne
FROM Nom_de_la_table
WHERE EXISTS
(SELECT Nom_de_la_colonne FROM Nom_de_la_table WHERE condition);
sql

« nom_de_la_colonne » désigne la ou les colonnes qui doivent être filtrées par SELECT. Ensuite, on indique le nom de la table dans laquelle la commande doit être exécutée. La vé­ri­fi­ca­tion de la sous-requête se fait ensuite via WHERE EXISTS. À cet endroit, vous indiquez la sous-requête cor­res­pon­dante entre pa­ren­thèses.

Lors de l’exécution du code, la requête su­pé­rieure est d’abord lancée. Ensuite, le système lance la sous-requête. Si celle-ci donne un résultat (c’est-à-dire TRUE), le résultat de la requête prin­ci­pale est pris en compte. Mais si le résultat de la sous-requête est NULL, le résultat de la requête prin­ci­pale est ignoré.

Exemple d’uti­li­sa­tion de l’opérateur

La sig­ni­fi­ca­tion et le fonc­tion­ne­ment de SQL EXISTS peuvent être illustrés le plus sim­ple­ment possible par un exemple. Pour cela, nous créons deux tables dif­fé­rentes. Le premier tableau s’appelle « Liste des clients ». Dif­fé­rents clients d’une en­tre­prise y sont ré­per­to­riés avec leur numéro de client, leur nom et leur ville. Ce tableau se présente comme suit :

Numéro de client Nom Ville
1427 Berron Paris
1377 Froissy Stras­bourg
1212 Sulis Stras­bourg
1431 Verdon Lille
1118 Paré Compiègne

Notre deuxième tableau s’intitule « Commandes ». Il contient pour chaque entrée une référence d’article, le numéro de client et la date de la commande. Il se présente ainsi :

Référence de l’article Numéro de client Date de commande
00282 1172 2024-01-17
00311 1361 2024-01-19
00106 1431 2024-01-19
00378 1274 2024-01-30
00418 1118 2024-02-03

Nous pouvons main­te­nant filtrer les clients qui ont passé au moins une commande entre le 17 janvier et le 3 février. Pour cela, nous utilisons le code suivant :

SELECT Numéro de client, Nom, Ville
FROM Liste des clients
WHERE EXISTS
(SELECT * FROM Commandes WHERE Liste des clients.Numéro de client = Commandes.Numéro de client);
sql

Le système vérifie main­te­nant si les numéros de clients de la liste de clients se trouvent dans les commandes. Si c’est le cas (si la valeur est donc TRUE), les entrées cor­res­pon­dantes sont listées. Notre tableau se présente main­te­nant comme suit :

Numéro de client Nom Ville
1431 Verdon Lille
1118 Paré Compiègne

In­ter­ro­ger plusieurs con­di­tions

Vous avez également la pos­si­bi­lité d’in­ter­ro­ger plusieurs con­di­tions et de spécifier ainsi encore plus votre sélection. Dans l’exemple suivant, nous voulons ainsi vérifier si certains numéros de clients sont inclus, mais aussi la ville de Lille. Le code ressemble à ceci :

SELECT Numéro de client, Nom, Ville
FROM Liste de clients
WHERE EXISTS
(SELECT * FROM Commandes WHERE Liste des clients.Numéro de client = Commandes.Numéro de client AND Ville = 'Lille');
sql

Ici aussi, le résultat est TRUE et la sortie est celle-ci :

Numéro de client Nom Ville
1431 Verdon Lille

Com­bi­nai­son avec NOT

Vous pouvez aussi procéder in­ver­se­ment avec SQL EXISTS. Dans l’exemple suivant, nous sou­hai­tons voir tous les clients qui n’ont pas passé de commande pendant la période cor­res­pon­dante. Pour cela, nous insérons le com­plé­ment NOT.

SELECT Numéro de client, Nom, Ville
FROM Liste de clients
WHERE NOT EXISTS
(SELECT * FROM Commandes WHERE Liste des clients.Numéro de client = Commandes.Numéro de client);
sql

La sortie sera alors la suivante :

Numéro de client Nom Ville
1427 Berron Paris
1377 Froissy Stras­bourg
1212 Sulis Stras­bourg

Al­ter­na­tives à SQL EXISTS

Il existe quelques al­ter­na­tives à SQL EXISTS, qui vous per­met­tent également d’examiner des sous-requêtes pour des entrées spé­ci­fiques. Les options les plus pratiques sont les opé­ra­teurs IN et JOIN, que vous pouvez tous deux spécifier selon vos besoins.

Conseil

Des per­for­mances de pointe et un conseil per­son­na­lisé ! Avec le serveur d’hé­ber­ge­ment SQL de IONOS, vous avez le choix entre MSSQL, MySQL et MariaDB. Choi­sis­sez le modèle qui cor­res­pond le mieux à vos besoins !

Aller au menu principal