rownum 和 distinct 的含義

2021-06-07 22:16:33 字數 996 閱讀 2704

rownum是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽欄位可以用於限制查詢返回的總行數.oracle在select出一條記錄後便加上乙個rownum,   而不等所有的結果都select出來後再加上rownum。

然後是distinct的工作原理。distinct是等記錄集全部查詢出後,然後進行排序,最後再刪除重複資料,而不是邊查邊刪除重複資料,因為這是不切實際的,畢竟又太多的位置資料。

所以會出現這樣的情況:

sql> select distinct customerid from cn;

customerid

----------------------------------------

005004

008002

006001

007003

已選擇8行。

sql> select distinct customerid

2 from cn

3 where rownum < 8;

customerid

----------------------------------------

002001

003已選擇3行。

這是因為在第二個sql查詢時,先返回了前7個結果,然後才進行去重。如果想得到不重複的前7個結果,需要使用巢狀查詢

sql> select *

2 from

3 ( select distinct customerid

4 from cn

5 )

6 where rownum < 8;

customerid

----------------------------------------

001002

003004

005006

007已選擇8行。

distinct 和order by 衝突解決方案

在新版的mysql5.7的版本中,如果distinct和order by一起使用將會報3065錯誤,sql語句無法執行。最新的mysql5.7版本語法比之前5.6版本語法更加嚴格導致的。distinct和order by都會對資料進行排序操作,所以會產生衝突。select distinct a.ti...

Oracle查詢 rownum和rowid的區別

在oracle中,有乙個很有趣的東西,那就是rownum。當你從某個表中查詢資料的時候,返回的結果集中都會帶有rownum這個字段,而且有時候也可以使用rownum進行一些條件查詢。在查詢中,我們可以注意到,類似於 select xx from table where rownum n n 1 這樣...

rowid 和 rownum 的區別

rowid 用於定位資料表中某條資料的位置,是唯一的 也不會改變 rownum 表示查詢某條記錄在整個結果集中的位置,同一條記錄查詢條件不同對應的 rownum 是不同的而 rowid 是不會變的 例如有如下一張表 user name age 張三 20 李四 22 王五 23 當執行查詢 sele...