SQL EXISTS : vérifier une valeur dans une sous-requête

L’opérateur SQL EXISTS permet de vérifier qu’une sous-requête contient une valeur spécifique. Le résultat est une valeur booléenne. Il est également possible d’interroger plusieurs conditions.

Qu’est-ce que SQL EXISTS ?

Dans le Structured Query Language (SQL), il existe, outre les requêtes régulières, le principe des « sous-requêtes » ou subqueries. 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 supérieure est exécutée. SQL EXISTS peut être exécuté avec les commandes SQL DELETE, INSERT, SELECT et UPDATE.

Serveurs virtuels (VPS)
Faites le choix de la performance
  • Virtualisation complète avec accès root
  • Trafic illimité et jusqu'à 1 Gbit/s de bande passante
  • Stockage SSD NVMe rapide et édition Plesk Web Host

Syntaxe et fonctionnement

Nous allons maintenant vous montrer le fonctionnement de SQL EXISTS en combinaison avec SELECT. La syntaxe correspondante 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érification de la sous-requête se fait ensuite via WHERE EXISTS. À cet endroit, vous indiquez la sous-requête correspondante entre parenthèses.

Lors de l’exécution du code, la requête supé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 principale est pris en compte. Mais si le résultat de la sous-requête est NULL, le résultat de la requête principale est ignoré.

Exemple d’utilisation de l’opérateur

La signification et le fonctionnement de SQL EXISTS peuvent être illustrés le plus simplement possible par un exemple. Pour cela, nous créons deux tables différentes. Le premier tableau s’appelle « Liste des clients ». Différents clients d’une entreprise y sont répertorié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 Strasbourg
1212 Sulis Strasbourg
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 maintenant 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 maintenant 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 correspondantes sont listées. Notre tableau se présente maintenant comme suit :

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

Interroger plusieurs conditions

Vous avez également la possibilité d’interroger plusieurs conditions 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

Combinaison avec NOT

Vous pouvez aussi procéder inversement avec SQL EXISTS. Dans l’exemple suivant, nous souhaitons voir tous les clients qui n’ont pas passé de commande pendant la période correspondante. Pour cela, nous insérons le complé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 Strasbourg
1212 Sulis Strasbourg

Alternatives à SQL EXISTS

Il existe quelques alternatives à SQL EXISTS, qui vous permettent également d’examiner des sous-requêtes pour des entrées spécifiques. Les options les plus pratiques sont les opérateurs IN et JOIN, que vous pouvez tous deux spécifier selon vos besoins.

Conseil

Des performances de pointe et un conseil personnalisé ! Avec le serveur d’hébergement SQL de IONOS, vous avez le choix entre MSSQL, MySQL et MariaDB. Choisissez le modèle qui correspond le mieux à vos besoins !

Cet article vous a-t-il été utile ?
Page top