Maintenez SQLtest en vie : Aidez à couvrir les coûts du serveur de ce mois-ci de 100 $ pour garder toutes les leçons et le terrain de jeu SQL en ligne. Soutenez le projet →
Code SQL copié dans le presse-papiers

Leçon 2.7 · Temps de lecture : ~6 min

La plupart des requêtes SQL réelles combinent WHERE, ORDER BY et LIMIT : elles filtrent les lignes, les trient et ne renvoient que la partie utile. Dans cette leçon, vous apprendrez l'ordre obligatoire de ces clauses, l'ordre dans lequel la base de données les traite réellement, et comment écrire des requêtes top-N filtrées et paginées.

Combiner WHERE, ORDER BY et LIMIT en SQL

Dans ce module, vous avez appris à filtrer les lignes avec WHERE, à les trier avec ORDER BY et à limiter le résultat avec LIMIT. Séparément, chaque clause résout une petite tâche. Ensemble, elles répondent aux questions métier typiques : « les 5 films les moins chers à remplacer », « les derniers paiements de plus de 10 $ », « la page 2 des résultats de recherche ».

Ordre des clauses SQL : l'ordre d'écriture SELECT, FROM, WHERE, ORDER BY, LIMIT comparé à l'ordre logique de traitement FROM, WHERE, SELECT, ORDER BY, LIMIT

L'ordre d'écriture des clauses

Les clauses d'une requête SELECT doivent être écrites dans un ordre fixe. Dans tout autre ordre, la base de données renvoie une erreur de syntaxe.

SELECT columns
FROM table_name
WHERE condition
ORDER BY sort_columns
LIMIT row_count OFFSET skip_count;
  1. SELECT : quelles colonnes renvoyer.
  2. FROM : quelle table lire.
  3. WHERE : quelles lignes garder.
  4. ORDER BY : comment les trier.
  5. LIMIT / OFFSET : quelle partie du résultat trié renvoyer.

C'est l'ordre pour les clauses que vous connaissez déjà ; GROUP BY et HAVING prendront leur place entre WHERE et ORDER BY dans le module 4.


L'ordre logique de traitement

La base de données ne traite pas une requête dans l'ordre où elle est écrite. Logiquement, les étapes sont :

ÉtapeClauseCe qui se passe
1FROMLa table source est choisie
2WHERELes lignes qui ne remplissent pas la condition sont supprimées
3SELECTLes colonnes et expressions du résultat sont calculées
4ORDER BYLes lignes sont triées
5LIMIT / OFFSETLa partie demandée des lignes triées est renvoyée

Cet ordre explique deux règles importantes :

  • WHERE ne peut pas utiliser les alias de colonnes de SELECT : à l'étape 2, ils n'existent pas encore.
  • LIMIT est appliqué après le filtrage et le tri, donc « top 5 » signifie les 5 premières lignes filtrées, et non 5 lignes au hasard filtrées ensuite.

L'optimiseur peut exécuter la requête autrement en interne, mais le résultat est toujours le même que si ces étapes étaient effectuées dans cet ordre.


Requêtes top-N filtrées

Les cinq films bon marché les plus courts

SELECT title, length, replacement_cost
FROM film
WHERE replacement_cost < 15.00
ORDER BY length, title
LIMIT 5;

Résultat : les 5 films les plus courts dont le remplacement coûte moins de 15 $.

Les derniers gros paiements

SELECT payment_id, customer_id, amount, payment_date
FROM payment
WHERE amount >= 10.00
ORDER BY payment_date DESC
LIMIT 10;

Résultat : les 10 paiements les plus récents de 10 $ ou plus.

Des acteurs par lettre

SELECT first_name, last_name
FROM actor
WHERE last_name LIKE 'B%'
ORDER BY first_name, last_name
LIMIT 3;

Résultat : les 3 premiers acteurs, par ordre de prénom, dont le nom de famille commence par « B ».


Paginer une liste filtrée

Les applications paginent généralement une liste filtrée et triée, comme des résultats de recherche. Les trois clauses sont nécessaires :

  1. WHERE sélectionne les lignes recherchées par l'utilisateur.
  2. ORDER BY fixe l'ordre, pour que les lignes ne se répètent pas et ne disparaissent pas d'une page à l'autre.
  3. LIMIT et OFFSET choisissent la page : LIMIT S OFFSET (N - 1) * S.
SELECT first_name, last_name
FROM actor
WHERE first_name LIKE 'A%'
ORDER BY last_name, first_name
LIMIT 5 OFFSET 5;

Résultat : la page 2 (lignes 6 à 10) des acteurs dont le prénom commence par « A », triés par nom de famille.


Points clés :

  • L'ordre d'écriture est SELECT → FROM → WHERE → ORDER BY → LIMIT.
  • L'ordre logique est FROM → WHERE → SELECT → ORDER BY → LIMIT.
  • WHERE est appliqué avant SELECT, il ne peut donc pas utiliser les alias de colonnes ; ORDER BY le peut.
  • LIMIT prend les lignes d'un résultat déjà filtré et trié.
  • Pour des listes top-N et une pagination stables, rendez le tri univoque.

Questions fréquentes

Quel est l'ordre correct de WHERE, ORDER BY et LIMIT en SQL ?

WHERE vient en premier, puis ORDER BY, puis LIMIT : SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT .... Tout autre ordre provoque une erreur de syntaxe.

Dans quel ordre SQL exécute-t-il une requête ?

Logiquement : FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY, LIMIT. C'est pourquoi WHERE ne peut pas utiliser les alias de SELECT, alors qu'ORDER BY le peut.

LIMIT est-il appliqué avant ou après WHERE ?

Après. La base de données filtre d'abord les lignes avec WHERE, les trie avec ORDER BY, et ne renvoie qu'ensuite le nombre de lignes fixé par LIMIT.

Essayez de resoudre les exercices suivants pour consolider ce que vous avez appris dans cette lecon.

  1. Liste triée des films avec condition
  2. Avions long-courriers