Nous avons démontrer comment utiliser l’ordre select avec ses clauses : from, where, group by, having et group by. Dans cette partie , nous voulons découvrir une méthode très utile utilisée avec l’ordre select : les sous requêtes.
Les sous requêtes : introduction
Soit la base de données relationnelle GestionVentes qui contient trois tables : Produit( (avec les informations concernant un produit : code, libellé, prix unitaire…), Client ( inclut les informations du client : code, nom, prénom, adresse,…) et la table Vente ( c’est la table qui stocke les informations concernant les ventes : code du produit vendu, code du client qui a acheté ce produit, quantité commandée, date de la commande,…)
Supposons, on veut afficher la liste des produits qui n’ont jamais été acheté. Pour pouvoir répondre à cette question il faut tester que notre produit ne correspond à aucune ligne de la table vente. Ce qui n’est pas évident sans utiliser les sous requête.
Une sous-requête est une requête de sélection dont les résultats sont utilisés pour répondre à une autre requête.
Solution possible :
SELECT *
FROM PRODUIT
WHERE codeP NOT IN ( Select DISTINCT codeP From VENTE)
Dans la clause where, nous avons utilisé l’opérateur not in puis une autre requête select (dite : sous requête). En effet, la requête : select distinct codeP from VENTE permet de lister les codes des produits vendus. D’où, les produits recherchés sont ceux qui existent dans la table produit (qui contient tous les produits) et qui ne sont pas dans la table vente (qui inclut juste les codes des produits vendus).
Sous requêtes : opérateurs à utiliser
Pour pouvoir utiliser les sous requêtes, on a recours à 4 Opérateurs principaux: IN, ALL, ANY, EXISTS
- ALL : vérifie la condition pour toutes les valeurs de la sous requête.
- ANY : vérifie si la condition est vraie pour au moins une valeur de la sous requête.
- EXITS: vérifie si le résultat de la sous requête correspond à NULL ou pas.
Syntaxe:
SELECT liste des attributs
FROM liste des tables
WHERE Attr1 [>, <, >=, <=] ALL/ANY sous requête
Le choix de l’opérateur à utiliser dépend du besoin. Nous vous proposons une vidéo en Darija-Arabe-Maroc pour plus d’explications et plus exemples.
Vous pouvez suivre la liste des vidéos du cours base de données (Merise + Sql + Transact sql) sur notre chaine youtube : Vidéos Bases de données.