SQL中 DISTINCT 和 UNIQUE

以下内容参考w3school中关于SQL的教学,可以点击蓝字参考原文。

DISTINCTUNIQUE意思分别为截然不同的独一无二的。看起来好像很相似,但是实际上用法却完全不同。

一、UNIQUE

1.UNIQUE定义

UNIQUE 约束唯一标识数据库表中的每条记录。

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

简单来说,UNIQUE的使用就是为了保证数据库表同一列中不会出现重复的数据,比如说学生表的学号,这一栏就应该用UNIQUE约束,因为不会也不应该出现两个同样学号的学生。

2.UNIQUE用法(MySQL)
  • 在 "Persons" 表创建时在 "Id_P" 列创建 UNIQUE 约束:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)
  • 需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
)

CONSTRAINT 单词意为约束,在后面的uc_PersonID是为这个约束取的名字UNIQUE意思是这个约束类型为唯一型约束,约束的列为Id_PLastName

  • 当表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束,请使用下列 SQL:
ALTER TABLE Persons 
ADD UNIQUE (Id_P)
  • 如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
  • 如需撤销 UNIQUE 约束,请使用下面的 SQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID

二、DISTINCT

1.DISTINCT定义

在表中,可能会包含重复值。有时我们希望仅仅列出不同(distinct)的值。

关键词 DISTINCT 用于在查询时返回唯一不同的值。

不同之处:UNIQUE不允许表中某一列存在相同的值,而DISTINCT是在表中可能存在不同值的时候,查询到的值有重复时仅列出一次。

2.DISTINCT用法

如果要从 "Company" 列中选取所有的值,我们需要使用 SELECT 语句:

SELECT Company FROM Orders

注:如果表Orders的Company列用UNIQUE修饰,则表中Company列不可能出现下面两个W3School的情况。

"Orders"表:

Company OrderNumber
IBM 1122
W3School 2333
Apple 3334
W3School 6668

结果:

Company
IBM
W3School
Apple
W3School

注意,在结果集中,W3School 被列出了两次。

如需从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句:

SELECT DISTINCT Company FROM Orders 
Company
IBM
W3School
Apple

现在,在结果集中,"W3School" 仅被列出了一次。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容