日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle和sql server取第一条记录的区别以及rownum详解

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle和sql server取第一条记录的区别以及rownum详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們知道學生可能有重名的情況,那么當重名的時候假設只需要取得重名結果集中的第一條記錄。

?

sql server:
select top(1) num,Name from M_Student where name = 'xy'

?

Oracle:
select num,Name from M_Student where name = 'xy' and rownum <= 1


對于rownum在oracle的使用的時候,有幾點需要注意:

?

(1) rownum 對于等于某值的查詢條件

如果希望找到學生表中第一條學生的信息,可以使用rownum=1作為條件。但是想找到學生表中第二條學生的信息,使用rownum=2結果查不到數據。因為rownum都是從1開始,但是1以上的自然數在rownum做等于判斷是時認為都是false條件,所以無法查到rownum = n(n>1的自然數)。


(2) rownum對于大于某值的查詢條件

如果想找到從第二行記錄以后的記錄,當使用rownum>2是查不出記錄的,原因是由于rownum是一個總是從1開始的偽列,Oracle 認為rownum> n(n>1的自然數)這種條件依舊不成立,所以查不到記錄。

?

(3) rownum對于小于某值的查詢條件

rownum對于rownum<n(n>1的自然數)的條件認為是成立的,所以可以找到記錄。比如 rownum < 3


(4) rownum和排序

Oracle中的rownum的是在取數據的時候產生的序號,所以想對指定排序的數據去指定的rowmun行數據就必須注意了。

select rownum ,id,name from student order by name;
??
ROWNUM??? ID????????? NAME
3??????????????? 200003???? 李三
2??????????????? 200002???? 王二
1??????????????? 200001???? 張一
4??????????????? 200004???? 趙四

可以看出rownum并不是按照name列來生成的序號。系統是按照記錄插入時的順序給記錄排的號,rowid也是順序分配的。必須使用子查詢。

?

select rownum ,id,name from (select * from student order by name);

ROWNUM??? ID????????? NAME
3??????????????? 200003???? 李三
2??????????????? 200002???? 王二
1??????????????? 200001???? 張一
4??????????????? 200004???? 趙四

這樣就成了按name排序,并且用rownum標出正確序號(由小到大)

?
看一個例子

把最先進入公司的5個人找出來

方法一 SELECT * FROM emp WHERE ROWNUM <= 5 ORDER BY hiredate;

方法二 SELECT * FROM(SELECT * FROM emp ORDER BY hiredate) WHERE ROWNUM <= 5;

?


把最先進入公司的6-10個人找出來

方法一
SELECT * FROM (SELECT * FROM emp ORDER BY hiredate)
WHERE ROWNUM <= 10??
MINUS
SELECT * FROM (SELECT * FROM emp ORDER BY hiredate)
WHERE ROWNUM <= 5;

?

方法二(分頁常用)
SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT * FROM emp) e WHERE ROWNUM <= 10) t WHERE t.rn >= 6;
?

SELECT * FROM (SELECT e.*, ROWNUM rn FROM (SELECT ename, sal FROM emp) e WHERE ROWNUM <= 10) WHERE rn >= 6;

?

參考博客:
http://topic.csdn.net/t/20040329/17/2900155.html
http://apps.hi.baidu.com/share/detail/5881277

轉載于:https://blog.51cto.com/woshixy/1107054

總結

以上是生活随笔為你收集整理的oracle和sql server取第一条记录的区别以及rownum详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。