Oracle 子查询

子查询注意的问题:
1、括号
2、合理的书写风格
3、可以在主查询的where select having from 后面使用子查询 (主查询select后面的子查询必须是单行查询)
4、不可以在group by使用子查询
5、主查询和子查询可以不是同一张表;只有子查询返回的结果 主查询可以使用即可
6、一般不在子查询中排序;但在top-n分析问题中 必须对子查询排序
7、一般先执行子查询,再执行主查询;但相关子查询例外
8、单行子查询只能使用单行操作符;多行子查询只能使用多行操作符
9、子查询中的null。   not in(多行子查询),如果子查询中有null,那么主查询不会查询到任何结果(但是可以使用in(包含null值的多行子查询))。因为not in等同于 !=all (!=null永远为假,Oracle中的null表示未知的任意数)(in 表示=any)  


--where后面的子查询(子查询和主查询不是同一张表)。 sql优化:尽量用多表查询代替该子查询
select *
from emp
where deptno in (select deptno from dept where dname='SALES' or dname='ACCOUNTING');

--多表查询
select e.*
from emp e,dept d
where e.deptno=d.deptno and (d.dname='SALES' or d.dname='ACCOUNTING');

--sql优化:尽量使用多表查询代替子查询

--单行子查询只能使用单行操作符
--只返回一条记录的子查询就是单行子查询。单行操作符:=,>,<,>=,<=,<>;  多行操作符:in, not in,any ,all 

select *
from emp
where empno not in (select mgr from emp where mgr is not null);  --not in(多行子查询) 子查询中不能返回null值。

猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/82354168
今日推荐