Aller au contenu

UGA - MIASHS - S7 - BDD - Pierre Blarre

Les quantitieurs ensemblistes

Icône Présentation
1 / 1

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)

SELECT * FROM Produits AS P WHERE EXISTS (
SELECT * FROM Details AS D WHERE D.numeroProduit = P.numero
) ;
Produits
numeronomprixstock
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 ?

SELECT DISTINCT numeroCommande FROM Details WHERE quantite <= ALL (
SELECT quantite FROM Details WHERE numeroProduit = 1
) ;
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 :

SELECT DISTINCT numeroCommande FROM Details WHERE quantite <= (
SELECT MIN(quantite) FROM Details WHERE numeroProduit = 1
);

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 ?

SELECT * FROM Details WHERE numeroProduit = 1 AND quantite > ANY (
SELECT quantite FROM Details WHERE numeroProduit = 1
) ;
Details
numeroCommandenumeroProduitquantite
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 :

SELECT * FROM Details WHERE numeroProduit = 1 AND quantite NOT IN (
SELECT MIN(quantite) FROM Details WHERE numeroProduit = 1
) ;

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ête
  • ALL : vérifie que la condition est vraie pour toutes les lignes de la sous-requête
  • ANY : 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.