查询结果去重
去除单列的重复结果
有的时候我们查询某个列的数据时会有一些重复的结果,比如我们查询一下student_info表的学院信息:
mysql> SELECT department FROM student_info;
+-----------------+
| department |
+-----------------+
| 计算机学院 |
| 计算机学院 |
| 计算机学院 |
| 计算机学院 |
| 航天学院 |
| 航天学院 |
+-----------------+
6 rows in set (0.00 sec)
因为表里有6条记录,所以给我们返回了6条结果。但是其实好多都是重复的结果,如果我们想去除重复结果的话,可以将DISTINCT放在被查询的列前边,就是这样:
SELECT DISTINCT 列名 FROM 表名;
我们对学院信息做一下去重处理:
mysql> SELECT DISTINCT department FROM student_info;
+-----------------+
| department |
+-----------------+
| 计算机学院 |
| 航天学院 |
+-----------------+
2 rows in set (0.00 sec)
看到结果集中就只剩下不重复的信息了。
去除多列的重复结果
对于查询多列的情况,两条结果重复的意思是:两条结果的每一个列中的值都相同。比如查询学院和专业信息:
mysql> SELECT department, major FROM student_info;
+-----------------+--------------------------+
| department | major |
+-----------------+--------------------------+
| 计算机学院 | 计算机科学与工程 |
| 计算机学院 | 计算机科学与工程 |
| 计算机学院 | 软件工程 |
| 计算机学院 | 软件工程 |
| 航天学院 | 飞行器设计 |
| 航天学院 | 电子信息 |
+-----------------+--------------------------+
6 rows in set (0.00 sec)
查询结果中第1、2行记录中的department和major列都相同,所以这两条记录就是重复的,同理,第3、4行也是重复的。如果我们想对多列查询的结果去重的话,可以直接把DISTINCT放在被查询的列的最前边:
SELECT DISTINCT 列名1, 列名2, ... 列名n FROM 表名;
如果有想买长截图这本电子书的可以点击以下链接,作者是《mysql是怎样运行的》的作者小孩子