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...