Adloun

Un encadrement, et une colonne qu'on n'affiche pas

Exercice d'entraînement · niveau 2 · mathématiques appliquées (ECG 2e année), chapitre 13 — Bases de données et travaux pratiques · Interroger une table

Énoncé

La table commande a pour champs id, client_id et montant. Écrire la requête donnant les seuls identifiants des commandes dont le montant est compris entre et euros, bornes incluses. Expliquer pourquoi il est possible de filtrer sur montant sans l'afficher.

Corrigé

La requête.


SELECT id FROM commande
WHERE montant >= 50 AND montant <= 200;

L'encadrement s'écrit en deux conditions. SQL ne connaît pas l'écriture mathématique 50 &lt;= montant &lt;= 200 : il faut deux comparaisons reliées par AND. Les bornes étant incluses, on emploie &gt;= et &lt;=, et non &gt; et &lt;.

Pourquoi on peut filtrer sur une colonne non affichée. Les deux clauses agissent sur des objets différents et dans cet ordre :

  1. FROM commande désigne la table de départ, avec toutes ses colonnes ;
  2. WHERE en garde certaines lignes, en consultant librement n'importe quelle colonne de cette table ;
  3. SELECT choisit, à la toute fin, quelles colonnes afficher.

Le filtrage se fait donc avant la sélection des colonnes, sur la table complète. Rien n'oblige une colonne consultée par WHERE à figurer dans le résultat.

Ce que la requête rend. Une table à une seule colonne, id, ne contenant que les identifiants retenus. Si aucune commande ne satisfait la condition, le résultat est une table vide — ce n'est pas une erreur.

Une remarque. Le programme ne demande ni ORDER BY ni DISTINCT : les lignes sortent dans un ordre non garanti, et rien ne les dédoublonne. Ici cela n'a pas d'importance, id étant la clef primaire.

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.