當一個查詢結果是另一個查詢的條件的時候,那么就稱為子查詢,子查詢是在SQL語句內的另外一條SELECT語句。
在SELECT、INSERT、UPDATE或DELETE命令中只要是表達式的地方都可以包含子查詢,子查詢甚至可以包含在另外一個子查詢中,以便完成更為復雜的查詢。下面通過一個實例來了解一下子查詢。
實例 查詢部門名稱為RESEARCH的員工信息
在員工表emp中查詢部門名稱(dname)為RESEARCH的員工信息,具體代碼如下。
01 SELECT empno,ename,jobFROM emp 02 WHERE deptno=(SELECT deptno FROM dept 03 WHERE dname='RESEARCH');
通過SQL Developer輸入,查詢結果如圖7.1所示。
圖7.1 顯示部門名稱為RESEARCH的員工信息
因為題目要求查詢的是部門名稱為RESEARCH的員工信息,但是在員工表emp中並沒有部門名稱(dname)字段,只有部門編號(deptno)字段,那么只要知道部門名稱為RESEARCH的編號就可以了,這個要求很簡單,可以通過部門表dept來查詢,代碼如下。
01 select deptno from dept 02 where dname='RESEARCH'
查詢結果如圖7.2所示,通過此語句就可以得到部門編號,為20。
圖7.2 部門名稱為RESEARCH的部門編號
現在題目可以簡化為查詢部門編號為20的員工信息,那么代碼如下。
01 select empno,ename,jobfrom emp 02 where deptno=20;
查詢結果如圖7.1所示。
如果把這兩條查詢語句連起來,就構成了子查詢。如要注意的是,內層查詢稱為子查詢,外層查詢稱為外查詢,如圖7.3所示。
圖7.3 子查詢和外查詢
說明:本實例的需求也可以通過多表關聯查詢來實現,即可以使用如下代碼來替換上面的代碼。將下面的代碼和實例01中的代碼進行對比,可以看出,相比多表關聯查詢,子查詢的使用更加靈活、功能更強大,而且更容易理解。
01 select empno,ename,job 02 from emp join dept on emp.deptno=dept.deptno 03 wheredept.dname = 'RESEARCH';
本文摘自明日科技出版的《零基礎學Oracle》,轉載請注明出處!!!