国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

SQL中distinct 和 row_number() over() 的區(qū)別及用法

2024-07-24 12:52:24
字體:
來源:轉載
供稿:網友

1 前言

在咱們編寫 SQL 語句操作數據庫中的數據的時候,有可能會遇到一些不太爽的問題,例如對于同一字段擁有相同名稱的記錄,我們只需要顯示一條,但實際上數據庫中可能含有多條擁有相同名稱的記錄,從而在檢索的時候,顯示多條記錄,這就有違咱們的初衷啦!因此,為了避免這種情況的發(fā)生,咱們就需要進行“去重”處理啦,那么何為“去重”呢?說白了,就是對同一字段讓擁有相同內容的記錄只顯示一條記錄。

那么,如何實現“去重”的功能呢?對此,咱們有兩種方式可以實現該功能。

第一種,在編寫 select 語句的時候,添加 distinct 關鍵詞;

第二種,在編寫 select 語句的時候,調用 row_number() over() 函數。

以上兩種方式都可以實現“去重”功能,那兩者之間有何異同呢?接下來,作者將給出詳細的說明。

2 distinct

在 SQL 中,關鍵字 distinct 用于返回唯一不同的值。其語法格式為:

SELECT DISTINCT 列名稱 FROM 表名稱

假設有一個表“CESHIDEMO”,包含兩個字段,分別 NAME 和 AGE,具體格式如下:

CESHIDEMO

觀察以上的表,咱們會發(fā)現:擁有相同 NAME 的記錄有兩條,擁有相同 AGE 的記錄有三條。如果咱們運行下面這條 SQL 語句,

/*** 其中 PPPRDER 為 Schema 的名字,即表 CESHIDEMO 在 PPPRDER 中*/select name from PPPRDER.CESHIDEMO

將會得到如下結果:

name

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

select distinct name from PPPRDER.CESHIDEMO

將會得到如下結果:

distinct

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

select distinct name, age from PPPRDER.CESHIDEMO

得到的結果如下所示:

nameandage

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 攀枝花市| 万州区| 平舆县| 镇雄县| 东乡族自治县| 尤溪县| 武平县| 永城市| 通化市| 钟山县| 林周县| 图木舒克市| 托克逊县| 突泉县| 图们市| 本溪市| 岫岩| 荥经县| 奎屯市| 南开区| 张家界市| 六安市| 临泽县| 五原县| 盖州市| 双牌县| 治县。| 麟游县| 芒康县| 酉阳| 万全县| 怀柔区| 孟连| 成都市| 东港市| 东丰县| 信丰县| 格尔木市| 宜黄县| 宁都县| 廉江市|