Adloun

informatique (MP2I/MPI) · Chapitre 21 · Application directe du cours

L'ordre d'évaluation, et ce que le moteur accepte vraiment

Bases de données relationnelles et SQL · niveau 2

É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 BYalias autoriséaccepté
WHEREalias interditaccepté
GROUP BYalias interditaccepté
HAVINGalias interditaccepté

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 WHERE filtre 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 le HAVING — offre des tolérances au-delà de la norme. Oracle et DB2 refusent l'alias dans le WHERE.

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é.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre