新聞中心
在數(shù)據(jù)庫(kù)中我們經(jīng)常需要查詢某個(gè)列中的不同值,這時(shí)我們就需要用到distinct關(guān)鍵字進(jìn)行去重篩選。distinct關(guān)鍵字可以去除相同的行,只留下不同的行。本文將向大家介紹distinct關(guān)鍵字的使用方法及其注意事項(xiàng)。

一、distinct的用法
1.基本語(yǔ)法:
“`
SELECT distinct 列名 FROM 表名;
“`
2.示例:
以學(xué)生表為例,查詢學(xué)生表中的年齡有哪些。
“`
SELECT distinct age FROM student;
“`
這個(gè)命令將返回不重復(fù)的年齡列。
3.注意事項(xiàng)
1)去重查詢會(huì)降低查詢的性能,因此我們應(yīng)該盡量減少使用distinct。
2)distinct關(guān)鍵字應(yīng)該放在查詢語(yǔ)句中的之一個(gè)位置。
3)可以對(duì)多個(gè)列使用distinct,這時(shí)要在多個(gè)列之間用逗號(hào)分隔。
4)如果我們希望查詢出去重后的結(jié)果,并且結(jié)果能夠按照某個(gè)字段排序時(shí),可以在查詢語(yǔ)句中加上order by子句。
5)distinct不會(huì)影響表的結(jié)構(gòu),也不會(huì)修改數(shù)據(jù),不必?fù)?dān)心數(shù)據(jù)的安全性問(wèn)題。
6)使用distinct時(shí)可能會(huì)出現(xiàn)null值,如:SELECT distinct age FROM student where age is null,這樣會(huì)把查詢結(jié)果中的null取出來(lái)。
二、distinct的實(shí)際應(yīng)用場(chǎng)景
1.統(tǒng)計(jì)分析
在實(shí)際生活和工作中,我們經(jīng)常遇到的場(chǎng)景是需要對(duì)某個(gè)字段進(jìn)行去重,并統(tǒng)計(jì)不同值的個(gè)數(shù)。比如統(tǒng)計(jì)班級(jí)中有多少不同的學(xué)生性別:
“`
SELECT COUNT(distinct sex) FROM student;
“`
這個(gè)命令返回的結(jié)果是統(tǒng)計(jì)學(xué)生表中不同性別的人數(shù)。
2.篩選過(guò)濾
有時(shí)我們需要從數(shù)據(jù)庫(kù)中篩選出不同的數(shù)據(jù)進(jìn)行研究分析,比如我們需要從購(gòu)物清單上篩選出不同的購(gòu)買商品種類:
“`
SELECT distinct item_name FROM shopping_list;
“`
這個(gè)命令將返回不同的商品名稱列表,用于統(tǒng)計(jì)購(gòu)物清單中的商品種類數(shù)。
三、常見(jiàn)誤區(qū)
1.認(rèn)為distinct關(guān)鍵字可以消除重復(fù)行。
在使用distinct關(guān)鍵字時(shí),有人可能會(huì)認(rèn)為它可以消除所有的重復(fù)行,但實(shí)際上distinct只對(duì)目標(biāo)列去重,而不是整個(gè)記錄行去重。如果查詢語(yǔ)句中存在多個(gè)列,則除了去重列以外的列不會(huì)被去重。
2.認(rèn)為distinct可以對(duì)所有數(shù)據(jù)類型的列去重。
數(shù)據(jù)庫(kù)的不同實(shí)現(xiàn)對(duì)于distinct關(guān)鍵字的支持也各不相同,有些數(shù)據(jù)庫(kù)對(duì)所有數(shù)據(jù)類型的列都支持去重查詢,有些只支持對(duì)特定的數(shù)據(jù)類型進(jìn)行去重。在使用distinct關(guān)鍵字時(shí)應(yīng)該先了解所用數(shù)據(jù)庫(kù)的具體支持情況。
distinct關(guān)鍵字應(yīng)用廣泛,可以用于統(tǒng)計(jì)各種不同類型的數(shù)據(jù),但在查詢過(guò)程中,應(yīng)注意其對(duì)查詢性能的影響和數(shù)據(jù)庫(kù)的不同實(shí)現(xiàn)情況,以免造成查詢效率不高的問(wèn)題。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
MySQL中distinct和count(*)的使用方法比較
首先對(duì)于MySQL的DISTINCT的關(guān)鍵字的一些用法:
1.在count
不重復(fù)的記錄的時(shí)候能用到,比如SELECT
COUNT(
DISTINCT
id
)
FROM
tablename;就是計(jì)算talbebname表中id不同的記錄有多少條。
2,在需要返回記錄不同的id的具體值的時(shí)候可以用,比如SELECT
DISTINCT
id
FROM
tablename;返回talbebname表中不同的id的具體的值。
3.上面的情況2對(duì)于需要返回mysql表中2列以上的結(jié)果時(shí)會(huì)有歧義,比如SELECT
DISTINCT
id,
type
FROM
tablename;實(shí)際上返回的是
id與type同時(shí)不相同的結(jié)果,也就是DISTINCT同時(shí)作用了兩個(gè)字段,必須得id與tyoe都相同的才被排除了,與我們期望的結(jié)果不一樣。
4.這時(shí)候可以考慮使用group_concat函數(shù)來(lái)進(jìn)行排除,不過(guò)這個(gè)mysql函數(shù)是在mysql4.1以上才支持的。
5.其實(shí)還有另外一種解決方式,就是使用,SELECT
id,
type,
count(DISTINCT
id)
FROM
tablename,雖然這樣的返回結(jié)果多了一列無(wú)用的count數(shù)據(jù)(或許你就需要這個(gè)我說(shuō)的無(wú)用數(shù)據(jù)),返回的結(jié)果是只有id不同的所有結(jié)果和上面的4類型可以互補(bǔ)使用,就是看你需要什么樣的數(shù)據(jù)了。
DISTINCT的效率:
SELECT
id,
type,
count(DISTINCT
id)
FROM
tablename;雖然這樣的返回結(jié)果多了一列無(wú)用的count數(shù)據(jù)(或許你就需要這個(gè)我說(shuō)的無(wú)用數(shù)據(jù)),SELECT
id,
type
from
tablename
group
by
id;這樣貌似也皮毀可以,用distinct的時(shí)候,如果它有索引,mysql會(huì)把它轉(zhuǎn)成group
by的方式執(zhí)行。
MySQL數(shù)據(jù)庫(kù)
對(duì)于COUNT(*)的不同處理會(huì)造成不同的結(jié)果,比如,
執(zhí)行:SELECT
COUNT(*)
FROM
tablename;即使對(duì)于千萬(wàn)級(jí)別的數(shù)據(jù)mysql也能非常迅速的返回結(jié)果。
執(zhí)行:
SELECT
COUNT(*)
FROM
tablename
WHERE…..;mysql的查詢時(shí)間開(kāi)始哪沖攀升。
網(wǎng)上查資料得知:當(dāng)沒(méi)有WHERE語(yǔ)句對(duì)于整個(gè)mysql的表進(jìn)行count運(yùn)算的時(shí)候,MyISAM類型的表中保存有總的行數(shù),而當(dāng)添加有WHERE限定語(yǔ)句的時(shí)候Mysql需要對(duì)整個(gè)表進(jìn)行檢索,燃緩備從而得出count的數(shù)值,因此加上where條件的查詢速度就會(huì)很慢了。
以上關(guān)于MySQL數(shù)據(jù)庫(kù)的distinct以及count(*)的使用就介紹到這里了,希望本次的介紹能夠帶給您一些收獲。
數(shù)據(jù)庫(kù)命令 distinct的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于數(shù)據(jù)庫(kù)命令 distinct,數(shù)據(jù)庫(kù)命令:去重查詢distinct,MySQL中distinct和count(*)的使用方法比較的信息別忘了在本站進(jìn)行查找喔。
香港云服務(wù)器機(jī)房,創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)云服務(wù)器廠商,回大陸優(yōu)化帶寬,安全/穩(wěn)定/低延遲.創(chuàng)新互聯(lián)助力企業(yè)出海業(yè)務(wù),提供一站式解決方案。香港服務(wù)器-免備案低延遲-雙向CN2+BGP極速互訪!
標(biāo)題名稱:數(shù)據(jù)庫(kù)命令:去重查詢distinct(數(shù)據(jù)庫(kù)命令distinct)
網(wǎng)站鏈接:http://fisionsoft.com.cn/article/ccsscds.html


咨詢
建站咨詢
