子查詢所要解決的問(wèn)題是不能一步求解,需要兩步或者多步求解的類(lèi)型
注意的問(wèn)題:
1、括號(hào)
2、合理的書(shū)寫(xiě)風(fēng)格
3、可以在主查詢的where select having from后面放置子查詢
4、不可以在group by后面放子查詢
5、強(qiáng)調(diào)from后面的子查詢
(重要)---查詢員工信息:?jiǎn)T工號(hào) ?姓名 ?薪水
select * from ( select empno,ename,sal from emp );
---查詢員工信息:?jiǎn)T工號(hào)? 姓名? 薪水 ?年薪
select * from ( select empno,ename,sal,sal*12 annlsal from emp );
6、主查詢和子查詢可以不是同一張表;只要子查詢返回的結(jié)果主查詢可以使用即可
查詢部門(mén)名稱(chēng)是sales的員工的信息
select? e.*? from emp where e.deptno= (select * from dept where dname='sales' )------------子查詢
select ?e.* ?from emp e,dept d where e.deptno=d.deptno and d.dname='sales'----------------多表查詢
理論上使用多表查詢比子查詢快
7、一般不在子查詢中使用order by;但top-N分析問(wèn)題中,必須對(duì)子查詢排序
8、子查詢(內(nèi)查詢)在主查詢之前一次執(zhí)行完成,子查詢的結(jié)果被主查詢使用(外查詢):一般先執(zhí)行子查詢,再執(zhí)行主查詢;但相關(guān)子查詢例外
9、子查詢分為:?jiǎn)涡凶硬樵兒投嘈凶硬樵?/p>
單行子查詢只能使用單行操作符 多行子查詢只能使用多行操作符
多行子查詢操作符:
in ? ? ? ? ? ? 等于列表中的任何一個(gè)
any ? ? ? ? ?和子查詢返回的任意一個(gè)值比較
select * from emp where sal > (select min(sal) from emp where deptno=30)
=select * from emp where sal > any (select sal from emp where deptno=30)
all ? ? ? ? ? ?和子查詢返回的所有值比較
select * from emp where sal > (select max(sal) from emp where deptno=30)
=select * from emp where sal > all(select sal from emp where deptno=30)
10、注意子查詢的null
not in 子查詢中不能有空值
