Chapprend · Bases de données
Agrégats et sous-requêtes
Calculer des indicateurs et utiliser le résultat d’une requête dans une autre.
Résumer un ensemble
| Fonction | Résultat |
|---|---|
| COUNT(*) | Nombre de lignes. |
| COUNT(colonne) | Nombre de valeurs non nulles. |
| SUM(colonne) | Somme des valeurs non nulles. |
| AVG(colonne) | Moyenne des valeurs non nulles. |
| MIN / MAX | Plus petite / plus grande valeur non nulle. |
SQL
SELECT COUNT(*) AS nombre, AVG(compte) AS moyenne
FROM client;Imbriquer une sélection
SQL
SELECT *
FROM commande
WHERE id_client IN (
SELECT id_client FROM client WHERE ville = 'Lille'
);Une sous-requête scalaire fournit une seule valeur. IN accepte une colonne contenant plusieurs valeurs. EXISTS teste uniquement si la sous-requête produit au moins une ligne.
Tester l’absence
SQL
SELECT c.id_client, c.nom
FROM client c
WHERE NOT EXISTS (
SELECT 1 FROM commande co
WHERE co.id_client = c.id_client
);La requête recherche les clients sans commande. Elle est corrélée : la sous-requête utilise le client de la requête extérieure.
Pourquoi COUNT(email) peut-il être inférieur à COUNT(*) ?
COUNT(email) ignore les lignes dont email est NULL, tandis que COUNT(*) compte toutes les lignes.