MariaDB Distinct子句


MariaDB DISTINCT子句用於在SELECT語句中從結果中刪除重複項。

語法:

SELECT DISTINCT expressions  
FROM tables  
[WHERE conditions];

注意:當在DISTINCT子句中僅使用表示式時,查詢將返回該表示式的唯一值。當您使用多個表示式在DISTINCT子句時,查詢將返回多個表示式的唯一組合。
DISTINCT子句不會忽略NULL值。因此,在SQL語句中使用DISTINCT子句時,結果集將包含NULL作為不同的值。

1. 使用單一表示式範例

有一個名稱為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     |
+------------+--------------+-----------------+----------------+
6 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        |
+--------------+
5 rows in set (0.00 sec)

可以看到上面結果中,在使用DISTINCT子句之後,重複的條目被刪除返回一次。即,名字為:Maxsu的行記錄只有一條。

2. 使用多個表示式

可以使用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     |
+------------+--------------+-----------------+----------------+
7 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           |
+--------------+-----------------+
6 rows in set (0.00 sec)

從上面查詢的結果集中,可以看到當前只顯示一條。即:student_name為:Maxsu以及student_addressHaikou的學生資訊只有一條。