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