Oracle-8 集合运算与高级子查询


联合运算(union)
1.去重
2.默认第一列升序排序
3.使用第一个语句的列名定义查询的列名
4.多个sql语句列个数一致、类型一致、名称可以不一致
5.每个查询不能包含自己的Order by子句,只能在联合之后使用Order by子句

查询编号为7839的员工当前工资、岗位及历史工资、岗位?
select sal 工资,job 岗位 from emp where empno=7839 –1条
union
select sal,job from emp_jobhistory where empno=7839 order by 工资 desc; –5条


完全联合运算(union all)
1.不去重
2.默认不排序
3.使用第一个语句的列名定义查询的列名
4.多个sql语句列个数一致、类型一致、名称可以不一致
5.每个查询不能包含自己的Order by子句,只能在联合之后使用Order by子句

查询编号为7839的员工当前工资、岗位及历史工资、岗位,重复行记录不要求被去掉
select sal 工资,job 岗位 from emp where empno=7839 –1条
union all
select sal,job from emp_jobhistory where empno=7839 order by 工资 desc; –5条


嵌套子查询 与 相关子查询

嵌套子查询:可以单独运行
相关子查询:不可以单独运行,依赖于主查询的某列

嵌套子查询:子查询优先执行,执行完成后的结果集提供给主查询使用
相关子查询:① 主查询每执行一次,获取查询数据
② 子查询使用步骤①中获取的数据,执行确认或取消的判断
③ 循环步骤①②的操作,直到最后一条数据为止

嵌套子查询
查询比本部门平均薪水高的员工姓名,薪水
select deptno,avg(sal) from emp group by deptno;–每个部门的平均薪资
select *
from emp e, (select deptno, avg(sal) avgsal from emp group by deptno) s
where e.deptno = s.deptno
and e.sal > s.avgsal;

相关子查询
查询比本部门平均薪水高的员工姓名,薪水
select * from emp e where sal > (select avg(sal) from emp where deptno =e.deptno);

exists 存在
查询哪些人是经理
select * from emp e where exists (select * from emp where mgr= e.empno);

not exists 不存在
查询哪些人不是经理
select * from emp e where not exists (select * from emp where mgr= e.empno);

猜你喜欢

转载自blog.csdn.net/qq_36090002/article/details/81394698
今日推荐