Sur quoi porte DISTINCT ?
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 21 — Bases de données relationnelles et SQL
Énoncé
Sur la base du chapitre, combien de lignes rendent ces trois requêtes ?
SELECT promo FROM Eleve;
SELECT DISTINCT promo FROM Eleve;
SELECT DISTINCT nom, promo FROM Eleve;Corrigé
Quatre, deux, puis quatre — mesuré sur le moteur.
La première rend une ligne par enregistrement : la projection ne filtre rien, elle ne fait que choisir des colonnes. On lit donc 2026, 2026, 2027, 2027.
La deuxième rend . Le mot-clé DISTINCT supprime les doublons.
La troisième est le piège, et il est fréquent : on croit avoir écrit « les noms, et les promotions distinctes ». On a écrit « les couples distincts ». Or les quatre couples sont deux à deux différents : aucune ligne n'est supprimée.
| `DISTINCT` porte sur | la ligne entière du `SELECT` |
|---|---|
| et jamais sur | une colonne en particulier |
Il n'existe pas, en SQL standard, de « distinct sur une seule colonne » : pour obtenir « une ligne par promotion, avec un nom », il faut un GROUP BY promo et dire quel nom on veut — question à laquelle il faut bien répondre, et c'est l'exercice 21.10.
Une conséquence de méthode : ajouter une colonne à un SELECT DISTINCT peut augmenter le nombre de lignes. C'est la seule construction de SQL où cela se produise, et cela surprend toujours.
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.