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

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


咨詢
建站咨詢
