Lorsque l’on récupère des données dans une base de données SQL, on utilise l’instruction SELECT. Cependant, outre cette commande de base, celle-ci doit être associée à d’autres instructions afin d’obtenir des résultats précis. Le mot-clé SQL DISTINCT est utilisé avec SELECT dans le but d’éliminer les doublons et ainsi d’obtenir une valeur unique. Dans ce tutoriel, vous allez découvrir comment utiliser la commande SELECT DISTINCT pour les tries des données dans un Système de Gestion de Base de Donnée MySQL.

La commande SQL DISTINCT 

Comme nous l’avons mentionné ci-dessus, en SQL, la commande SELECT permet de charger toutes les données d’une table sans distinction. Dans ce cas-ci, il est possible d’avoir des lignes en doublon. Pour éviter ces doublons, il faut juste ajouter DISTINCT après le mot SELECT.

Voici la syntaxe à utiliser pour cela :

SELECT DISTINCT ma_colonne FROM nom_du_tableau

Avec cette commande, vous obtenez les données dans la colonne ma_colonne de la table nom_de_table

SQL DISTINCT sur Oracle

Si vous utilisez Oracle comme système de Gestion de Base de Données (SGBD), le mot DISTINCT est remplacé par UNIQUE, comme dans la syntaxe ci-dessous :

SELECT UNIQUE ma_colonne FROM nom_du_tableau

Illustration de SQL DISTINCT

Nous allons illustrer cette instruction avec un exemple. Pour cela, considérons une table client comportant les noms et prénoms de chaque individu et récupérons les prénoms à l’aide de la requête suivante :

SELECT prenom FROM client
table-client-prenom

Vous pouvez remarquer que la commande retourne tous les noms, même les doublons. Le prénom Pierre est apparu 3 fois. Pour ne pas les afficher plusieurs fois, il faut donc insérer le mot DISTINCT dans la commande, comme ceci :

SELECT DISTINCT Prenom FROM client
select-distinct-prenom

Note : Vous pouvez utiliser l’instruction SELECT DISTINCT FROM sur une seule colonne ou un ensemble de colonnes liées.

Utilisation de DISTINCT dans les agrégations

Il est possible d’utiliser SQL DISTINCT dans l’exécution d’une agrégation. Les agrégations sont les fonctions permettant d’effectuer des opérations mathématiques ou statistiques sur un ensemble d’enregistrement. On utilise DISTINCT le plus souvent avec la fonction COUNT.

Par exemple, l’instruction ci-dessous compte et donne en retour le nombre des valeurs uniques dans la colonne nom :

SELECT COUNT(DISTINCT nom) AS Nombre FROM employe
sql-distinct-agregation

Le résultat montre qu’il existe 9 valeurs uniques dans la table employe.

Utilisation de DISTINCT avec plusieurs colonnes

Il est tout à fait possible d’utiliser DISTINCT dans la sélection de plusieurs colonnes. Afin d’expliquer son fonctionnement, prenons la requête qui suit :

SELECT nom, Prenom FROM `employe` 

Cette instruction renvoie tous les noms et prénoms présents dans la table.

select-colonnes

Maintenant, modifions légèrement cette requête en ajoutant la clause DISTINCT :

SELECT DISTINCT nom, Prenom FROM `employe` 
select-distinct-colonnes

Ici, vous pouvez remarquer que l’instruction retourne le nom et le prénom distincts de tous les clients.

SQL DISTINCT avec GROUP BY ET ORDER BY

On peut utiliser les instructions GROUP BY et ORDER BY pour obtenir des résultats équivalents à DISTINCT. Prenons par exemple cette requête :

SELECT nom, Prenom FROM `employe` GROUP BY nom, Prenom ORDER BY nom, Prenom

Cette instruction utilise la clause GROUP BY pour donner en retour des noms distincts avec le prénom.

group-by-order-by

Cette requête est équivalente à la requête qui utilise l’opérateur DISTINCT :

SELECT DISTINCT nom, Prenom FROM `employe` 

DISTINCT et les valeurs nulles

Lorsque DISTINCT trouve dans une colonne plusieurs lignes de valeur nulle, il les traite comme des doublons les uns des autres. De ce fait, dans une colonne comportant plusieurs valeurs nulles, l’instruction qui inclut DISTINCT retournera une valeur nulle.

Pour résumer, la clause DISTINCT renvoie une seule valeur unique des données fournies même s’il y a plusieurs données identiques. La clause DISTINCT n’ignore pas la valeur nulle comme le font certaines clauses en SQL. Maintenant, vous pouvez utiliser cette clause afin d’obtenir des résultats uniques et précis.

Nous terminons cet article ici. Si vous souhaitez apprendre plus d’instructions SQL, il existe plusieurs articles sur ce sujet sur notre blog. Nous vous invitons également à télécharger cette formation sur Spark avec le langage Scala si vous souhaitez en apprendre davantage sur le domaine du Big Data.


Juvénal JVC

Juvénal est spécialisé depuis 2011 dans la valorisation à large échelle des données. Son but est d'aider les professionnels de la data à développer les compétences indispensables pour réussir dans le Big Data. Il travaille actuellement comme Lead Data Engineer auprès des grands comptes. Lorsqu'il n'est pas en voyage, Juvénal rédige des livres ou est en train de préparer la sortie d'un de  ses livres. Vous pouvez télécharger un extrait de son dernier livre en date ici : https://www.data-transitionnumerique.com/extrait-ecosystme-hadoop/

  • Eyecom dit :

    je me demandé si avec un join avec plusieurs table ca marcherait ???

    • Juvénal JVC dit :

      Bonjour, de quelle jointure parlez-vous ? Quel est le cas d’usage ?

  • >