Leçon 4 / 17

Éviter les lignes répétées dans un résultat

12 min SQL — interroger une base de données Gratuit

Objectif : Produire une liste de valeurs uniques lorsque plusieurs lignes contiennent la même valeur.

Une requête peut afficher plusieurs fois la même valeur, même si elle répond correctement à votre demande. Par exemple, plusieurs œuvres peuvent partager le même type, ou plusieurs emprunts peuvent concerner le même adhérent. Avec DISTINCT, vous demandez à MariaDB de ne conserver qu’une occurrence de chaque résultat distinct.

Repérer les répétitions dans une liste

Dans le schéma de la médiathèque, la colonne type_oeuvre décrit le type d’une œuvre. Si plusieurs œuvres sont des livres, une requête qui affiche cette colonne peut produire plusieurs lignes contenant le mot « livre ». Cela n’indique pas nécessairement une erreur : chaque ligne correspond à une œuvre différente, mais la valeur affichée se répète.

SQL
-- Afficher les types d’œuvre présents, sans répétition
SELECT DISTINCT type_oeuvre
FROM oeuvres;
Résultat attendu
Le résultat contient une ligne par valeur distincte de type_oeuvre. Par exemple, si plusieurs œuvres sont des livres, « livre » n’apparaît qu’une seule fois.

DISTINCT se place juste après SELECT, avant les colonnes que vous voulez afficher. La requête conserve les colonnes indiquées et écarte les lignes dont les valeurs sélectionnées sont identiques. Vous retrouvez ainsi les catégories réellement présentes, plutôt qu’une ligne par œuvre.

L’unicité porte sur les colonnes sélectionnées

Lorsque vous sélectionnez plusieurs colonnes, MariaDB compare leurs valeurs ensemble. Avec DISTINCT nom, prenom, deux lignes sont répétées uniquement si le nom et le prénom sont tous les deux identiques. Un même prénom associé à des noms différents reste donc présent dans plusieurs lignes, et un même nom associé à des prénoms différents aussi.

SQL
-- Afficher les couples nom-prénom présents dans les emprunts
SELECT DISTINCT a.nom, a.prenom
FROM emprunts AS e
INNER JOIN adherents AS a
    ON e.id_adherent = a.id_adherent;
Résultat attendu
Chaque couple nom-prénom correspondant à au moins un emprunt apparaît une seule fois, même si l’adhérent a emprunté plusieurs exemplaires.

Cette deuxième requête reprend la liaison entre les emprunts et les adhérents vue dans la leçon précédente. Comme elle ne sélectionne que le nom et le prénom, les emprunts multiples d’un même adhérent ne créent pas plusieurs couples identiques dans le résultat. Si deux adhérents partagent le même nom et le même prénom, leur couple sera également regroupé : ces colonnes ne permettent pas de les distinguer.

Mettre à jour le fichier de requêtes

Ajoutez les requêtes ci-dessous à la suite des quatre requêtes déjà présentes dans requetes.sql. Le fichier conserve ainsi les sélections simples des leçons précédentes, les deux jointures, puis les deux requêtes avec DISTINCT. Les commentaires indiquent le but de chaque requête sans modifier son résultat.

Contenu complet de requetes.sql après cette leçonSQL
-- Afficher les informations principales des adhérents
SELECT nom, prenom, date_inscription
FROM adherents;

-- Afficher les identifiants et les courriels des adhérents
SELECT id_adherent, courriel
FROM adherents;

-- Associer chaque emprunt à l'adhérent concerné
SELECT e.id_emprunt, a.nom, a.prenom
FROM emprunts AS e
INNER JOIN adherents AS a
    ON e.id_adherent = a.id_adherent;

-- Afficher l'adhérent et l'exemplaire de chaque emprunt
SELECT e.id_emprunt, a.nom, a.prenom, x.code_barres
FROM emprunts AS e
INNER JOIN adherents AS a
    ON e.id_adherent = a.id_adherent
INNER JOIN exemplaires AS x
    ON e.id_exemplaire = x.id_exemplaire;

-- Afficher chaque type d’œuvre une seule fois
SELECT DISTINCT type_oeuvre
FROM oeuvres;

-- Afficher chaque couple nom-prénom emprunteur une seule fois
SELECT DISTINCT a.nom, a.prenom
FROM emprunts AS e
INNER JOIN adherents AS a
    ON e.id_adherent = a.id_adherent;

Les résultats précis dépendent des données chargées dans votre base. Pour vérifier la logique, regardez surtout le nombre de lignes répétées : le type d’œuvre ne doit apparaître qu’une fois par valeur, et le couple nom-prénom qu’une fois par combinaison identique. Ne confondez pas cette déduplication avec une identification garantie : seul un identifiant sélectionné permet de distinguer des personnes dont les noms et prénoms sont identiques.

À retenir

  • DISTINCT s’écrit juste après SELECT.
  • Il supprime les répétitions dans les valeurs sélectionnées, sans changer les colonnes demandées.
  • Avec plusieurs colonnes, l’unicité porte sur leur combinaison complète.
  • Sélectionnez un identifiant si vous devez distinguer des lignes qui partagent les mêmes valeurs descriptives.

Dans la prochaine leçon, vous ajouterez une condition pour ne conserver que les lignes qui répondent à un critère précis.

Envie d'aller plus loin ?

Les cours Enovatic sont gratuits et le resteront. Si vous cherchez un accompagnement encadré, nos formations professionnelles sont animées par les mêmes formateurs.