Oracle!你必需要知道的Knowledge points(下)

子查詢

什麼是子查詢

Oracle!你必需要知道的Knowledge points(下)
當查詢中的限制條件須要另外一個查詢提供時,咱們能夠把兩個查詢語句嵌套起來,提供條件的查詢語句做爲子查詢。
子查詢,也叫內部查詢,先於主查詢執行,子查詢的結果被用於主查詢。
子查詢分爲單行子查詢、多行子查詢和多列子查詢,單行子查詢做爲判斷條件時用單行運算符,多行子查詢和多列子查詢做爲判斷條件時用多行運算符。
單行運算符:>、=、>=、<、<>、<=
多行運算符:in、all、anyide

子查詢能夠嵌套在哪裏

Where子句:做爲非分組函數篩選判斷的條件
From子句:將子查詢的查詢結果做爲一張表來使用
Having子句:做爲分組函數篩選判斷的條件函數

子查詢使用規範

子查詢須要用括號括起來
當子查詢放在from子句中時,是將查詢到的結果做爲一張表來使用,需給別名
單行子查詢用單行運算符,多行子查詢用多行運算符
子查詢放在運算符右邊code

單行子查詢

單行子查詢返回一行一列,使用單行運算符進行鏈接blog

--顯示和僱員7369從事相同工做而且工資大於僱員7876的僱員的姓名和工做。
select ename,job
from emp 
where job = (select job from emp where empno =7369)
and sal > (select sal from emp where empno = 7876);

--查詢工資最低的員工姓名,崗位及工資(子查詢中使用了分組函數)
select ename,job,sal
from emp
where sal = (select min(sal) from emp)

--查詢部門最低工資比20部門最低工資高的部門編號及最低工資(子查詢嵌套在having子句)
select  deptno,min(sal)
from  emp
group by deptno
having min(sal) > (select min(sal) from emp where deptno = 20 );

多行子查詢

多行子查詢返回一行或多行記錄,使用多行運算符進行鏈接it

--查詢是經理的員工姓名、工資
select ename,sal
from emp
where empno in (select mgr from emp)

ANY的使用

表示和子查詢的任意一行結果進行比較,有一個知足條件便可。class

any:大於子查詢結果的任意一個,即大於最小值便可。
<any:小於子查詢結果的任意一個,即小於最大值便可。
=any:等於子查詢結果的任意一個,即等一任意一個便可,至關於in。
Oracle!你必需要知道的Knowledge points(下)select

--查詢部門編號不爲10,且工資比10部門任意一名員工工資高的員工編號,姓名,職位,工資。
select empno,ename,job,sal
from emp
where deptno <> 10 and sal > any(select sal from emp where deptno = 10);

ALL的使用

表示和子查詢的全部行結果進行比較,每一行必須都知足條件。im

<all:表示小於子查詢結果集中的全部行,即小於最小值
>all:表示大於子查詢結果集中的全部行,即大於最大值。
= all :表示等於子查詢結果集中的全部行,即等於全部值。

Oracle!你必需要知道的Knowledge points(下)

--查詢部門編號不爲10,且工資比10部門全部員工工資低的員工編號,姓名,職位,工資。
select empno,ename,job,sal
from emp
where deptno <> 10 and sal > all(select sal from emp where deptno = 10);

持續更新中

相關文章
相關標籤/搜索