三 子查詢 偽劣和常用函式

2021-06-23 06:45:09 字數 1857 閱讀 9013

三、

子查詢、偽劣和常用函式

select 語句可以當做返回的集合做為值

一、單行子查詢

1、子查詢做資料來源:

select ename from (select * from emp); 

2、子查詢做條件

: select ename from emp where sal=(select sal from emp where sal=1000);

3、多行子查詢: 

select ename from emp where sal in (select sal from emp where sal>1000);

4、any(任意的意思

):select * from emp where sal翻譯:只要比括號中任意乙個值小就可以輸出,any和

all是將

sal與子查詢返回的多值一條一條的比較所以不會報錯

5、all(所有的意思

):select * from emp where sal翻譯:比子查詢中的所有的值都小就輸出

二、oracle中的偽列 1、

rowid:

返回該行的實體地址

:select rowid from dual;

每次查詢都會有rowid

只是它自動隱藏了 2、

rownum:

返回改行的行號:

select rownum from dual;

每一行返回乙個行號自動隱藏

3、rouwnum 

一般用於子查詢分頁查詢

select * from (select rownum r,ename,job,sal from (select ename,job,sal from emp order by sal desc ))  where r>=1 and r<=3; 

首先將以工資降序作為乙個結果集資料來源然後給他新增乙個rownum

最後輸出這

rownum等於1

到3的結果集

易錯區:

select

rownum r,ename,sal

from

empwhere

r>=

1and

r<=3; 

select

* from

(select

rownum

r,ename,job,sal 

from

emp 

order

bysal 

desc

) t 

where

r>=

1and

r<=3; 

第一種:執行順序就出錯了

第二種:將工資order by

的時候就已經打亂

rownum

的順序 使其變得無意義

4、外部查詢用於分組

,注意:當子查詢作為列名時只能返回一條資料

查詢 dept

表資料 並得到每個

dept

部門的員工

select

dept.dname,dept.deptno,(

select

count(1

) from

emp 

where

emp.deptno=dept.deptno)t 

from

dept;

個人理解:首先執行子查詢中的內容,當執行到dept

時則擴大範圍到外層尋找

dept

,找到時連帶外層會執行一次並得到

dept

一行值,然後回到子查詢中運算由於只能返回乙個值所以只能返回

count

記錄行數而不能是字元

資料庫常用SQL語句(三) 子查詢

一 為什麼會使用子查詢 雖然可以通過連線查詢來實現多表查詢資料記錄,但不建議使用,因為連線查詢的效能很差,為什麼呢?我們來進行分析,例如 我們要查詢部門表t dept 和雇員表t employee中的資料記錄,一般可能會寫成 select from t dept t1,t employee t2 w...

Oracle資料庫 三 子查詢和連線

使用子查詢 什麼是子查詢?子查詢就是巢狀查詢,它是巢狀在另乙個語句中的select語句。在很多情況下,where後面的條件不是乙個確切的值或表示式,而是另外乙個查詢語句的查詢結構。子查詢不僅僅出現在select語句中,也會出現在delete和update語句中,它本質上是where後面的乙個條件表示...

oracle 3 子查詢和常用函式

主要內容 子查詢 偽例 鎖的概念 1。子查詢 子查詢在select update delete 語句內部可以出現select 語句,內部的select 語句結果可以作為外部語句中條件子句的一部分,也可以作為外部查詢的臨時表,子查詢的型別有 單行子查詢 不向外部返回結果,或者只返回一行結果 多行子查詢...