Retour à la liste des articles Articles
5 minutes de lecture

Quelle est la différence entre UNIQUE et DISTINCT en SQL ?

Nous utilisons les mots unique et distinct de manière interchangeable dans notre vie de tous les jours. Cependant, ces mots jouent des rôles très différents en SQL. Découvrons ce qui les différencie et comment nous pouvons les utiliser en SQL.

Bien que les mots "unique" et "distinct" soient des synonymes, ils recouvrent des choses très différentes en SQL. Le mot-clé UNIQUE en SQL joue le rôle d'une contrainte de base de données ; il garantit qu'il n'y a pas de valeurs en double stockées dans une colonne particulière ou un ensemble de colonnes. D'autre part, le mot-clé DISTINCT est utilisé dans l'instruction SELECT pour extraire des lignes distinctes d'une table.

Le meilleur endroit pour apprendre à connaître SQL et les bases de données est LearnSQL.com. Il s'agit d'une plateforme en ligne conçue pour vous aider à maîtriser tous les sujets relatifs aux bases de données. Elle propose plus de 30 cours SQL, y compris une piste complète Le SQL de A à Z avec le parcours d'apprentissage interactif complet de SQL ou Creating Database Structure qui vous apprend les contraintes des bases de données comme UNIQUE.

Examinons de plus près les mots-clés UNIQUE et DISTINCT en SQL.

Le mot-clé DISTINCT en SQL

Le mot-clé DISTINCT en SQL est utilisé avec l'instruction SELECT. En utilisant SELECT immédiatement suivi du mot-clé DISTINCT, toutes les lignes en double sont supprimées du jeu de résultats.

Voyons un exemple de DISTINCT en action.

On nous donne la table Cars qui contient les informations sur la marque et le modèle de certaines voitures :

IdBrandModelProductionYear
AQ16AudiQ72011
FK19FordKuga2019
JC07JeepCherokee2012
JW15JeepWrangler2015
TS14TeslaModel S2014
TY20TeslaModel Y2020

Exécutons une simple instruction SELECT pour obtenir toutes les marques de voitures produites après 2011 :

SELECT Brand 
FROM Cars 
WHERE ProductionYear > 2011;

Le résultat de la requête ci-dessus est le suivant.

Brand
Ford
Jeep
Jeep
Tesla
Tesla

Comme vous pouvez le constater, nous avons des valeurs en double pour Jeep et Tesla. Que faire si nous voulons un seul enregistrement pour chaque valeur ? Nous utilisons le mot-clé DISTINCT:

SELECT DISTINCT Brand 
FROM Cars 
WHERE ProductionYear > 2011;

Et le résultat est...

Brand
Ford
Jeep
Tesla

Vous voyez maintenant combien il est facile et pratique d'utiliser le mot-clé DISTINCT.

Pour en savoir plus sur le mot-clé DISTINCT en SQL, consultez notre article intitulé " Quel est le rôle de DISTINCT en SQL ?

Le mot-clé UNIQUE en SQL

Le mot-clé UNIQUE en SQL marque l'une de ses contraintes de base de données. En utilisant la contrainte UNIQUE sur une colonne ou un ensemble de colonnes, vous pouvez empêcher que des valeurs en double soient stockées dans cette colonne ou cet ensemble (c'est-à-dire que la combinaison des valeurs des colonnes doit être unique, même si chaque valeur peut apparaître plusieurs fois dans la même colonne).

Voyons la contrainte UNIQUE en action. Nous allons créer une Person qui stocke le nom, le numéro de sécurité sociale et la nationalité d'une personne.

CREATE TABLE Person (
	RowId INTEGER PRIMARY KEY,
	FirstName varchar(50),
	LastName varchar(50),
	SSN varchar(20) UNIQUE,
	Nationality varchar(30)
);

