1. 程式人生 > SQL入門教學 >09 SQL Distinct

09 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 是要付出代價的,去掉重複值帶來的時間損耗比查詢本身更耗時,因此也請慎用。