1.相關子查詢
先執行主查詢,再針對主查詢返回的每一行數據執行子查詢,如果子查詢能夠返回行,則這條記錄就保留,否則就不保留.
舉例:查詢所有是領導的員工的信息
--相關子查詢查詢所有是領導的員工信息
select * from emp e1 where exists (select * from emp e2 where e1.empno=e2.mgr);
舉例:查詢有員工的部門的信息
--使用相關子查詢查詢有員工的部門的信息
select * from dept d1 where exists(select * from emp e1 where e1.deptno=d1.deptno);
2.非相關子查詢
非相關子查詢執行順序是先執行子查詢,再執行主查詢。
舉例:查詢所有是領導的員工信息
--非相關子查詢查詢所有是領導的員工信息
select * from emp where EMPNO in (select mgr from emp);
★但是,如果子查詢數據量比較大,一般不建議使用in,因為in的效率比較低,我們可以使用相關子查詢: