這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)MySQL中怎么清除結(jié)果集的重復(fù)數(shù)據(jù),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì),成都做網(wǎng)站公司-創(chuàng)新互聯(lián)已向數(shù)千家企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價格為您打造企業(yè)品質(zhì)網(wǎng)站。一、關(guān)鍵字Distinct和Distinctrow
關(guān)鍵字distinct一般直接跟在查詢語句中SELECT的后面,替換可選的關(guān)鍵字all,而關(guān)鍵字all是默認(rèn)的。Distinctrow是distinct的別名,它產(chǎn)生的效果與distinct是完成一樣的:
1 2 3 4 | SELECT [ ALL | DISTINCT | DISTINCTROW ] select_expr [ FROM table_references [ WHERE where_condition] |
為了說明這些關(guān)鍵字的用法,我們以下表中的數(shù)據(jù)為例來進(jìn)行說明。其中,該表含有一些水果名稱及其對應(yīng)的顏色:
以下查詢將從上表中檢索所有水果的名稱,并按字母順序?qū)⑵淞谐觯?/p>
1 2 | SELECT name FROM fruits; |
由于沒有附帶顏色信息,所以每種水果品種的是重復(fù)的:
現(xiàn)在,讓我們使用關(guān)鍵字distinct再查詢一次,看看結(jié)果如何:
1 2 | SELECT DISTINCT name FROM fruits; |
不出所料,由于附帶了水果的顏色信息,所以每種水果的名稱只出現(xiàn)了一次:
二、重復(fù)數(shù)據(jù)的取舍
有時候,是不能使用關(guān)鍵字distinct的,因?yàn)閯h除復(fù)制的數(shù)據(jù)會導(dǎo)致錯誤的結(jié)果。請考慮下列情形:
客戶想要生成一張職工表,以便進(jìn)行某些資料統(tǒng)計(jì)。 為此,我們可以使用下列命令:
1 2 3 4 5 | SELECT name ,
gender,
salary FROM employees ORDER BY name ; |
奇怪的是,結(jié)果中出現(xiàn)了重復(fù)的“Kristen Ruegg”:
客戶說,他們不希望出現(xiàn)重復(fù),所以開發(fā)人員在SELECT語句中加入了關(guān)鍵字distinct。 好了,這會能夠滿足客戶的要求了,但是問題也隨之而來了,因?yàn)楣敬_實(shí)有兩個重名的員工。所以,添加關(guān)鍵字distinct刪除了一個有效的記錄,因此得 到的結(jié)果實(shí)際上錯誤的。我們可以通過emp_id_number來確認(rèn)一下,的確有兩名員工都叫Kristen Rueggs:
1 2 3 4 5 6 | SELECT name ,
gender,
salary,
emp_id_number FROM employees ORDER BY name ; |
下面是出現(xiàn)問題的數(shù)據(jù),它們的emp_id_numbers都是的:
上面的情形告訴我們:使用關(guān)鍵字distinct的時候,要確保不會無意中刪除有效數(shù)據(jù)!
三、關(guān)鍵字Distinct與Group By的區(qū)別
使用distinct與不使用聚合功能情況下對全選所有欄數(shù)據(jù)進(jìn)行分組的邏輯效果是一樣的。對于這樣的查詢,group by命令只是生產(chǎn)了一列分組后的值。在顯示某欄并對齊分組的時候,該查詢會給出該欄中不同的值。然而,在顯示多欄并對它們進(jìn)行分組的時候,該查詢會給出每 欄中的值的不同的組和。例如,以下查詢生成的結(jié)果與第一個SELECT distinct命令的結(jié)果完全一樣:
1 2 3 | SELECT name FROM fruits GROUP BY name ; |
同樣地,以下語句生成的結(jié)果,與我們的SELECT distinct語句在員工表上生成的結(jié)果也完全一樣:
1 2 3 4 5 | SELECT name ,
gender,
salary FROM employees GROUP BY name ; |
關(guān)鍵字distinct和group by的區(qū)別在于,group by子句會對數(shù)據(jù)記錄進(jìn)行排序。因此:
1 2 3 4 5 6 7 8 9 10 11 | SELECT name ,
gender,
salary FROM employees GROUP BY name ; 或者: SELECT DISTINCT name ,
gender,
salary FROM employees ORDER BY name ; |
四、統(tǒng)計(jì)重復(fù)的數(shù)據(jù)
關(guān)鍵字Distinct可以用于COUNT()函數(shù),來統(tǒng)計(jì)一欄中包含多少不同的值。COUNT ( distinct expression)將統(tǒng)計(jì)給定表達(dá)式在不同的非零值的數(shù)量。該表達(dá)式可以是要統(tǒng)計(jì)其中不同的非零值的數(shù)量的欄名。
下面是表employee中的所有數(shù)據(jù):
對name字段應(yīng)用Count distinct函數(shù)會得到六個不同的名稱:
上述就是小編為大家分享的MySQL中怎么清除結(jié)果集的重復(fù)數(shù)據(jù)了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。