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 UNIQUEOracleのSQLでサポートされている古い構文です。と同義SELECT DISTINCTです。

SELECT DISTINCTこれは標準SQLであり、SELECT UNIQUE非標準であり、Oracle以外のデータベースブランドでSELECT UNIQUEはまったく認識されない可能性があるため、使用してください。


113

Uniqueは、フィールドに一意のデータが含まれることを示すためにCreate Table()ディレクティブで使用されるキーワードで、通常は自然キー、外部キーなどに使用されます。

例えば:

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ステートメントではDistinctを使用して、一意でない可能性のあるデータがフィールドに保持されている場合にのみ一意のアイテムを返すようにクエリに通知します。

Select Distinct Emp_LName
From Employee

同じ姓を持つ多くの従業員がいる場合でも、異なる姓だけが必要です。

明らかに、クエリを実行しているフィールドに一意のデータが含まれている場合、Distinctキーワードは不要になります。


2
社会保障番号を一意にする必要があるかもしれませんが、そうではありません。例:dailyfinance.com/2010/08/12/...
AIJ

18

select uniqueは、あなたがやろうとしていることに対して有効な構文ではありません

個別の選択または個別の行の選択のいずれかを使用したい

そして実際には、あなたがやろうとしていることを明確に区別する必要さえありません。適切な共用体ステートメントのパラメーターを選択することにより、重複を排除できます。

以下のクエリ自体は、異なる値のみを提供します

select col from table1 
union 
select col from table2

重複が必要な場合は、行う必要があります

select col from table1 
union all
select col from table2

1
私が間違っていない場合、Oracleはと言っても問題ありませんがselect unique...、標準的な方法を使用することをお勧めします。
asgs

3

Oracleのみ=>

SELECT DISTINCTそして、SELECT UNIQUE同じように振る舞います。DISTINCTはANSI SQL標準ですが、UNIQUEはOracle固有のステートメントです。

他のデータベース(あなたの場合はsql-serverなど)=>

SELECT UNIQUE構文が無効です。UNIQUE列に一意性制約を追加するためのキーワードです。

個別を選択


0
  1. ユニークは古い構文でしたが、ディスティンクトは新しい構文で、現在は標準SQLです。
  2. Uniqueは、挿入されるすべての値が他の値と異なる必要があるという制約を作成します。重複する値を入力しようとすると、エラーが発生する可能性があります。 データが異なる場合は、重複した行が削除されます。
  3. 例:SELECT DISTINCT names FROM student;

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.