Adloun

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
Clausela norme SQLSQLite (mesuré)
`ORDER BY`alias autoriséaccepté
`WHERE`alias interditaccepté
`GROUP BY`alias interditaccepté
`HAVING`alias interditaccepté

Il faut donc distinguer deux choses, et c'est le point de l'exercice.

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.