Java39: 数据库三(Oracle)
admin
2023-06-07 11:21:50
0

Oracle 高级查询

1 集合运算

    union 并集 把两张表合成一张表

    intersect 交集 一样的留下,不一样的不要

    minus 减去 前面的结果减去后面的结果

create table emp3 as 
select * from emp2 where deptno=20;
create table emp4 as 
select * from emp2 where deptno=30;

alter table emp3 rename to emp20;
alter table emp4 rename to emp30;

select * from emp20;
select * from emp30;

select * from emp20 union select * from emp30;

select * from emp30 intersect select * from emp2;

select * from emp2 minus select * from emp30;


2 connect by 和start with

依托于该语法,我们可以将一个表形结构的以树的顺序列出来

提供一个伪列 level

level

找到头
select ename from emp2 where mgr is null;
select empno,ename,mgr from emp start with ename='KING' connect by prior empno=mgr;

select level,empno,ename,mgr from emp start with ename=(select ename from emp2 where mgr is null) connect by prior empno=mgr;


select * from (select level lv,empno,ename,mgr from emp start with ename=(select ename from emp2 where mgr is null) connect by prior empno=mgr) where lv=2;


3高级分组函数


rollup 函数 小计

rollup 函数多一行 小计

对于分组的列为null

对于聚集函数为求 小计

select job,sum(sal) from emp GROUP BY rollup(job);

select job,sum(sal),round(avg(sal)),max(sal),count(empno)from emp group by rollup(job);

统计rollup(x,y) 统计第一个x 不统计y

select dname,job,sum(sal) from emp inner join dept using(deptno) group by rollup(dname,job);

cube 统计所有的列

select dname,job,sum(sal) from emp inner join dept using(deptno) froup by cube(dname,job) order by dname;

rollup 和cube 就是汇总的结果



grouping 和grouping sets 

select grouping(dname),dname ,grouping(job),job,sum(sal) from emp inner join dept using(deptno) group by rollup(dname,job) order by dname;
select * from (select grouping(dname),dname ,grouping(job) N,job,sum(sal) from emp inner join dept using(deptno) group by rollup(dname,job) order by dname) where dname='SALES' and N=1 ;
select grouping(dname),dname,grouping(job),job,sum(sal) from emp inner join dept using(deptno) group by cube(dname,job) order by dname;


只查询汇总的行 总的汇总也不要

select dname,job,sum(sal) from emp inner join dept using(deptno) group by grouping sets(dname,job);

如果需要查询的结果只有小计 可以用cube 和 grouping sets 用grouping sets 的效率高于cube 和rollup


排名函数

    既能排序又能排名

rank() over( orader by xx)

重复就会削去下一个编号

select rank() over(order by sal desc),ename,sal from emp;

dense_rank() over(orader by xx)

重复不削去编号

select dense_rank() over(order by sal desc),ename,sal from emp;


先排序在rownum  比rownum 简单

select row_number() over(order by sal desc),ename from emp;









相关内容

热门资讯

“用戒指套住你洗碗时沾满泡沫的... 近日,福建福州地铁4号线车厢内的一组宣传标语引起不少乘客注意。网友发布的图片显示,标语和插图内容多围...
对标Reddit,Meta悄然... IT之家 5 月 24 日消息,Meta 公司悄然推出一款名为“Forum(论坛)”的独立群组应用。...
广西人大成立人工智能联络小组 ... 南宁5月24日电 (陈秋霞)5月23日,广西壮族自治区人大常委会涉侨工作人大代表联系点人工智能联络小...
四川泸州行道树断裂砸伤3人,一... 5月23日上午,多位网友发布视频称,四川省泸州市江阳区北城街道忠山路三段附近,有行道树断裂倒地,经过...
我国科研团队成功研制智能透射电... 记者从中国科学院大连化学物理研究所获悉,近期该所科研团队成功研制出智能透射电子显微镜“原眼一号”,该...
伊朗革命卫队:伊武装力量保持“... △伊朗德黑兰(资料图)据伊朗方面24日消息,伊朗伊斯兰革命卫队总司令艾哈迈德·瓦希迪当日发表讲话说,...
武契奇抵京:这无疑是我政治生涯... 据央视新闻消息,塞尔维亚总统武契奇5月24日至28日对中国进行国事访问。24日中午,武契奇总统乘机抵...
泽连斯基:俄方发射了90枚导弹... 当地时间24日,乌克兰总统泽连斯基通过社交媒体发文表示,自当日凌晨起,乌克兰救援部门及相关应急部门已...
“都到这个关键时刻了,难道还要... 中国应急管理报消息,5月22日19时29分,沁源县山西通洲集团留神峪煤矿发生瓦斯爆炸事故。事故发生后...
分布式电推进协同控制大模型决策... 分布式电推进协同控制大模型决策系统已融合人工智能AI软件平台 北京华盛恒辉分布式电推进协同控制大模型...