Oracle分页查询和合并查询

下面主要为大家讲解一下Oracle里面自带的一个函数rownum,这个函数的作用主要用于筛选指定条件的数据,即分页查询。
一、分页查询
(1)、rownum
先找到小于10的然后找到大于4的

select * from
(select t1.*,rownum rn from
(select * from emp) t1
where rownum<=10) where rn>=4;

注意:顺序不可以反,即<=10不能和>=4对换位置,因为rownum在没有起别名时,只能存在<符号,不能存在>符号。
oracle使用三层过滤:
第一层:

select * from emp;

第二层:

select t1.*,rownum rn from
(select * from emp) t1
where rownum<=10;

第三层:

select * from
(select t1.*,rownum rn from
(select * from emp) t1
where rownum<=10) where rn>=4;
10表示取到第几条,4表示从第几条取

(2)row_number( )over( )
eg:查询出emp 表中 sal 按升序排列后10 - 20 的员工信息

select * from(select salary,row_number()over(order by salary asc)rn from employees)t
where t.rn>=10 and t.rn<=20;

row_number()over()的好处在于它可以当作子查询嵌套在第二层(比rownum()少写一层),当需要对排序后的结果集进行分页筛选时,可以再将排序的语句放在over()里面,然后起个别名,接着再给子查询一个别名,然后就可以通过子查询的别名去找到排序后的别名进行筛选了。


二、合并查询
有时在实际应用中,为了合并多个select语句的结果,可以使用集合(set)操作符号union,union all,intersect,minus 多用于数据量比较大的数据局库,运行速度快。
(1)union
(union 操作符返回两个查询的结果集的并集)
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。

select ename, sal, job from emp where sal>2500
union
select ename, sal, job from emp where job ='MANAGER';

(2)union all
(union all操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。)
该操作符与union相似,但是它不会取消重复行,而且不会排序。

select ename, sal, job from emp where sal>2500
union all
select ename, sal, job from emp where job ='MANAGER';

(3)intersect
(intersect 操作符返回两个结果集的交集)
使用该操作符用于取得两个结果集的交集。

select ename, sal, job from emp where sal>2500
intersect
select ename, sal, job from emp where job ='MANAGER';

(4)minus
(minus 操作符:返回两个结果集的差集,就是减法的意思)
使用改操作符用于取得两个结果集的差集,它只会显示存在第一个集合中,而不存在第二个集合中的数据。

select ename, sal, job from emp where sal>2500
minus
select ename, sal, job from emp where job ='MANAGER';

注:使用 set 操作符注意事项
1、在select 列表中的列名和表达式在数量和数据类型上要相对应
2、括号可以改变执行的顺序
3、order by 子句:
(1)只能在语句的最后出现。(2)可以使用第一个查询中的列名, 别名或相对位置
4、除 union all之外,系统会自动将重复的记录删除
5、系统将第一个查询的列名显示在输出中
6、除 union all之外,系统自动按照第一个查询中的第一个列的升序排列

posted @ 2022-01-13 10:27  IT6889  阅读(324)  评论(0编辑  收藏  举报