Select Unique和Select Distinct之间的区别

时间:2008-12-03 05:05:37

标签: sql sql-server

我认为这些是同义词,但我在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

修好了。有人可以解释一下吗?

5 个答案:

答案 0 :(得分:164)

SELECT UNIQUE是Oracle的SQL风格支持的旧语法。它与SELECT DISTINCT同义。

使用SELECT DISTINCT,因为这是标准SQL,SELECT UNIQUE是非标准的,而在Oracle以外的数据库品牌中,可能根本无法识别SELECT UNIQUE

答案 1 :(得分:112)

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 :(得分:18)

select unique对于您尝试执行的操作无效语法

你想使用select distinct或select distinctrow

实际上,你甚至不需要在你想要做的事情上明确/不确定。您可以通过选择适当的union语句参数来消除重复项。

以下查询本身只会提供不同的值

select col from table1 
union 
select col from table2

如果您确实需要重复,则必须执行

select col from table1 
union all
select col from table2

答案 3 :(得分:2)

仅限Oracle =>

SELECT DISTINCTSELECT UNIQUE的行为方式相同。虽然DISTINCT是ANSI SQL标准,但UNIQUE是Oracle特定的声明。

在其他数据库中(如您的情况下为sql-server)=>

SELECT UNIQUE语法无效。 UNIQUE是在列上添加唯一约束的关键字。

SELECT DISTINCT

答案 4 :(得分:0)

  1. 唯一是旧语法,而 Distinct 是新语法,现在是标准sql。
  2. 唯一会创建一个约束,要插入的所有值必须与其他值不同。 如果尝试输入重复值,则可以看到错误。 区别会导致在检索数据时删除重复的行。
  3. 实施例: 选择 DISTINCT 名称FROM student;

    创建表人员( Id varchar NOT NULL UNIQUE , 名称varchar(20));