Skip to content

5.3 — Bases des sous-requêtes

Ce que vous apprendrez

  • Que sont les sous-requêtes et pourquoi elles sont utiles
  • Comment utiliser les sous-requêtes pour un filtrage dynamique
  • Analogie Excel avec les sous-requêtes

Tables d'exemple

Table sales:

ProductAmountSaleDate
Apples1202024-05-01
Oranges802024-05-01
Bananas502024-05-02
Pears602024-05-02
Grapes902024-05-03

Table featured_products:

Product
Apples
Oranges

Table discontinued_products:

Product
Bananas
Grapes
NULL

Qu'est-ce qu'une sous-requête ?

Une sous-requête est une requête imbriquée dans une autre requête. Elle vous permet d'utiliser le résultat d'une requête comme entrée pour une autre - comme utiliser un tableau auxiliaire ou une formule dans Excel.

Exemple : Filtrer avec une sous-requête

Afficher les ventes pour les produits avec des ventes supérieures à la moyenne :

sql
SELECT *
FROM sales
WHERE Amount > (
  SELECT AVG(Amount)
  FROM sales
);
  • La sous-requête calcule le montant moyen des ventes.
  • La requête principale retourne les lignes où le montant est supérieur à cette moyenne.

Exemple : IN avec sous-requête

Afficher les ventes pour les produits d'une liste spécifique :

sql
SELECT *
FROM sales
WHERE Product IN (
  SELECT Product
  FROM featured_products
);
  • La sous-requête retourne une liste de produits d'une autre table.

Exemple : NOT IN avec sous-requête

Afficher les ventes pour les produits qui ne sont PAS dans une liste spécifique :

sql
SELECT *
FROM sales
WHERE Product NOT IN (
  SELECT Product
  FROM discontinued_products
);
  • La sous-requête retourne une liste de produits discontinués.
  • La requête principale (devrait) retourne uniquement les ventes pour les produits non inclus dans cette liste.
  • Mais le résultat est vide, pourquoi ?

⚠️ Avertissement concernant les NULL :
Si la sous-requête retourne des valeurs NULL, NOT IN ne retournera aucune ligne !
Cela parce que Product NOT IN (liste avec NULL) n'est jamais TRUE pour aucune valeur.

Comment éviter les problèmes :
Toujours filtrer les valeurs NULL dans la sous-requête :

sql
SELECT *
FROM sales
WHERE Product NOT IN (
  SELECT Product
  FROM discontinued_products
  WHERE Product IS NOT NULL
);

OU définir NULL sur une valeur par défaut avec COALESCE :

sql
SELECT *
FROM sales
WHERE Product NOT IN (
  SELECT COALESCE(Product, '???')
  FROM discontinued_products
);

Points clés

  • Les sous-requêtes rendent vos filtres dynamiques et puissants.
  • Elles peuvent être utilisées dans WHERE, IN, EXISTS, et même dans la clause SELECT.

Prochaines étapes

Ensuite, vous apprendrez comment migrer vos flux de travail Excel vers SQL pour des analyses plus efficaces.