Adloun

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 surla ligne entière du `SELECT`
et jamais surune 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.