在mysql中,可以利用“select”語句和“DISTINCT”關鍵字來進行去重查詢,過濾掉重復的數據,語法“SELECT DISTINCT 字段名 FROM 數據表名;”。
本教程操作環境:windows7系統、mysql8版本、Dell G3電腦。
在 MySQL 中使用 SELECT 語句執行簡單的數據查詢時,返回的是所有匹配的記錄。如果表中的某些字段沒有唯一性約束,那么這些字段就可能存在重復值。為了實現查詢不重復的數據,MySQL 提供了 DISTINCT 關鍵字。
DISTINCT 關鍵字的主要作用就是對數據表中一個或多個字段重復的數據進行過濾,只返回其中的一條數據給用戶。
DISTINCT 關鍵字的語法格式為:
SELECT?DISTINCT??FROM?;
其中,“字段名”為需要消除重復記錄的字段名稱,多個字段時用逗號隔開。
使用 DISTINCT 關鍵字時需要注意以下幾點:
-
DISTINCT 關鍵字只能在 SELECT 語句中使用。
-
在對一個或多個字段去重時,DISTINCT 關鍵字必須在所有字段的最前面。
-
如果 DISTINCT 關鍵字后有多個字段,則會對多個字段進行組合去重,也就是說,只有多個字段組合起來完全是一樣的情況下才會被去重。
示例
下面通過一個具體的實例來說明如何實現查詢不重復數據。
test 數據庫中 student 表的表結構和數據如下所示:
mysql>?SELECT?*?FROM?test.student; +----+----------+------+-------+ |?id?|?name?????|?age??|?stuno?| +----+----------+------+-------+ |??1?|?zhangsan?|???18?|????23?| |??2?|?lisi?????|???19?|????24?| |??3?|?wangwu???|???18?|????25?| |??4?|?zhaoliu??|???18?|????26?| |??5?|?zhangsan?|???18?|????27?| |??6?|?wangwu???|???20?|????28?| +----+----------+------+-------+ 6?rows?in?set?(0.00?sec)
結果顯示,student 表中存在 6 條記錄。
下面對 student 表的 age 字段進行去重,SQL 語句和運行結果如下:
mysql>?SELECT?DISTINCT?age?FROM?student; +------+ |?age??| +------+ |???18?| |???19?| |???20?| +------+ 3?rows?in?set?(0.00?sec)
對 student 表的 name 和 age 字段進行去重,SQL 語句和運行結果如下:
mysql>?SELECT?DISTINCT?name,age?FROM?student; +----------+------+ |?name?????|?age??| +----------+------+ |?zhangsan?|???18?| |?lisi?????|???19?| |?wangwu???|???18?| |?zhaoliu??|???18?| |?wangwu???|???20?| +----------+------+ 5?rows?in?set?(0.00?sec)
對 student 表中的所有字段進行去重,SQL 語句和運行結果如下:
mysql>?SELECT?DISTINCT?*?FROM?student; +----+----------+------+-------+ |?id?|?name?????|?age??|?stuno?| +----+----------+------+-------+ |??1?|?zhangsan?|???18?|????23?| |??2?|?lisi?????|???19?|????24?| |??3?|?wangwu???|???18?|????25?| |??4?|?zhaoliu??|???18?|????26?| |??5?|?zhangsan?|???18?|????27?| |??6?|?wangwu???|???20?|????28?| +----+----------+------+-------+ 6?rows?in?set?(0.00?sec)
因為 DISTINCT 只能返回它的目標字段,而無法返回其它字段,所以在實際情況中,我們經常使用 DISTINCT 關鍵字來返回不重復字段的條數。
查詢 student 表中對 name 和 age 字段去重之后記錄的條數,SQL 語句和運行結果如下:
mysql>?SELECT?COUNT(DISTINCT?name,age)?FROM?student; +--------------------------+ |?COUNT(DISTINCT?name,age)?| +--------------------------+ |????????????????????????5?| +--------------------------+ 1?row?in?set?(0.01?sec)
結果顯示,student 表中對 name 和 age 字段去重之后有 5 條記錄。
【相關推薦:mysql視頻教程】