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:
Product | Amount | SaleDate |
---|---|---|
Apples | 120 | 2024-05-01 |
Oranges | 80 | 2024-05-01 |
Bananas | 50 | 2024-05-02 |
Pears | 60 | 2024-05-02 |
Grapes | 90 | 2024-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 :
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 :
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 :
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 :
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
:
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 clauseSELECT
.
Prochaines étapes
Ensuite, vous apprendrez comment migrer vos flux de travail Excel vers SQL pour des analyses plus efficaces.