您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

SQL Distinct

1. 定义

维基百科:关键字Distinct用于返回唯一不同的值。

编程之家解释:有时候,结果中会包含重复的信息,如年龄,很多人是同龄人,而我们只需要不同年龄的数据, Distinct 关键字我们就可以获得不重复的数据。

2. 前言

本小节,我们将一起学习 Distinct

Distinct 关键字既可以用来修饰单字段,也可以用来修饰多字段;在小节中,我们将分别介绍这两种情况的使用。

本小节测试数据如下,请先在中执行:

DROP TABLE IF EXISTS imooc_user;CREATE TABLE imooc_user(
  id int,
  username varchar(),
  age int);INSERT INTO imooc_user(id,username,age) VALUES(,'pedro',), (,'mike',), (,'jerry',), (,'pedro',);

3. 单字段

Distinct 多用于单字段去重。

语法如下:

SELECT DISTINCT [col] FROM [table_name];

其中col表示字段名,table_name表示数据表。

请书写 语句,得到 imooc_user 表中所有的年龄值,且除去重复年龄。

分析:

对于存在重复年龄的,使用 Select 搭配 Distinct 即可。

语句

SELECT DISTINCT age from imooc_user;

结果如下:

+-----+
| age |
+-----+
| 23  |
| 18  |
+-----+

在表中,pedro 与 jerry 二人的年龄相同,使用 Distinct 后,结果集中只有 23 。

如若上面语句没有使用 Distinct :

SELECT age from imooc_user;

结果如下:

+-----+
| age |
+-----+
| 23  |
| 18  |
| 23  |
| 23  |
+-----+

对比发现,Distinct 确实能够很好的完成去重工作。

4. 多字段

Distinct 也可用于多字段去重。

语法如下:

SELECT DISTINCT [col1],[col2] FROM [table_name];

其中col表示字段名,table_name表示数据表,数字1,2表示多个字段。

请书写 语句,得到 imooc_user 中的所有和年龄,要求结果不允许重复。

分析:

按照上述语法写出语句即可。

语句

SELECT DISTINCT username,age from imooc_user;

结果如下:

+----------+-----+
| username | age |
+----------+-----+
| pedro    | 23  |
| mike     | 18  |
| jerry    | 23  |
+----------+-----+

在表中,有两个名为 pedro 的,他们年龄也一致,在 Distinct 的作用下只返回了 pedro。

5. 小结

Distinct 非常实用,很多时候都会存在字段重复的问题,如同龄同班级同地区等等。

Distinct 是要付出代价的,去掉重复值带来的时间损耗比本身更耗时,因此也请慎用。


联系我
置顶