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
.
- 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);
sqlLe 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');
sqlIci 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);
sqlLa 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.
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 !