1 前言
在咱們編寫 SQL 語句操作數據庫中的數據的時候,有可能會遇到一些不太爽的問題,例如對于同一字段擁有相同名稱的記錄,我們只需要顯示一條,但實際上數據庫中可能含有多條擁有相同名稱的記錄,從而在檢索的時候,顯示多條記錄,這就有違咱們的初衷啦!因此,為了避免這種情況的發(fā)生,咱們就需要進行“去重”處理啦,那么何為“去重”呢?說白了,就是對同一字段讓擁有相同內容的記錄只顯示一條記錄。
那么,如何實現“去重”的功能呢?對此,咱們有兩種方式可以實現該功能。
第一種,在編寫 select 語句的時候,添加 distinct 關鍵詞;
第二種,在編寫 select 語句的時候,調用 row_number() over() 函數。
以上兩種方式都可以實現“去重”功能,那兩者之間有何異同呢?接下來,作者將給出詳細的說明。
2 distinct
在 SQL 中,關鍵字 distinct 用于返回唯一不同的值。其語法格式為:
| SELECT DISTINCT 列名稱 FROM 表名稱 | 
假設有一個表“CESHIDEMO”,包含兩個字段,分別 NAME 和 AGE,具體格式如下:

觀察以上的表,咱們會發(fā)現:擁有相同 NAME 的記錄有兩條,擁有相同 AGE 的記錄有三條。如果咱們運行下面這條 SQL 語句,
| /*** 其中 PPPRDER 為 Schema 的名字,即表 CESHIDEMO 在 PPPRDER 中*/select name from PPPRDER.CESHIDEMO | 
將會得到如下結果:

觀察該結果,咱們會發(fā)現在以上的四條記錄中,包含兩條 NAME 值相同的記錄,即第 2 條記錄和第 3 條記錄的值都為“gavin”。那么,如果咱們想讓擁有相同 NAME 的記錄只顯示一條該如何實現呢?這時,就需要用到 distinct 關鍵字啦!接下來,運行如下 SQL 語句,
| select distinct name from PPPRDER.CESHIDEMO | 
將會得到如下結果:

觀察該結果,顯然咱們的要求得到實現啦!但是,咱們不禁會想到,如果將 distinct 關鍵字同時作用在兩個字段上將會產生什么效果呢?既然想到了,咱們就試試唄,運行如下 SQL 語句,
| select distinct name, age from PPPRDER.CESHIDEMO | 
得到的結果如下所示:

觀察該結果,哎呀,貌似沒有作用啊?她將全部的記錄都顯示出來了啊!其中 NAME 值相同的記錄有兩條,AGE 值相同的記錄有三條,完全沒有變化啊!但事實上,結果就應該是這樣的。因為當 distinct 作用在多個字段的時候,她只會將所有字段值都相同的記錄“去重”掉,顯然咱們“可憐”的四條記錄并不滿足該條件,因此 distinct 會認為上面四條記錄并不相同。空口無憑,接下來,咱們再向表“CESHIDEMO”中添加一條完全相同的記錄,驗證一下即可。添加一條記錄后的表如下所示:
新聞熱點
疑難解答
圖片精選