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 :
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 :
SELECT titre, annee, note FROM films WHERE annee > 1990 ORDER BY note DESC| titre | annee | note |
|---|---|---|
| Pulp Fiction | 1994 | 8.9 |
| Inception | 2010 | 8.8 |
| Amélie Poulain | 2001 | 8.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 :
SELECT DISTINCT genre FROM films| 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 :
SELECT titre, genre, note FROM films WHERE annee > 1990 ORDER BY note DESC LIMIT 2| titre | genre | note |
|---|---|---|
| Pulp Fiction | Crime | 8.9 |
| Inception | SF | 8.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 :
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.