Différence entre Select Unique et Select Distinct

145

Je pensais que c'était synonyme, mais j'ai écrit ce qui suit dans Microsoft SQL:

Select Unique col from 
     (select col from table1 union select col from table2) alias

Et cela a échoué. Le changer en

Select Distinct col from 
     (select col from table1 union select col from table2) alias

réparé. Quelqu'un peut-il expliquer?

user42712
la source

Réponses:

169

SELECT UNIQUEest une ancienne syntaxe prise en charge par la version Oracle de SQL. C'est synonyme de SELECT DISTINCT.

À utiliser SELECT DISTINCTcar il s'agit de SQL standard et SELECT UNIQUEnon standard, et dans les marques de base de données autres qu'Oracle, SELECT UNIQUEpeut ne pas être reconnu du tout.

Bill Karwin
la source
113

Unique est un mot-clé utilisé dans la directive Create Table () pour indiquer qu'un champ contiendra des données uniques, généralement utilisées pour les clés naturelles, les clés étrangères, etc.

Par exemple:

Create Table Employee(   
    Emp_PKey Int Identity(1, 1) Constraint PK_Employee_Emp_PKey Primary Key,  
    Emp_SSN Numeric Not Null Unique,  
    Emp_FName varchar(16),   
    Emp_LName varchar(16) 
)

c'est-à-dire que le numéro de sécurité sociale de quelqu'un serait probablement un champ unique dans votre table, mais pas nécessairement la clé primaire.

Distinct est utilisé dans l'instruction Select pour informer la requête que vous ne souhaitez que les éléments uniques renvoyés lorsqu'un champ contient des données qui peuvent ne pas être uniques.

Select Distinct Emp_LName
From Employee

Vous pouvez avoir plusieurs employés avec le même nom de famille, mais vous ne voulez que chaque nom de famille différent.

Évidemment, si le champ que vous interrogez contient des données uniques, le mot-clé Distinct devient superflu.

BenAlabaster
la source
2
Vous voudrez peut-être que les numéros de sécurité sociale soient uniques, mais ils ne le sont pas. Par exemple: dailyfinance.com/2010/08/12/…
aij
18

select unique n'est pas une syntaxe valide pour ce que vous essayez de faire

vous voulez utiliser soit select distinct, soit select distinctrow

Et en fait, vous n'avez même pas besoin de ligne distincte / distincte dans ce que vous essayez de faire. Vous pouvez éliminer les doublons en choisissant les paramètres appropriés de l'instruction union.

la requête ci-dessous en elle-même ne fournira que des valeurs distinctes

select col from table1 
union 
select col from table2

si vous vouliez des doublons, vous devrez faire

select col from table1 
union all
select col from table2
mson
la source
1
si je ne me trompe pas, Oracle vous permet de le dire select unique..., bien que je préfère faire de la manière standard.
asgs
3

Uniquement dans Oracle =>

SELECT DISTINCTet SELECT UNIQUEse comportent de la même manière. Alors que DISTINCT est la norme SQL ANSI, UNIQUE est une instruction spécifique à Oracle.

Dans d'autres bases de données (comme sql-server dans votre cas) =>

SELECT UNIQUEest une syntaxe invalide. UNIQUEest un mot clé pour ajouter une contrainte unique sur la colonne.

CHOISIR DISTINCT

Somnath Muluk
la source
0
  1. Unique était l'ancienne syntaxe tandis que Distinct est la nouvelle syntaxe, qui est maintenant le SQL standard.
  2. Unique crée une contrainte selon laquelle toutes les valeurs à insérer doivent être différentes des autres. Une erreur peut être constatée si l'on essaie d'entrer une valeur en double. Distinct entraîne la suppression des lignes en double lors de la récupération des données.
  3. Exemple: SELECT DISTINCT noms FROM étudiant;

    CREATE TABLE Persons (Id varchar NOT NULL UNIQUE , Name varchar (20));

aashna mahajan
la source