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>

Structure d'une Sous-Requête

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);

Types de Sous-Requêtes

  1. Sous-Requêtes dans la Clause WHERE : Utilisées pour filtrer les résultats de la requête principale.
  2. Sous-Requêtes dans la Clause FROM : Utilisées pour traiter les résultats d'une sous-requête comme une table temporaire.
  3. Sous-Requêtes dans la Clause SELECT : Utilisées pour calculer des valeurs à inclure dans les résultats de la requête principale.

Exemples avec une Base de Données de Vente

Imaginons une base de données de vente avec les tables suivantes :

Untitled-2024-05-16-1153.svg

Sous-Requête dans la Clause WHERE

Objectif : 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
);

Explication

Sélection des Noms de Produits