Oracle rownum,分页,临时表,相关子查询,行转列函数

 

--rownum 行号(伪列)

关于rownum
1、rownum永远按照默认的顺序生成  (可以先进行子查询,在子查询的基础上添加行号rownum来改变子查询中的默认行号的顺序)
2、rownum只能使用<、<=;不能使用>、>=  (因为rownum永远从1开始计数)

select rownum,empno,ename,sal
from (select * from emp order by sal desc)   --表的行号是固定的,order by之后的行号顺序可能会乱套
where rownum<=3;   --rownum是在子查询产生的新表的基础上添加的行号,防止order by之后行号乱套。


--oracle分页(rownum)
select *
from 	(select rownum r,e1.*
	from (select * from emp order by sal) e1
 	where rownum <=8
	)
where r >=5;   --rownum不能使用>、>=。 嵌套子查询,为内层子查询的rownum取一个别名r,对r使用>、>=。
--内层子查询为了改变表固定的默认行号。外层子查询是为了解决>、>=的问题。

--临时表
create global temporary table xxx;   --手动创建临时表  (排序会自动创建一个临时表。rownum会产生临时表,所以行号是固定的)

临时表特点:当事务或者会话结束的时候,表中的数据自动删除


--相关子查询: 将主查询中的值 作为参数传递给子查询

select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal
from emp e
where sal > (select avg(sal) from emp where deptno=e.deptno);   --相关子查询


--行转列  wm_concat(varchar2) 多行函数

select deptno,wm_concat(ename) 别名
from emp
group by deptno;   --把部门号相同的所有的记录的ename值拼成字符串

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值