今天在工作中遇到了个这样的问题:就是需要在查询的所有结果中只显示前六个数据,而且每个数据都要显示,所以我就用了rownum来控制每个数据。但是遇到了如下sql的问题:假设有张表名叫booking则
SELECT B.*
FROM BOOKING
WHERE 1=1
AND ROWNUM=1
--------------------这样就输出了数据集的第一行------------------
SELECT B.*
FROM BOOKING
WHERE 1=1
AND ROWNUM=2
按道理来说也应该数据第二行的数据,但是问题来了,没有显示出第二行的数据来。全都是空值~~没办法我就只好试了试接下来的这段SQL:
SELECT *
FROM (SELECT ROWNUM AS ROWN,
B.*
FROM BOOKING
)
WHERE BOOKING.ROWN=2
这样不管你显示的是第几行都可!
我想请教各位朋友,这两个代码的区别在哪里?第一个为什么不会显示?
SELECT B.*
FROM BOOKING
WHERE 1=1
AND ROWNUM=1
--------------------这样就输出了数据集的第一行------------------
SELECT B.*
FROM BOOKING
WHERE 1=1
AND ROWNUM=2
按道理来说也应该数据第二行的数据,但是问题来了,没有显示出第二行的数据来。全都是空值~~没办法我就只好试了试接下来的这段SQL:
SELECT *
FROM (SELECT ROWNUM AS ROWN,
B.*
FROM BOOKING
)
WHERE BOOKING.ROWN=2
这样不管你显示的是第几行都可!
我想请教各位朋友,这两个代码的区别在哪里?第一个为什么不会显示?
rownum 是在查询到的结果集后加上去的,是一个总是从1开始的伪列,rownum=1 成立,但是1以上的自然数在rownum做等于判断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数)。
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
Q Q 群:62697716
1、永远从 1 开始
2、当满足条件之后 rownum 才 +1这就是说:
1、如果 where rownum < 10 的话,rownum 先从 1 开始,1<10 因此 rownum + 1 直到10
2、如果 where rowunm = 2 的话,rowunm 先从 1 开始,1≠2 因此 rownum 不会 + 1,一直是1
而 1永远≠2,所以什么也就出不来了。
解释清楚上面的时候,下面这个也就不难理解了:SELECT *
FROM (SELECT ROWNUM AS ROWN,
B.*
FROM BOOKING
)
WHERE BOOKING.ROWN=2 上面的代码中,内层的rownum相当于给每条记录实实在在加了一个行号,再在外层使用的时候,这个行号就实际存在了,就不会出现上面解释中的问题了,不过给你个建议最好还是在内层查询中给rownum起个别名,这样更安全些
SELECT *
FROM (SELECT ROWNUM AS ROWN id,
B.*
FROM BOOKING
)
WHERE BOOKING.id=2
没仔细看
依然已经加了别名了。
SELECT *
FROM (SELECT ROWNUM AS ROWN,
B.*
FROM BOOKING
)
WHERE BOOKING.ROWN=2
FROM BOOKING
WHERE rownum <=5 and rownum<=10这样也可以吧?