Adloun

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

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre