三、
子查詢、偽劣和常用函式
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 語句結果可以作為外部語句中條件子句的一部分,也可以作為外部查詢的臨時表,子查詢的型別有 單行子查詢 不向外部返回結果,或者只返回一行結果 多行子查詢...