Різниця між Select Select Unique та Select Distinct


145

Я вважав, що вони є синономічними, але я написав наступне в Microsoft SQL:

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

І не вдалося. Змінивши його на

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

виправили це. Може хтось пояснить?

Відповіді:


169

SELECT UNIQUEце старий синтаксис, підтримуваний ароматом OQL від Oracle. Це синонім до SELECT DISTINCT.

Використовуйте, SELECT DISTINCTоскільки це стандартний SQL і SELECT UNIQUEнестандартний, а в брендах баз даних, окрім Oracle, SELECT UNIQUEможе взагалі не розпізнаватися.


113

Унікальний - це ключове слово, яке використовується в директиві Створити таблицю () для позначення того, що поле буде містити унікальні дані, зазвичай використовуються для природних ключів, зовнішніх ключів тощо.

Наприклад:

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

тобто чийсь номер соціального страхування, ймовірно, буде унікальним полем у вашій таблиці, але не обов’язково первинним ключем.

У операторі Select виокремлюється повідомлення про те, що ви хочете, щоб унікальні елементи поверталися лише тоді, коли в полі зберігаються дані, які можуть бути не унікальними.

Select Distinct Emp_LName
From Employee

У вас може бути багато співробітників з тим самим прізвищем, але ви хочете лише кожного різного прізвища.

Очевидно, якщо поле, яке ви запитуєте, містить унікальні дані, то ключове слово Distinct стає зайвим.


2
Можливо, ви хочете, щоб номери соціального страхування були унікальними, але вони не є. Напр .: dailyfinance.com/2010/08/12/…
aij

18

виберіть унікальний синтаксис, який не є дійсним для того, що ви намагаєтеся зробити

ви хочете використовувати або виділити окремий, або виділити розрізнення

Насправді вам навіть не потрібно чіткого / чіткого поглиблення в тому, що ви намагаєтеся зробити. Ви можете усунути дублікати, вибравши відповідні параметри оператора об'єднання.

нижченаведений запит сам по собі дасть лише чіткі значення

select col from table1 
union 
select col from table2

якби ви хотіли дублікатів, вам доведеться це зробити

select col from table1 
union all
select col from table2

1
якщо я не помиляюсь, Oracle дозволяє вам сказати select unique..., хоча я вважаю за краще робити стандартний спосіб.
асгс

3

Тільки в Oracle =>

SELECT DISTINCT і SELECT UNIQUE поводитись однаково. Хоча DISTINCT є стандартом ANSI SQL, UNIQUE є специфічним для Oracle твердженням.

В інших базах даних (наприклад, sql-сервер у вашому випадку) =>

SELECT UNIQUEнедійсний синтаксис. UNIQUE- це ключове слово для додавання унікальних обмежень у стовпчик.

ВИБІР ВИДАЛЕННЯ


0
  1. Унікальним був старий синтаксис, тоді як Distinct - новий синтаксис, який зараз є Standard sql.
  2. Унікальний створює обмеження, що всі значення, які потрібно вставити, повинні відрізнятися від інших. Про помилку можна засвідчити, якщо спробувати ввести повторюване значення. Виразні результати призводять до видалення повторюваних рядків під час отримання даних.
  3. Приклад: ВИБІРТЕ ІМЕНТИ ДИСТИНЦТУ ВІД студента;

    СТВОРИТИ ТАБЛИЦІ Особи (Id varchar NOT NULL UNIQUE , Name varchar (20));

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.