选择唯一和选择独特之间的区别

问题描述 投票:0回答:6

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

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

sql sql-server
6个回答
184
投票

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

使用

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


118
投票

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

即某人的社会安全号码可能是您表中的唯一字段,但不一定是主键。

Distinct 用于 Select 语句中,以通知查询当字段包含可能不唯一的数据时,您只希望返回唯一的项目。

Select Distinct Emp_LName
From Employee

您可能有许多具有相同姓氏的员工,但您只想要每个不同的姓氏。

显然,如果您正在查询的字段包含唯一数据,那么 Distinct 关键字就变得多余了。


18
投票

select unique 对于您想要执行的操作来说不是有效的语法

您想使用 select unique 或 select uniquerow

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

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

select col from table1 
union 
select col from table2

如果你确实想要重复,你就必须这样做

select col from table1 
union all
select col from table2

5
投票

仅在 Oracle =>

SELECT DISTINCT
SELECT UNIQUE
的行为方式相同。 DISTINCT 是 ANSI SQL 标准,而 UNIQUE 是 Oracle 特定语句。

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

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

选择不同的


0
投票
  1. Unique是旧语法,而Distinct是新语法,现在是标准sql。
  2. Unique 创建一个约束,即所有要插入的值必须与其他值不同。 如果尝试输入重复值,可能会出现错误。 Distinct 会在检索数据时删除重复行。
  3. 示例: 从学生中选择不同姓名;

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


0
投票

在 SQL 中,

UNIQUE
 关键字可防止列中的两条记录具有相同的值,而
DISTINCT
 关键字可在检索数据时删除重复值。

以下是

UNIQUE
DISTINCT
之间的更多区别:

  • 独特

    用作表列上的属性集。 例如,您可以在

    UNIQUE
    指令中使用
    Create Table()
    关键字来指示字段将包含唯一数据。 这通常用于外键和自然键。 
    UNIQUE
     约束还可以防止对表进行任何更新或插入,从而导致列或列集中出现重复值。

  • 独特

    用于来自

    SELECT
    查询的数据集。 例如,您可以使用
    DISTINCT
    确保从
    SELECT
    查询返回的每条记录都是唯一的。 但是,如果数据集的表列设置为具有唯一标识符、主键或递增数字,则即使使用
    DISTINCT
    子句,每一行也将是唯一的。

© www.soinside.com 2019 - 2024. All rights reserved.