Cours SQL et MySQL · Module 2: Interroger les données (SELECT)

DISTINCT - uniquement les valeurs uniques

4 min de lecture
Dans cette leçon5

Le marchand de Rhodes demande : « De quels pays viennent vos auteurs ? ». La réponse se trouve dans le champ kraj du rayon autorzy. Mais quand tu demandes un seul champ à un rayon, la même valeur se répète souvent - beaucoup d'auteurs viennent du même pays, beaucoup de lecteurs de la même ville. Le marchand veut une liste de pays, pas une liste d'auteurs. DISTINCT supprime les doublons.

Sans DISTINCT - avec répétitions

Commençons par une requête ordinaire sur un seul champ. La Bibliothèque donne le pays de chaque auteur, ligne par ligne :

1SELECT kraj FROM autorzy;

Huit auteurs, huit lignes :

kraj
Grecja
Grecja
Grecja
Grecja
Grecja
Polska
Polska
USA

Cinq auteurs viennent de Grèce, donc le mot Grecja apparaît cinq fois. Une telle liste n'apprend rien au marchand.

Avec DISTINCT - sans répétitions

Ajoutons maintenant un mot juste après SELECT. Le reste de la requête ne change pas :

1SELECT DISTINCT kraj FROM autorzy;

Chaque pays n'apparaît plus qu'une seule fois :

kraj
Grecja
Polska
USA

Sur huit lignes, il en reste trois. C'est comme la liste des sections dans les Pinakes - chaque sujet nommé une seule fois. Le rayon contient toujours huit auteurs : DISTINCT ne supprime rien de la table, il tamise seulement la réponse.

DISTINCT et plusieurs colonnes

Quand tu donnes plusieurs champs, DISTINCT compare toute la ligne du résultat, et non des valeurs isolées. Regarde d'abord les prénoms et noms des lecteurs sans DISTINCT :

1SELECT imie, nazwisko FROM czytelnicy;

Deux lectrices différentes portent le même prénom et le même nom : Anna Nowak de Cracovie et Anna Nowak de Gdańsk. Il y a aussi Jan Nowak. Voici le début du résultat :

imienazwisko
AnnaNowak
JanKowalski
AnnaNowak
PiotrWiśniewski
EwaZielińska
JanNowak
……

Maintenant, la même requête avec DISTINCT :

1SELECT DISTINCT imie, nazwisko FROM czytelnicy;

La seconde « Anna Nowak » a disparu, car elle a le même prénom et le même nom que la première ligne :

imienazwisko
AnnaNowak
JanKowalski
PiotrWiśniewski
EwaZielińska
JanNowak
……

Remarque trois choses. De deux lignes identiques, il en reste une - elles ne disparaissent pas toutes les deux. Jan Nowak reste, bien qu'il porte le même nom qu'Anna, car son prénom est différent : une ligne disparaît seulement quand le prénom et le nom réunis se répètent dans une autre ligne. Et DISTINCT ne voit que les champs de la liste - nous n'avons pas choisi la ville, donc deux Anna différentes se sont fondues en une seule ligne. Sur seize lignes, il en reste quinze.

Où se place DISTINCT ?

On écrit DISTINCT une seule fois, juste après SELECT, et il s'applique à tous les champs de la liste. Écrire SELECT imie, DISTINCT nazwisko FROM czytelnicy; est une erreur de syntaxe - on ne peut pas tamiser une colonne et laisser l'autre intacte.

Utilisations courantes

  • De quelles villes viennent les lecteurs ? → SELECT DISTINCT miasto FROM czytelnicy;
  • Quels pays d'origine avons-nous pour les auteurs ? → SELECT DISTINCT kraj FROM autorzy;

Mon conseil : quand une demande dit « quels sont… », « de quels… » ou « sans répétitions », pense à DISTINCT. Souviens-toi aussi que DISTINCT ne trie pas. Les pays sont sortis par ordre alphabétique uniquement parce qu'ils sont rangés ainsi sur le rayon. Dans la leçon « Tout ensemble », tu ajouteras un tri à DISTINCT pour en être sûr.

DISTINCT est le tamis du scribe - il filtre les parchemins et ne garde que les fiches de catalogue uniques.

Tu as repéré une erreur dans cette leçon ?

Teste tes connaissances

Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.

  1. 1. À quoi sert le mot-clé DISTINCT dans une requête SELECT ?

  2. 2. Que supprime DISTINCT quand on lui donne plusieurs colonnes, par exemple « SELECT DISTINCT imie, nazwisko FROM czytelnicy; » ?

Tâches pratiques dans le jeu

  • Éditeur de code

    Écris une requête qui récupère les valeurs uniques de la colonne miasto de la table czytelnicy (sans répétitions).

  • Tri horizontal

    Ordonne les éléments dans le bon ordre pour construire une requête sur les pays uniques des auteurs (de gauche à droite) :

  • Éditeur de code

    Écris une requête qui récupère les valeurs uniques de la colonne kraj de la table autorzy (sans répétitions).