Combiner et affiner

Filtrer, trier, limiter — tu sais faire chacun séparément. SQL exige qu'ils arrivent dans un ordre strict : une clause hors séquence produit une erreur, pas le résultat attendu. Cette leçon assemble les pièces, et règle un dernier cas courant : que faire quand le résultat contient des lignes en double.

Assembler tout ce que tu sais

Tu as appris séparément à choisir des colonnes (SELECT), filtrer (WHERE), trier (ORDER BY) et limiter (LIMIT). Cette dernière leçon du parcours ne présente presque aucun concept nouveau : elle t'apprend à tout assembler dans une seule requête, proprement, plus un petit outil bien utile, DISTINCT.

C'est la leçon qui transforme des briques isolées en vraies requêtes complètes — celles que tu écriras pour de bon.

L'ordre des clauses (la règle d'or)

Quand on combine plusieurs clauses, leur ordre n'est pas libre : SQL impose une séquence précise. La voici, telle qu'on l'écrit toujours :

1SELECTquelles colonnes
2FROMquelle table
3WHEREquel filtre
4ORDER BYquel tri
5LIMITcombien de lignes

On ne met pas le WHERE après le ORDER BY, ni le LIMIT avant le tri. Si on inverse, SQL renvoie une erreur. Bonne nouvelle : cet ordre est logique — on choisit *quoi* afficher, *d'où*, *quelles* lignes, *dans quel ordre*, et *combien*. Il suit le raisonnement naturel.

WHERE et ORDER BY ensemble

Combinons concrètement. On veut les films sortis après 1990, classés du mieux noté au moins bien noté. On filtre (WHERE), puis on trie (ORDER BY), dans le bon ordre :

La requête
SELECT titre, annee, note FROM films WHERE annee > 1990 ORDER BY note DESC
Résultat · 3 lignes
titreanneenote
Pulp Fiction19948.9
Inception20108.8
Amélie Poulain20018.3

SQL applique d'abord le filtre (il écarte Le Parrain, sorti en 1972), puis trie ce qui reste par note décroissante. Le Parrain, pourtant le mieux noté, n'apparaît pas : il a été retiré par le WHERE avant même le tri.

DISTINCT : éliminer les doublons

Dernier outil du parcours : DISTINCT. Placé juste après SELECT, il supprime les doublons du résultat — il ne garde que les valeurs uniques.

Imagine qu'on veuille la liste des genres présents dans la table, sans répétition. Sans DISTINCT, un genre reviendrait autant de fois qu'il y a de films de ce genre. Avec :

La requête
SELECT DISTINCT genre FROM films
Résultat · 4 lignes
genre
SF
Drame
Crime
Comédie

Chaque genre n'apparaît qu'une fois. Ici nos quatre films ont chacun un genre différent, mais sur une vraie table avec des centaines de films, DISTINCT est précieux pour obtenir la liste des valeurs distinctes.

La requête complète (tout réuni)

Mettons tout bout à bout. Voici une requête qui mobilise presque tout le parcours : les films sortis après 1990, classés par note, en se limitant aux 2 premiers :

La requête
SELECT titre, genre, note FROM films WHERE annee > 1990 ORDER BY note DESC LIMIT 2
Résultat · 2 lignes
titregenrenote
Pulp FictionCrime8.9
InceptionSF8.8

Lis-la dans l'ordre : on sélectionne titre, genre et note, depuis films, en ne gardant que ceux d'après 1990, triés par note décroissante, limités aux 2 premiers. Chaque clause joue son rôle, dans l'ordre imposé. C'est une vraie requête d'analyse — et tu sais maintenant la lire et l'écrire.

Récapitulatif

En résumé, pour combiner et affiner une requête :

📌 Combiner et affiner — l'essentiel
SELECT → FROM → WHERE → ORDER BY → LIMIT→ l'ordre imposé des clauses
DISTINCT→ juste après SELECT, supprime les doublons (valeurs uniques)
les clauses se cumulent→ chacune affine le résultat de la précédente
Exemple complet
SELECT titre, genre FROM films WHERE annee > 1990 ORDER BY note DESC LIMIT 2

💡 Bon à savoir : tu maîtrises maintenant la lecture de données — c'est la fondation de tout le SQL. Les parcours suivants ne feront qu'ajouter de nouvelles clauses autour de ce socle (combiner des tables, calculer des totaux…). Mais l'ossature SELECT … FROM … WHERE … restera toujours là.

Passe à la pratique

Cette leçon t'a montré la théorie. Pour maîtriser SQL, rien ne vaut la pratique : accède aux exercices et au bac à sable PostgreSQL réel.

← Tous les cours SQL