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

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


咨詢
建站咨詢
