MariaDB DISTINCT
子句用于在SELECT
语句中从结果中删除重复项。
语法:
SELECT DISTINCT expressions FROM tables [WHERE conditions];
注意:当在
DISTINCT
子句中仅使用表达式时,查询将返回该表达式的唯一值。当您使用多个表达式在DISTINCT
子句时,查询将返回多个表达式的唯一组合。DISTINCT
子句不会忽略NULL
值。因此,在SQL语句中使用DISTINCT
子句时,结果集将包含NULL
作为不同的值。
有一个名称为students
的表,有一些重复的条目。例如,就有两个学生的名字叫:Maxsu
。可以先来看看students
表的中的全部数据记录。
MariaDB [testdb]> select * from students; +------------+--------------+-----------------+----------------+ | student_id | student_name | student_address | admission_date | +------------+--------------+-----------------+----------------+ | 1 | Maxsu | Haikou | 2017-01-07 | | 3 | JMaster | Beijing | 2016-05-07 | | 4 | Mahesh | Guangzhou | 2016-06-07 | | 5 | Kobe | Shanghai | 2016-02-07 | | 6 | Blaba | Shengzhen | 2016-08-07 | | 7 | Maxsu | Sanya | 2017-08-08 | +------------+--------------+-----------------+----------------+ rows in set (0.00 sec)
现在,使用DISTINCT
子句查询去除表中的重复项。参考以下语句 -
SELECT DISTINCT student_name FROM Students;
执行上面语句,得到以下结果 -
MariaDB [testdb]> SELECT DISTINCT student_name FROM Students; +--------------+ | student_name | +--------------+ | Maxsu | | JMaster | | Mahesh | | Kobe | | Blaba | +--------------+ rows in set (0.00 sec)
可以看到上面结果中,在使用DISTINCT
子句之后,重复的条目被删除返回一次。即,名字为:Maxsu
的行记录只有一条。
可以使用DISTINCT
子句从MariaDB中的多个表达式中删除重复项。为了更容易说明问题,我们首先再向students
表中插入一些数据。
INSERT INTO students (student_name, student_address, admission_date) VALUES('Maxsu','Haikou','2015-11-17 00:00:00');
在执行上面插入语句后,students
表中名字为:Maxsu
的学生一共有3
有三位,两位的地址在:Haikou
,一位的地址在:Sanya
,如下所示 -
MariaDB [testdb]> select * from students; +------------+--------------+-----------------+----------------+ | student_id | student_name | student_address | admission_date | +------------+--------------+-----------------+----------------+ | 1 | Maxsu | Haikou | 2017-01-07 | | 3 | JMaster | Beijing | 2016-05-07 | | 4 | Mahesh | Guangzhou | 2016-06-07 | | 5 | Kobe | Shanghai | 2016-02-07 | | 6 | Blaba | Shengzhen | 2016-08-07 | | 7 | Maxsu | Sanya | 2017-08-08 | | 8 | Maxsu | Haikou | 2015-11-17 | +------------+--------------+-----------------+----------------+ rows in set (0.00 sec)
假设查询时,相同名字并且在同一个地址只显示为一条,怎么做?参考以下查询语句 -
SELECT DISTINCT student_name, student_address FROM Students;
执行上面语句,得到以下结果 -
MariaDB [testdb]> SELECT DISTINCT student_name,student_address FROM Students; +--------------+-----------------+ | student_name | student_address | +--------------+-----------------+ | Maxsu | Haikou | | JMaster | Beijing | | Mahesh | Guangzhou | | Kobe | Shanghai | | Blaba | Shengzhen | | Maxsu | Sanya | +--------------+-----------------+ rows in set (0.00 sec)
从上面查询的结果集中,可以看到当前只显示一条。即:student_name
为:Maxsu
以及student_address
为Haikou
的学生信息只有一条。