深入解析mysql中distinct的用法
DISTINCT簡介
DISTINCT 的作用是消除結(jié)果集中的重復(fù)行,語法如下:
SELECT DISTINCT
columns
FROM
table_name
WHERE
where_conditions; mysql中的distinct的用法
distinct的作用
在mysql中,distinct關(guān)鍵字的主要作用就是對數(shù)據(jù)庫表中一個或者多個字段重復(fù)的數(shù)據(jù)進行過濾,只返回其中的一條數(shù)據(jù)給用戶,distinct只可以在select中使用
distinct的原理
distinct進行去重的主要原理是通過先對要進行去重的數(shù)據(jù)進行分組操作,然后從分組后的每組數(shù)據(jù)中去一條返回給客戶端,在這個分組的過程可能會出現(xiàn)兩種不同的情況:
- distinct 依賴的字段全部包含索引:
- 該情況mysql直接通過操作索引對滿足條件的數(shù)據(jù)進行分組,然后從分組后的每組數(shù)據(jù)中去一條數(shù)據(jù)。
- distinct 依賴的字段未全部包含索引:
- 該情況由于索引不能滿足整個去重分組的過程,所以需要用到臨時表,mysql首先需要將滿足條件的數(shù)據(jù)放到臨時表中,然后在臨時表中對該部分數(shù)據(jù)進行分組,然后從臨時表中每個分組的數(shù)據(jù)中去一條數(shù)據(jù),在臨時表中進行分組的過程中不會對數(shù)據(jù)進行排序。
distinct的用法
distinct的使用語法是這樣的:
select distinct expression[,expression...] from tables [where conditions];
在使用distinct的過程中主要注意一下幾點:
- 在對字段進行去重的時候,要保證distinct在所有字段的最前面
- 如果distinct關(guān)鍵字后面有多個字段時,則會對多個字段進行組合去重,只有多個字段組合起來的值是相等的才會被去重
下面我們通過在開發(fā)過程中經(jīng)常遇到的一些關(guān)于distinct的實例來加深大家對該關(guān)鍵字用法的理解:
數(shù)據(jù)庫表結(jié)構(gòu)和數(shù)據(jù)如下圖所示:

- 對單個字段進行去重sql:
select distinct age from user; 查詢結(jié)果 age 10 20 30
- 對多個字段進行去重sql:
select distinct name,age from user; 查詢結(jié)果 name age One 10 Zero 20 Two 20 Four 30 One 30
- 對多個字段進行去重并求count的sql:
select count(distinct name,age) as total from user; 查詢結(jié)果 total 5
- 對select * 進行去重
select distinct * from user; 由于 * 代表所有字段,所以該sql和 select distinct id,name,age,sign from user 語義相同 查詢結(jié)果: id name age sign 1 One 10 夢想要有的,萬一實現(xiàn)了呢 2 Zero 20 http://www.chaoshizhushou.com 3 Two 20 OneZeroTwoFour 4 Four 30 加油 5 One 30 學習才是硬道理 6 Four 30 一日三省吾身
到此這篇關(guān)于mysql中的distinct的用法的文章就介紹到這了,更多相關(guān)mysql distinct用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)庫優(yōu)化的六種方式總結(jié)
關(guān)于數(shù)據(jù)庫優(yōu)化,網(wǎng)上有不少資料和方法,但是不少質(zhì)量參差不齊,所以下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫優(yōu)化的六種方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-01-01
Mysql快速插入千萬條數(shù)據(jù)的實戰(zhàn)教程
這篇文章主要給大家介紹了關(guān)于Mysql快速插入千萬條數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
mysql提示Changed limits: max_open_files: 2048 max_connections:
這篇文章主要介紹了mysql提示Changed limits: max_open_files: 2048 max_connections: 1910 table_cache: 64的解決,需要的朋友可以參考下2014-05-05
MySql數(shù)據(jù)庫之a(chǎn)lter表的SQL語句集合
mysql之a(chǎn)lter表的SQL語句集合,包括增加、修改、刪除字段,重命名表,添加、刪除主鍵等。本文給大家介紹MySql數(shù)據(jù)庫之a(chǎn)lter表的SQL語句集合,感興趣的朋友一起學習吧2016-04-04

