Java39:数据库三(Oracle)-创新互联

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;

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页标题:Java39:数据库三(Oracle)-创新互联
URL地址:http://pwwzsj.com/article/ddssis.html