Ici, la colonne SSN ne doit stocker que des valeurs non dupliquées ; c'est pourquoi la définition de cette colonne contient le mot clé UNIQUE, qui lui impose la contrainte UNIQUE.

Pour vous entraîner davantage à la création de tables et à la conception de bases de données, consultez notre rubrique consacrée à la création d'une structure de base de données. Elle comprend les bases de la création de tables, les types de données SQL, les contraintes, etc. Pour en savoir plus sur cette piste, lisez cet article.

Insérons maintenant quelques valeurs dans la table Person dans la table.

INSERT INTO Person VALUES (1, 'John', 'Black', '321456987123', 'American');
INSERT INTO Person VALUES (2, 'Isabella', 'Sanchez', '987456345123', 'Spanish');
INSERT INTO Person VALUES (3, 'Klaus', 'Schmidt', '987456345123', 'German');

Nous obtenons une erreur à la troisième instruction INSERT. Pourquoi ? Parce qu'une contrainte UNIQUE a été définie sur la colonne SSN; par conséquent, la même valeur ne peut pas apparaître deux fois dans la colonne SSN. Isabella et Klaus ont tous deux la même valeur SSN, nous obtenons donc un message d'erreur. Nous n'avons pas respecté les règles fixées par la contrainte UNIQUE.

Si nous changeons la dernière déclaration de INSERT en...

INSERT INTO Person VALUES (3, 'Klaus', 'Schmidt', '876456345123', 'German');

... elle est acceptée dans la table. Après avoir exécuté les trois instructions de INSERT, y compris la troisième instruction corrigée, la Person tableau ressemble à ceci :

RowIdFirstNameLastNameSSNNationality
1JohnBlack321456987123American
2IsabellaSanchez987456345123Spanish
3KlausSchmidt876456345123German

La contrainte UNIQUE empêche l'ajout de INSERTs ou UPDATEs à une table qui entraîne des valeurs en double dans la colonne ou l'ensemble de colonnes qui met en œuvre la contrainte.

Ainsi, le tableau ci-dessous viole la contrainte UNIQUE appliquée à la colonne SSN...

RowIdFirstNameLastNameSSNNationality
1JohnBlack321456987123American
2IsabellaSanchez987456345123Spanish
3KlausSchmidt987456345123German

...et ce tableau obéit à la contrainte UNIQUE définie sur la colonne SSN.

RowIdFirstNameLastNameSSNNationality
1JohnBlack321456987123American
2IsabellaSanchez987456345123Spanish
3KlausSchmidt876456345123German

Vous pouvez définir la contrainte UNIQUE pendant la création de la table, comme c'est le cas ici, ou après la création de la table. La contrainte UNIQUE peut également être modifiée ou supprimée ultérieurement. Pour savoir comment procéder, consultez l'article Qu'est-ce qu'une contrainte unique en SQL ? Nous proposons également un cours interactif sur les contraintes SQL pour vous aider à comprendre les différentes contraintes que SQL met à votre disposition.

Tout bien considéré : UNIQUE et DISTINCT en SQL

Nous avons défini les mots-clés UNIQUE et DISTINCT. Mais quelles sont les différences réelles entre eux ?

Le mot-cléUNIQUE marque une contrainte de base de données et est défini lors de la création d'une table ou ultérieurement sur une colonne spécifique ou un ensemble de colonnes. Le mot-cléDISTINCT est utilisé lors de l'extraction du jeu de résultats de la base de données. Il suit directement lemot-cléSELECT lorsque nous voulons nous assurer que toutes les lignes de l'ensemble de résultats contiennent des valeurs distinctes ou un ensemble distinct de valeurs.

Nous savons qu'il est toujours bon d'avoir le plus de pratique possible. Exercices Pratiques de SQL qui vous aidera à apprendre et à pratiquer toutes les différentes fonctionnalités offertes par SQL. Pour vous motiver, consultez notre article sur les Exercices Pratiques de SQL.

Bonne chance !