亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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