Les quantifieurs ensemblistes
Les quantifieurs ensemblistes permettent d’imposer qu’un ensemble défini possède au moins un élément ou qu’au moins un élément satisfasse une condition particulière
Les quantifieurs SQL sont les suivants :
EXISTS
ALL
ANY
EXISTS
Une condition peut porter sur l’existence ( EXISTS
) ou l’inexistence ( NOT EXISTS
) d’au moins une des lignes dans le résultat d’une sous requête
Exemple : Quels sont les produits qui ont déjà été commandés ? (c.à.d ceux qui sont dans Details
)
1SELECT * FROM Produits AS P WHERE EXISTS (2 SELECT * FROM Details AS D WHERE D.numeroProduit = P.numero3) ;
Produits | |||
---|---|---|---|
numero | nom | prix | stock |
1 | T-shirt | 25 | 30 |
2 | Pantalon | 60 | 50 |
3 | Chaussures | 120 | 100 |
4 | Casquette | 15 | 10 |
5 | Sac à dos | 80 | 5 |
ALL
Le quantifieur ALL
permet de comparer une valeur à celles d’un ensemble défini par une sous-requête
-
ALL
signifie que tous les éléments de l’ensemble doivent satisfaire la comparaison -
Exemple : Donner les commandes spécifiant la plus petite quantité du produit 1 ?
1SELECT DISTINCT numeroCommande FROM Details WHERE quantite <= ALL (2 SELECT quantite FROM Details WHERE numeroProduit = 13) ;
Commandes |
---|
numeroCommande |
1 |
2 |
3 |
4 |
5 |
7 |
La condition s’interprète : la valeur de quantite (de la ligne de Details courante) est inférieure ou égale à chacun des éléments de la table Details relatifs au produit 1
Version SQLite :
1SELECT DISTINCT numeroCommande FROM Details WHERE quantite <= (2 SELECT MIN(quantite) FROM Details WHERE numeroProduit = 13);
ANY
Le quantifieur ANY permet de comparer une valeur à celles d’un ensemble défini par une sous-requête
ANY signifie qu’au moins un des éléments de l’ensemble doit satisfaire la comparaison
Exemple : Donner le détail des commandes du produit numéro 1 dont la quantité n’est pas minimale ?
1SELECT * FROM Details WHERE numeroProduit = 1 AND quantite > ANY (2SELECT quantite FROM Details WHERE numeroProduit = 13) ;
Details | ||
---|---|---|
numeroCommande | numeroProduit | quantite |
1 | 1 | 3 |
3 | 1 | 4 |
4 | 1 | 7 |
5 | 1 | 2 |
6 | 1 | 10 |
La condition s’interprète : la valeur de quantite
(de la ligne de Details
courante) est supérieure à au moins un des éléments de la table Details
relatifs au produit 1
Version SQLite :
1SELECT * FROM Details WHERE numeroProduit = 1 AND quantite NOT IN (2 SELECT MIN(quantite) FROM Details WHERE numeroProduit = 13) ;
Conclusion
Les quantifieurs ensemblistes permettent de comparer une valeur à celles d’un ensemble défini par une sous-requête
EXISTS
: vérifie l’existence d’au moins une ligne dans le résultat de la sous-requêteALL
: vérifie que la condition est vraie pour toutes les lignes de la sous-requêteANY
: vérifie que la condition est vraie pour au moins une des lignes de la sous-requête
Ces instructions ne sont pas supportées par tous les SGBD. Il faudra donc adapter les requêtes en conséquence.