Les sous-requêtes, également appelées requêtes imbriquées, sont des requêtes SQL placées à l'intérieur d'une autre requête SQL. Elles permettent d'extraire des informations complexes en plusieurs étapes. Les sous-requêtes peuvent être utilisées dans différentes parties d'une requête principale, comme dans la clause SELECT, FROM, WHERE, HAVING, etc.
<aside> ❓ Quelle différence entre sous-requête et requête avec jointure ? Les sous-requêtes et les jointures sont complémentaires. Les jointures sont généralement préférées pour des requêtes simples combinant des données, tandis que les sous-requêtes permettent d'exprimer des requêtes plus complexes qui ne peuvent pas être formulées avec des jointures. Le choix dépend de la complexité de la requête et des performances requises.l
</aside>
Une sous-requête est généralement placée entre parenthèses et peut être utilisée dans différents contextes. Voici un exemple de base :
SELECT column1, column2
FROM table1
WHERE column3 = (SELECT column3 FROM table2 WHERE condition);
WHERE :
Utilisées pour filtrer les résultats de la requête principale.FROM :
Utilisées pour traiter les résultats d'une sous-requête comme une table temporaire.SELECT :
Utilisées pour calculer des valeurs à inclure dans les résultats de la requête principale.Imaginons une base de données de vente avec les tables suivantes :
WHEREObjectif : La requête SQL suivante sélectionne les noms des produits de la table products qui n'ont pas été commandés, c'est-à-dire les produits pour lesquels il n'existe aucune entrée correspondante dans la table order_items.
SELECT p.name
FROM products p
WHERE NOT EXISTS (
SELECT 1
FROM order_items oi
JOIN orders o ON oi.order_id = o.order_id
WHERE oi.product_id = p.product_id
);