Diferencia entre Select Unique y Select Distinct

145

Pensé que eran sinónomos, pero escribí lo siguiente en Microsoft SQL:

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

Y falló. Cambiándolo a

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

arreglado. Alguien puede explicar?

usuario42712
fuente

Respuestas:

169

SELECT UNIQUEes una sintaxis antigua compatible con el sabor de SQL de Oracle. Es sinónimo de SELECT DISTINCT.

Úselo SELECT DISTINCTporque este es SQL estándar, y SELECT UNIQUEno es estándar, y en marcas de bases de datos que no sean Oracle, SELECT UNIQUEpuede no ser reconocido en absoluto.

Bill Karwin
fuente
113

Único es una palabra clave utilizada en la directiva Crear tabla () para indicar que un campo contendrá datos únicos, generalmente utilizados para claves naturales, claves externas, etc.

Por ejemplo:

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) 
)

es decir, el Número de Seguro Social de alguien probablemente sea un campo único en su tabla, pero no necesariamente la clave principal.

Distinct se usa en la instrucción Select para notificar a la consulta que solo desea que se devuelvan los elementos únicos cuando un campo contiene datos que pueden no ser únicos.

Select Distinct Emp_LName
From Employee

Es posible que tenga muchos empleados con el mismo apellido, pero solo desea cada apellido diferente.

Obviamente, si el campo que está consultando contiene datos únicos, entonces la palabra clave Distinct se vuelve superflua.

BenAlabastro
fuente
2
Es posible que desee que los números de seguridad social sean únicos, pero no lo son. Por ejemplo: dailyfinance.com/2010/08/12/…
aij
18

select unique no es una sintaxis válida para lo que está intentando hacer

desea utilizar seleccionar distintivo o seleccionar distinctrow

Y en realidad, ni siquiera necesita una distinción / distinción en lo que está tratando de hacer. Puede eliminar duplicados eligiendo los parámetros de declaración de unión apropiados.

la consulta a continuación por sí sola solo proporcionará valores distintos

select col from table1 
union 
select col from table2

si quisieras duplicados tendrías que hacer

select col from table1 
union all
select col from table2
mson
fuente
1
si no me equivoco, Oracle te permite decirlo select unique..., aunque preferiría hacerlo de la manera estándar.
pide
3

Solo en Oracle =>

SELECT DISTINCTy SELECT UNIQUEcomportarse de la misma manera. Si bien DISTINCT es el estándar ANSI SQL, UNIQUE es una declaración específica de Oracle.

En otras bases de datos (como sql-server en su caso) =>

SELECT UNIQUEes una sintaxis no válida UNIQUEes una palabra clave para agregar una restricción única en la columna.

SELECCIONAR DISTINTO

Somnath Muluk
fuente
0
  1. Unique era la sintaxis anterior, mientras que Distinct es la nueva sintaxis, que ahora es la sql estándar.
  2. Unique crea una restricción de que todos los valores a insertar deben ser diferentes de los demás. Se puede presenciar un error si se intenta ingresar un valor duplicado. Distintos resultados en la eliminación de las filas duplicadas al recuperar datos.
  3. Ejemplo: SELECT DISTINCT nombres del estudiante;

    CREAR TABLA Personas (Id varchar NO NULL ÚNICO , Nombre varchar (20));

aashna mahajan
fuente