Retour à la liste des articles Articles
7 minutes de lecture

Quel est le rôle de DISTINCT en SQL ?

Le mot-clé DISTINCT en SQL joue un rôle important dans la suppression des valeurs en double dans vos résultats. Cet article fournit des exemples montrant exactement comment DISTINCT fonctionne.

Par défaut, les requêtes SQL affichent toutes les lignes retournées, y compris les lignes en double, dans le jeu de résultats. Le mot clé DISTINCT dans la clause SELECT est utilisé pour éliminer les lignes en double et afficher une liste unique de valeurs. En d'autres termes, le mot clé DISTINCT permet de récupérer des valeurs uniques dans une table.

La syntaxe de base du mot-clé DISTINCT en SQL est la suivante :

SELECT DISTINCT
  column_1,
  column_2,
  …,
  column_n
FROM table_name

(Si vous trouvez la syntaxe ci-dessus déroutante, envisagez le cours LearnSQL.fr' SQL pour les débutants . Il couvre les principes fondamentaux de SQL, y compris le mot-clé DISTINCT ).

Notez que le mot-clé DISTINCT doit être placé avant les colonnes que vous spécifiez. Vous pouvez spécifier plus d'une colonne pour être DISTINCT, ce qui fera que SQL ne retournera que des combinaisons uniques des valeurs de ces colonnes. Si vous sélectionnez plus d'une colonne, toutes les colonnes sont combinées et seule l'unicité de la ligne sera prise en compte. SQL DISTINCT recherche une ligne distincte, plutôt qu'une colonne distincte.

Voyons le mot-clé DISTINCT en action à l'aide d'un exemple pratique. Mais d'abord, nous devons nous familiariser avec les données avec lesquelles nous allons travailler. Imaginons que nous ayons une table appelée employee_infoqui contient des informations sur les employés de notre entreprise :

employee_idfirst_namelast_namedepartmentage
127374JoshuaReesSales26
293421KarenBowerSales45
244813LukePayneNULL42
463281MaxPaigeHuman Resources53
374241JuliaGloverHuman Resources29
568421RoseHarrisHuman Resources43
NULLNULLNULLNULLNULL
839211OliviaBakerSales32
293493KarenBowerSales45
463281MaxPaigeHuman Resources53
244813LukePayneNULL42
933821BernadetteParsonsSalesNULL

SQL DISTINCT sur une seule colonne

Voyons l'effet du mot-clé DISTINCT lorsque nous essayons de SELECT la colonne employee_id. Tout d'abord, voici la requête avant l'application du mot-clé DISTINCT:

SELECT employee_id
FROM employee_info

Le résultat est le suivant :

employee_id
127374
293421
244813
463281
374241
568421
NULL
839211
293493
463281
244813
933821

L'exécution de cette requête renvoie la totalité de la colonne employee_id de notre table. Cette colonne correspond exactement à la table employee_info exactement. En analysant de plus près, nous pouvons voir quelques valeurs en double - 244813 et 463281 apparaissent chacun deux fois.

Ajoutons le mot-clé DISTINCT pour traiter ces valeurs en double. Rappelez-vous que nous ajoutons le mot-clé DISTINCT avant de spécifier les colonnes :

SELECT DISTINCT employee_id 
FROM employee_info
employee_id
127374
293421
244813
463281
374241
568421
NULL
839211
293493
933821

Notre ensemble de données résultant semble plus court ; il y a plusieurs choses que nous pouvons apprendre de cette réponse.

SQL DISTINCT supprime les valeurs en double

Si nous comparons le tableau original à notre résultat, nous pouvons voir que les doublons ont été filtrés avec succès. L'utilisation du mot-clé DISTINCT n'est qu'une des méthodes permettant de supprimer les valeurs en double, comme le montre cet article sur les différentes façons de supprimer les doublons en SQL.

La table employee_info contient deux occurrences des valeurs suivantes :

employee_id
244813
463281

Cependant, notre résultat ne montre maintenant ces valeurs qu'une seule fois. Le mot-clé DISTINCT a eu l'effet désiré.

Faites attention aux colonnes utilisées

Lorsque vous consultez le tableau pour la première fois employee_info il semble que ces lignes soient des doublons.

employee_idfirst_namelast_namedepartmentage
293421KarenBowerSales45
293493KarenBowerSales45

En regardant de plus près, vous pouvez voir que la valeur de employee_id est différente. Comme nous avons appliqué le mot-clé DISTINCT à cette colonne employee_id, ces deux valeurs sont renvoyées.

L'inclusion de valeurs NULL

Vous avez probablement remarqué la présence de valeurs NULL dans l'ensemble de données retourné. En SQL, NULL est considéré comme une valeur unique, ce qui signifie qu'elle sera retournée lorsque vous utiliserez le mot-clé DISTINCT. Si vous souhaitez supprimer les valeurs NULL du résultat, vous pouvez écrire la requête suivante :

SELECT DISTINCT
  * 
FROM employee_info 
WHERE employee_id IS NOT NULL

SQL DISTINCT avec une sous-requête

Vous pouvez également utiliser le mot-clé DISTINCT dans le cadre d'une sous-requête. Toutefois, il convient de noter qu'une sous-requête IN, ANY ou EXISTS est évaluée à true s'il existe au moins une ligne qui entraîne l'évaluation de la sous-requête à true. Cela rend inutile l'utilisation de DISTINCT avec une sous-requête IN, ANY ou EXISTS.

SQL DISTINCT avec plusieurs colonnes

Les colonnes que vous spécifiez comme DISTINCT jouent un rôle clé dans les données renvoyées. Regardez la requête suivante :

SELECT DISTINCT
  employee_id,
  first_name,
  last_name 
FROM employee_info

Nous recherchons des combinaisons uniques de ces trois colonnes. L'exécution de cette requête donne le résultat suivant :

employee_idfirst_namelast_name
127374JoshuaRees
293421KarenBower
244813LukePayne
463281MaxPaige
374241JuliaGlover
568421RoseHarris
NULLNULLNULL
839211OliviaBaker
293493KarenBower
933821BernadetteParsons

En analysant cet ensemble de résultats, vous vous attendez peut-être à voir des noms tout à fait uniques accompagnés de leur employee_id. Par exemple, regardez ces données :

employee_idfirst_namelast_name
293421KarenBower
293493KarenBower

La valeur employee_id est unique pour les deux rangées, ce qui signifie que ces rangées sont également considérées comme uniques. Si nous modifions la requête comme suit :

SELECT DISTINCT
  first_name,
  last_name 
FROM employee_info

... employee_id n'est plus pris en compte ; nous recherchons maintenant des combinaisons uniques de noms. Ainsi, une seule ligne pour "Karen Bower" est affichée :

first_namelast_name
JoshuaRees
KarenBower
LukePayne
MaxPaige
JuliaGlover
RoseHarris
NULLNULL
OliviaBaker
BernadetteParsons

Si vous avez du mal à obtenir les résultats souhaités en utilisant le mot-clé DISTINCT, prêtez une attention particulière aux colonnes que vous avez incluses. Si cet exemple spécifique continue de vous perturber, consultez cet article sur la façon de compter les valeurs distinctes en SQL.

SQL DISTINCT avec les fonctions d'agrégation

Le mot-clé DISTINCT peut être utilisé avec des fonctions d'agrégation. Les fonctions d'agrégation les plus courantes sont :

  • MIN() - Renvoie la valeur la plus petite (minimale).
  • MAX() - Renvoie la valeur la plus grande (maximale).
  • SUM() - Renvoie la somme des valeurs spécifiées.
  • AVG() - Renvoie la moyenne des valeurs spécifiées (par exemple, dans une colonne).
  • COUNT() - Renvoie le nombre d'éléments (par exemple, dans une colonne).

Lorsque DISTINCT est utilisé avec SUM(), AVG(), et COUNT(), il élimine les valeurs en double avant le calcul de la somme, de la moyenne ou du nombre. Bien que vous puissiez utiliser le mot-clé DISTINCT avec MIN() et MAX(), il est inutile de le faire ; cela n'aura aucun impact sur les résultats.

Appliquons ces informations à notre exemple précédent concernant le tableau employee_info tableau. Si nous voulions compter le nombre d'employés travaillant actuellement dans notre entreprise tout en prenant soin de supprimer les entrées en double, nous écririons la requête suivante :

SELECT COUNT(DISTINCT employee_id)
FROM employee_info

Le résultat de cette requête est :

COUNT(DISTINCT employee_id)
9

Il s'agit de l'exemple le plus simple de l'utilisation du mot-clé DISTINCT avec les fonctions d'agrégation. L'exécution de cette requête sans le mot-clé DISTINCT inclurait des valeurs en double dans le compte :

SELECT COUNT(employee_id) 
FROM employee_info

Le résultat de cette requête est :

COUNT(employee_id)
11

Si vous pensez que votre table peut contenir des enregistrements en double, l'utilisation de DISTINCT est un excellent moyen de vous assurer que vos rapports sont précis et ne sont pas affectés par les valeurs en double. Si ce cas d'utilisation n'est pas clair pour vous, je vous recommande de lire cet article sur le comptage des valeurs distinctes en SQL. Il existe de nombreux autres cas d'utilisation de COUNT(); pour des exemples supplémentaires utiles, consultez cet article expliquant les différences entre les applications courantes de la fonctionCOUNT().

DISTINCT avec les fonctions d'agrégation et GROUP BY

Utilisons une fonction agrégée avec le mot-clé DISTINCT pour nous aider à résoudre un problème courant. Nous voulons trouver le nombre d'entrées potentielles en double sur employee_id pour chaque couple de noms dans notre table. Nous voulons isoler le cas où le nom de l'employé est exactement le même, mais avec un employee_id différent. Voici la requête :

SELECT
  first_name,
  last_name,
  COUNT(DISTINCT employee_id) 
FROM employee_info 
GROUP BY first_name, last_name

Et le résultat :

employee_idfirst_nameCOUNT (DISTINCT employee_id)
NULLNULL0
BernadetteParsons1
JoshuaRees1
JuliaGlover1
KarenBower2
LukePayne1
MaxPaige1
OliviaBaker1
RoseHarris1

Nous pouvons voir dans ces résultats que nous avons deux entrées différentes pour le employee_id de Karen Bower . C'est une excellente information à avoir. S'il n'y a pas deux personnes différentes nommées Karen Bower travaillant dans notre entreprise, nous savons que cette information a été saisie par erreur et peut être considérée comme un doublon à supprimer.

L'apprentissage de DISTINCT en SQL n'est qu'un début !

La capacité d'isoler et d'exclure les données en double des résultats de vos requêtes est une compétence importante pour tous les utilisateurs de SQL. Le mot-clé DISTINCT joue un rôle important dans votre capacité à le faire efficacement. Si cet article vous a plu et que vous souhaitez poursuivre votre apprentissage de SQL, envisagez notre parcours d'apprentissage Les Fondamentaux de SQL . Vous y apprendrez les instructions SQL de base telles que WHERE, GROUP BY, ORDER BY et HAVING. Vous apprendrez également à JOIN tables et à ajouter, modifier ou supprimer des données d'une base de données.