SQL Distinct
1. 定义
维基百科:关键字
Distinct
用于返回唯一不同的值。
慕课解释:有时候,查询结果中会包含重复的信息,如年龄,很多人是同龄人,而我们只需要不同年龄的数据,加上 Distinct 关键字我们就可以获得不重复的数据。
2. 前言
本小节,我们将一起学习 SQL Distinct
。
Distinct 关键字既可以用来修饰单字段,也可以用来修饰多字段;在小节中,我们将分别介绍这两种情况的使用。
本小节测试数据如下,请先在数据库中执行:
DROP TABLE IF EXISTS imooc_user;
CREATE TABLE imooc_user
(
id int,
username varchar(20),
age int
);
INSERT INTO imooc_user(id,username,age)
VALUES(1,'pedro',23), (2,'mike',18), (3,'jerry',23), (4,'pedro',23);
3. 单字段查询
Distinct 多用于单字段查询去重。
语法如下:
SELECT DISTINCT [col] FROM [table_name];
其中col
表示字段名,table_name
表示数据表名称。
3.1 例1 查询年龄
请书写 SQL 语句,查询得到 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表示多个字段。
4.1 例2 查询用户名和年龄
请书写 SQL 语句,查询得到 imooc_user 中的所有用户名和年龄,要求结果不允许重复。
分析:
按照上述语法写出查询语句即可。
语句:
SELECT DISTINCT username,age from imooc_user;
结果如下:
+----------+-----+
| username | age |
+----------+-----+
| pedro | 23 |
| mike | 18 |
| jerry | 23 |
+----------+-----+
在表中,有两个名为 pedro 的用户,他们年龄也一致,在 Distinct 的作用下只返回了一个 pedro。
5. 小结
- Distinct 非常实用,很多时候都会存在字段重复的问题,如
同龄
,同班级
,同地区
等等。 - Distinct 是要付出代价的,去掉重复值带来的时间损耗比查询本身更耗时,因此也请慎用。