09 SQL Distinct
阿新 • • 發佈:2020-06-25
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 是要付出代價的,去掉重複值帶來的時間損耗比查詢本身更耗時,因此也請慎用。