Różnica między Select Unique i Select Distinct

145

Myślałem, że to synonomia, ale napisałem w Microsoft SQL:

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

I to się nie udało. Zmieniam to na

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

naprawione. Czy ktoś może wyjaśnić?

user42712
źródło

Odpowiedzi:

169

SELECT UNIQUEto stara składnia obsługiwana przez język SQL firmy Oracle. Jest synonimem SELECT DISTINCT.

Użyj, SELECT DISTINCTponieważ jest to standardowy SQL i SELECT UNIQUEjest niestandardowy, aw bazach danych innych marek niż Oracle SELECT UNIQUEmoże w ogóle nie być rozpoznawany.

Bill Karwin
źródło
113

Unique to słowo kluczowe używane w dyrektywie Create Table () do oznaczenia, że ​​pole będzie zawierało unikalne dane, zwykle używane dla kluczy naturalnych, kluczy obcych itp.

Na przykład:

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

tj. czyjś numer ubezpieczenia społecznego prawdopodobnie byłby unikalnym polem w Twojej tabeli, ale niekoniecznie kluczem podstawowym.

Distinct jest używany w instrukcji Select, aby powiadomić zapytanie, że unikalne elementy mają być zwracane tylko wtedy, gdy pole zawiera dane, które mogą nie być unikalne.

Select Distinct Emp_LName
From Employee

Możesz mieć wielu pracowników o tym samym nazwisku, ale chcesz mieć tylko inne nazwisko.

Oczywiście, jeśli pole, którego dotyczy zapytanie, zawiera unikalne dane, słowo kluczowe Distinct staje się zbędne.

BenAlabaster
źródło
2
Możesz chcieć, aby numery ubezpieczenia społecznego były niepowtarzalne, ale tak nie jest. Np .: dailyfinance.com/2010/08/12/…
aij
18

select unique jest nieprawidłową składnią dla tego, co próbujesz zrobić

chcesz użyć albo wybierz odrębne, albo wybierz odrębny wiersz

W rzeczywistości nie potrzebujesz nawet wyraźnego / wyraźnego postępu w tym, co próbujesz zrobić. Możesz wyeliminować duplikaty, wybierając odpowiednie parametry instrukcji składającej.

poniższe zapytanie samo w sobie zapewni tylko różne wartości

select col from table1 
union 
select col from table2

jeśli chcesz mieć duplikaty, musisz to zrobić

select col from table1 
union all
select col from table2
mson
źródło
1
jeśli się nie mylę, Oracle pozwala ci powiedzieć select unique..., chociaż wolałbym postępować zgodnie ze standardami.
asgs
3

Tylko w Oracle =>

SELECT DISTINCTi SELECT UNIQUEzachowuj się w ten sam sposób. Chociaż DISTINCT jest standardem ANSI SQL, UNIQUE jest instrukcją specyficzną dla Oracle.

W innych bazach danych (jak w twoim przypadku sql-server) =>

SELECT UNIQUEma nieprawidłową składnię. UNIQUEjest słowem kluczowym służącym do dodawania unikalnego ograniczenia w kolumnie.

SELECT DISTINCT

Somnath Muluk
źródło
0
  1. Unique to stara składnia, podczas gdy Distinct to nowa składnia, która jest teraz standardowym sql.
  2. Unique tworzy ograniczenie, że wszystkie wartości do wstawienia muszą różnić się od pozostałych. Próba wprowadzenia zduplikowanej wartości może spowodować wystąpienie błędu. Wyraźne powoduje usunięcie zduplikowanych wierszy podczas pobierania danych.
  3. Przykład: SELECT DISTINCT names FROM student;

    UTWÓRZ TABELĘ Osoby (Id varchar NOT NULL UNIQUE , Name varchar (20));

aashna mahajan
źródło