源码-PL/SQL从入门到精通-第六章-查询数据表-Part 3
来源:互联网 发布:2017网络直播平台 编辑:程序博客网 时间:2024/06/02 03:53
层次化查询为首次接触,还没有吃透。
--6.2复杂查询--6.2.1多表连接查询--内连接(Oracle 特有语法)select emp.empno,emp.ename,emp.job,emp.hiredate,emp.sal,dept.dnamefrom emp,deptwhere emp.deptno=dept.deptno; --内连接(ANSI SQL语法),与上述SQL语句等价select emp.empno,emp.ename,emp.job,emp.hiredate,emp.sal,dept.dnamefrom emp inner join dept on emp.deptno=dept.deptno; --外连接(左外连接)select emp.empno,emp.ename,emp.job,emp.hiredate,emp.sal,dept.dnamefrom emp,deptwhere emp.deptno=dept.deptno(+);--等价ANSI SQL语法select emp.empno,emp.ename,emp.job,emp.hiredate,emp.sal,dept.dnamefrom emp left outer join dept on emp.deptno=dept.deptno;--外连接(右外连接)select emp.empno,emp.ename,emp.job,emp.hiredate,emp.sal,dept.dnamefrom emp,deptwhere emp.deptno(+)=dept.deptno;--等价ANSI SQL语法select emp.empno,emp.ename,emp.job,emp.hiredate,emp.sal,dept.dnamefrom emp right outer join dept on emp.deptno=dept.deptno;--全连接select emp.empno,emp.ename,emp.job,emp.hiredate,emp.sal,dept.dnamefrom emp full outer join dept on emp.deptno=dept.deptno;--交叉连接select emp.empno,emp.ename,emp.job,emp.hiredate,emp.sal,dept.dnamefrom emp,deptselect 22*6 from dual;--自然连接(首次使用)select emp.empno,emp.ename,emp.job,emp.hiredate,emp.sal,dept.dnamefrom emp natural join dept;--6.2.2 使用子查询--非相关子查询SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename = 'SMITH');SELECT empno, ename, job, mgr, hiredate, sal FROM emp WHERE job = (SELECT job FROM emp WHERE ename = 'SMITH'); SELECT empno, ename, job, mgr, hiredate, sal FROM emp WHERE job = (SELECT MIN(sal) FROM emp WHERE ename = 'SMITH'); SELECT empno, ename, job, mgr, hiredate, sal FROM emp WHERE sal = (SELECT MIN (sal) FROM emp); SELECT empno, ename, job, mgr, hiredate, sal, deptno FROM emp WHERE sal IN (SELECT MIN (sal) FROM emp GROUP BY deptno); SELECT empno, ename, job, mgr, hiredate, sal FROM emp WHERE sal >some(SELECT sal FROM emp WHERE job='CLERK') AND job<>'CLERK'; SELECT empno, ename, job, mgr, hiredate, sal FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE job = 'CLERK') AND job <> 'CLERK'; --相关子查询(不太容易理解)SELECT e1.empno, e1.ename, e1.deptno FROM emp e1 WHERE e1.sal > (SELECT AVG (sal) FROM emp e2 WHERE e2.deptno = e1.deptno)ORDER BY e1.deptno --6.2.3 表集合操作SELECT * FROM emp; --联合运算(Union, 将去除重复行)CREATE TABLE emp_history AS SELECT * FROM emp;SELECT empno, ename, sal, hiredate, deptno FROM emp WHERE deptno = 20UNIONSELECT empno, ename, sal, hiredate, deptno FROM emp_history WHERE deptno = 30; --联合运算(Union all,包括重复行) SELECT empno, ename, sal, hiredate, deptno FROM emp WHERE deptno = 20UNION ALLSELECT empno, ename, sal, hiredate, deptno FROM emp_history WHERE deptno = 20; --相交运算 SELECT empno, ename, sal, hiredate, deptno FROM emp WHERE deptno = 20INTERSECTSELECT empno, ename, sal, hiredate, deptno FROM emp_history WHERE deptno = 20; --相减运算 SELECT empno, ename, sal, hiredate, deptno FROM emp WHERE deptno = 20MINUSSELECT empno, ename, sal, hiredate, deptno FROM emp_history WHERE deptno = 20; --6.2.4 层次化查询 SELECT * FROM employees; SELECT LEVEL, LPAD (' ', 2 * (LEVEL - 1)) || last_name "EmpName", hire_date, salary FROM employees--表示根节点为START WITH manager_id IS NULL--PRIOR表示父行的employee_id,等于当前行的manager_idCONNECT BY manager_id = PRIOR employee_id;--构建测试表与插入测试语句create table tab_connect_by (child number,parent number);insert into tab_connect_by (CHILD, PARENT) values(2, 5);insert into tab_connect_by (CHILD, PARENT) values(3, 5);insert into tab_connect_by (CHILD, PARENT) values(10, 15);insert into tab_connect_by (CHILD, PARENT) values(5, 15);insert into tab_connect_by (CHILD, PARENT) values(9, 17);insert into tab_connect_by (CHILD, PARENT) values(8, 17);insert into tab_connect_by (CHILD, PARENT) values(15, 38);insert into tab_connect_by (CHILD, PARENT) values(17, 38);insert into tab_connect_by (CHILD, PARENT) values(6, 38);insert into tab_connect_by (CHILD, PARENT) values(13, 26);insert into tab_connect_by (CHILD, PARENT) values(1, 26);insert into tab_connect_by (CHILD, PARENT) values(12, 26);insert into tab_connect_by (CHILD, PARENT) values(11, 18);insert into tab_connect_by (CHILD, PARENT) values(7, 18);insert into tab_connect_by (CHILD, PARENT) values(38, null);insert into tab_connect_by (CHILD, PARENT) values(26, null);insert into tab_connect_by (CHILD, PARENT) values(18, null);commit;select * from tab_connect_by;--查询语句1select a.child,a.parent,level "层次",sys_connect_by_path(child, '<-') "合并层次",prior a.child "父节点",connect_by_root a.child "根节点",decode(connect_by_isleaf, 1, a.child, null) "子节点",decode(connect_by_isleaf, 1, '是', '否') "是否子节点"from tab_connect_by astart with a.parent is null --从parent为空开始扫描connect by prior a.child = a.parent --以child为父列连接parentorder siblings by child desc --对层次排序;--查询语句2Select level,connect_by_iscycle,connect_by_isleaf,parent,childFrom tab_connect_byConnect by nocycle prior child= parentStart with parent is null;
0 0
- 源码-PL/SQL从入门到精通-第六章-查询数据表-Part 3
- 源码-PL/SQL从入门到精通-第六章-查询数据表-Part 1
- 源码-PL/SQL从入门到精通-第六章-查询数据表-Part 2
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 3
- 源码-PL/SQL从入门到精通-第九章-SQL内置函数-Part 3
- 源码-PL/SQL从入门到精通-第三章-变量和类型-Part 3
- 源码-PL/SQL从入门到精通-第八章-记录与集合-Part 3
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 1
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 2
- 源码-PL/SQL从入门到精通-第十八章-PL/SQL性能优化建议-Part 1
- 源码-PL/SQL从入门到精通-第十八章-PL/SQL性能优化建议-Part 2
- 源码-PL/SQL从入门到精通-第九章-SQL内置函数-Part 1
- 源码-PL/SQL从入门到精通-第九章-SQL内置函数-Part 2
- 源码-PL/SQL从入门到精通-第十六章-动态SQL语句-Part 1
- 源码-PL/SQL从入门到精通-第十六章-动态SQL语句-Part 2
- 源码-PL/SQL从入门到精通-第五章-管理数据表
- 源码-PL/SQL从入门到精通-第七章-操作数据表
- 源码-PL/SQL从入门到精通-第三章-变量和类型-Part 1
- unity3d之VS2013默认编辑器问题
- Java @Deprecated注解的作用及传递性
- JAVA ActiveMQ
- 关于卸载系统级应用的那点事
- spring 注解
- 源码-PL/SQL从入门到精通-第六章-查询数据表-Part 3
- oracle 授予存储过程创表权限
- 字符串拼接汇总
- C语言goto语句以及用goto语句构成循环
- js、jquery比较String型数字大小的时候应该注意的问题
- $.ajax()参数详解
- IT--linux--doc学习--ps
- session 设置超时
- Java常用的工具类一