看完这章你将会学习到以下:
- RowNum & Minus
- Row_Num_ber,Rank,Densk_rank over(partition by ….. ….)
一般在 SQl server, 我们可以用排序和 Limit 取到相应范围的值,但在 PL/SQL 里面没有这些函数。我们可以用 RowNum 或者用 Row_number()over(Partition by)或者用补集。
使用场景:
查询 EMP 表第 4 行到第 8 行所有员工的信息;
注意:Minus 做补集的时候,两张或者多张表的字段内容和字段类型要口径一致,不会没有任何结果。
SELECT * FROM EMP;
---- ROWNUM 只能返回小于或者小于等于的区域
SELECT E.* ,ROWNUM AS RN
FROM EMP E
WHERE ROWNUM <9
MINUS
SELECT E.*,ROWNUM AS RN
FROM EMP E
WHERE ROWNUM <4
注意 ROWNUM 是查询数据时生成序列,在查询条件中,如果查询条件中 ROWNUM 大于某一正整数, 则不返还任何结果。
方法二:排序函数 ROW_NUMBER()
注意 不一定要搭配用 PARTITION BY 按字段分组 的,但排序函数 RANK.,DENSERANK,ROW_NUMBER 一定要搭配 Order by
SELECT * FROM
(SELECT E.*,ROW_NUMBER()OVER(ORDER BY EMPNO) AS RN
FROM EMP E
)
WHERE RN BETWEEN 4 AND 8;