Chaque clause joue un rôle précis dans l’ordre d’exécution :
Clause SQL | Rôle |
---|---|
FROM |
Indique la table principale utilisée comme source de données. |
WHERE |
Filtre les lignes avant tout calcul, selon des conditions logiques. |
GROUP BY |
Regroupe les lignes ayant une ou plusieurs colonnes identiques. |
HAVING |
Filtre les groupes après un GROUP BY , souvent avec des agrégats. |
SELECT |
Spécifie les colonnes ou les calculs à afficher. |
ORDER BY |
Trie les résultats affichés (par défaut croissant, ou DESC ). |
FROM
est traitée en premier par le moteur SQL.
L’ordre logique d’exécution diffère souvent de l’ordre d’écriture.
WHERE
Utilisation de plusieurs conditions avec AND
, OR
, BETWEEN
, LIKE
:
WHERE
Opérateur | Description | Exemple |
---|---|---|
= |
Égal à | Pays = 'USA' |
<> ou != |
Différent de | AnneeSortie <> 2023 |
> , < , >= , <= |
Comparaison numérique ou alphabétique | Budget >= 1000000 |
BETWEEN ... AND |
Valeur comprise dans un intervalle | AnneeSortie BETWEEN 2000 AND 2010 |
IN (...) |
Appartenance à une liste | Pays IN ('USA', 'France', 'UK') |
NOT IN (...) |
Exclusion d’une liste | Pays NOT IN ('Chine', 'Russie') |
LIKE |
Correspondance partielle avec des jokers | TitreFilm LIKE 'Star%' |
IS NULL |
Teste si une valeur est nulle | DateSortie IS NULL |
IS NOT NULL |
Teste si une valeur est non nulle | DateSortie IS NOT NULL |
LIKE
Joker | Signification | Exemple |
---|---|---|
% |
remplace n'importe quelle suite de caractères | 'Mac%' trouve MacDonald , Macbeth |
_ |
remplace un seul caractère | 'M_c' trouve Mac , Mec , Mic |
WHERE (Pays = 'USA' OR Pays = 'UK') AND AnneeSortie > 2010
WHERE
filtre les lignes individuelles avant tout calcul.Fonction | Rôle |
---|---|
COUNT(*) |
Nombre total de lignes |
SUM(col) |
Somme des valeurs |
AVG(col) |
Moyenne |
MIN(col) |
Valeur minimale |
MAX(col) |
Valeur maximale |
→ Retourne le nombre de films sortis en 2009 .
→ Donne le plus petit et le plus grand budget dans la base.
→ Affiche le budget moyen des films américains.
GROUP BY
Les fonctions d’agrégation prennent tout leur sens lorsqu’on les applique à des groupes :
On peut utiliser la fonction ROUND()
pour arrondir les résultats numériques :
SELECT
.GROUP BY
.HAVING
(pas WHERE
).HAVING
Cette requête affiche uniquement les pays ayant produit plus de 5 films .
Comparer un agrégat avec une valeur :
Affiche les années dont le budget cumulé des films dépasse 500 millions .
HAVING
Contrairement à WHERE
, la clause HAVING
peut contenir des fonctions comme COUNT()
, AVG()
, SUM()
, etc.
On sélectionne ici uniquement les années avec au moins 3 films et un budget moyen supérieur à 10 millions .
WHERE
et HAVING
WHERE |
HAVING |
---|---|
S'applique avant le regroupement | S'applique après le regroupement |
Filtre les lignes | Filtre les groupes |
Ne peut pas utiliser d’agrégats | Peut utiliser COUNT , AVG , etc. |
WHERE
pour filtrer les lignes individuellesHAVING
pour filtrer les groupes formés par GROUP BY
Les sous-requêtes (ou requêtes imbriquées) permettent d’utiliser le résultat d’une autre requête dans une condition. Elles sont très utiles pour faire des comparaisons dynamiques.
Affiche les films dont le budget est supérieur à la moyenne de tous les budgets .
Extrait les acteurs plus jeunes que le plus ancien enregistré.
Liste les films sortis la même année que "Inception" .
Cette requête complexe compare le nombre de films par réalisateur à la moyenne des films par réalisateur .
IN
et NOT IN
Affiche les années où au moins 3 films sont sortis.
Extrait le ou les films ayant le plus gros budget enregistré.
Exemple avancé d’approximation de médiane via sous-requête (nécessite adaptation selon le SGBD).
Retourne les 3 années ayant généré le plus de budget cumulé .
Chaque film sélectionné est le plus cher de son année, sans utiliser de jointure explicite.
ORDER BY
Cette requête affiche les films américains triés par budget décroissant (du plus cher au moins cher).
Les films sont d’abord triés par année croissante, puis à budget décroissant à l’intérieur de chaque année.
Affiche les années où le plus de films sont sortis, par ordre décroissant de nombre.
Le comportement par défaut des NULL
dépend du système de gestion (MySQL, PostgreSQL, etc.). Pour forcer leur position :
Les dates connues sont affichées en premier, les
NULL
en dernier.
ORDER BY
On peut utiliser le nom de colonne ou son alias défini dans
SELECT
.