L'ordre d'évaluation, et ce que le moteur accepte vraiment
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 21 — Bases de données relationnelles et SQL
Énoncé
Le cours énonce qu'un alias défini dans le SELECT ne peut pas servir dans le WHERE, mais peut servir dans le ORDER BY. Éprouver les deux affirmations.
Corrigé
La seconde est confirmée, sans réserve :
SELECT nom, promo AS annee FROM Eleve ORDER BY annee DESC, nom;
-- Cohen 2027, Dupont 2027, Alaoui 2026, Benali 2026
Le ORDER BY est évalué après le SELECT : l'alias existe, et il est utilisable. C'est même le seul endroit où la norme le garantit.
La première demande une nuance, et la mesure la donne. Sur SQLite, la requête suivante est acceptée et rend deux lignes :
SELECT nom, promo AS annee FROM Eleve WHERE annee = 2026; -- Alaoui, Benali
| Clause | la norme SQL | SQLite (mesuré) |
|---|---|---|
| `ORDER BY` | alias autorisé | accepté |
| `WHERE` | alias interdit | accepté |
| `GROUP BY` | alias interdit | accepté |
| `HAVING` | alias interdit | accepté |
Il faut donc distinguer deux choses, et c'est le point de l'exercice.
- L'ordre logique d'évaluation du cours est exact, et c'est lui qui explique les résultats : le
WHEREfiltre avant que les paquets n'existent, d'où l'impossibilité d'y mettre une fonction d'agrégation. - Ce qu'un moteur accepte est une autre question. SQLite — comme PostgreSQL pour le
GROUP BY, comme MySQL pour leHAVING— offre des tolérances au-delà de la norme. Oracle et DB2 refusent l'alias dans leWHERE.
En pratique — Écrire ce qui est portable, même quand le moteur est indulgent
La discipline est celle du chapitre chap:discipline : une requête qui ne marche que sur un moteur est un défaut à retardement. On répète donc l'expression dans le WHERE,
SELECT nom, promo AS annee FROM Eleve WHERE promo = 2026;
ou l'on emploie une sous-requête si l'expression est longue. Et l'on n'infère jamais une règle du langage de ce qu'un moteur veut bien accepter : c'est la différence entre un programme correct et un programme qui n'a pas encore échoué.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.