一。子查询解决什么问题: 一个查询查询不到结果的时候,可以使用子查询来丰富查询的条件
子查询的格式: 用一个小括号包含,然后在里面写sql语句
子查询的注意事项:
1. 一定要有小括号
2. 一定要注意你的书写格式
3. 子查询可以放在select,from ,where having,order by 后面
4. 子查询一定不能放在group by的后面
5. 子查询和主查询可以不是同一张表,只要子查询的结果在主查询中能用就可以
5. 子查询中一般都不排序,但是在TOP-N中需要排序
7. 一般是先执行子查询操作,在执行主查询操作,但是在相关子查询中先执行主查询,在执行子查询
8. 对于子查询的结果,如果是单行只能用单行操作符,如果是多行,只能用多行操作符
9. 自查中的null处理
例:select * from (
select ename,job,sal from emp
);
一定要注意的地方: 子查询不能过多的去嵌套,一般嵌套三层,加多了就影响性能
对于子查询的结果,如果是单行只能用单行操作符,如果是多行,只能用多行操作符 --返回多行会与单行操作符不匹配
多行操作符 int not in any all
例: -- 查询比30号部门员工工资高的员工信息
select * from emp where sal > any(
select sal from emp where deptno = 30
);
例:查询基层员工
-- select *
from emp
where empno not in(
select mgr from emp where mgr is not null
);