informatique (MP2I/MPI) · Chapitre 21 · Exercice de TD
Sur quoi porte DISTINCT ?
Bases de données relationnelles et SQL · niveau 2
É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.