Oracle資料庫學習筆記(十六) 子查詢

2021-10-23 08:10:21 字數 2763 閱讀 4234

查詢出工資和 scott 一樣的員工資訊

select

*from emp

where sal in

(select sal

from emp

where ename =

'scott'

);

分步解析:

1、先查詢出 scott 的工資

select sal

from emp

where ename =

'scott'

注意:這裡的員工姓名是區分大小寫的。

雖然上述語句那麼長,但是實際上它就是乙個值。

2、把上面的語句用括號括起來,再查詢出工資和 scott 一樣的員工資訊

select

*from emp

where sal =

(select sal

from emp

where ename =

'scott'

)

**注意:在 where sal = 這裡寫等號是有隱患的。**因為無法保證乙個公司名字為 scott 的員工是唯一的,有可能發生重名的現象,這樣查詢出來的結果就不是乙個工資的值了,而是所有名字為 scott 的員工的工資的集合,這樣再寫等號就會報錯。為了避免這種情況發生,建議把等號改為 in。

3、更正後最終結果

select

*from emp

where sal in

(select sal

from emp

where ename =

'scott'

);

當然,如果是根據主鍵查詢,返回的結果自然是唯一的,還是可以用等號的。

查詢出工資和 10 號部門任意員工一樣的員工資訊

select

*from emp

where sal in

(select sal

from emp

where deptno =10)

;

分步解析:

1、先查出 10 號部門所有人工資的集合

select sal

from emp

where deptno =

10

2、把上面的語句用括號括起來,再查詢出工資和 10 號部門任意員工一樣的員工資訊

select

*from emp

where sal in

(select sal

from emp

where deptno =10)

;

查詢出每個部門最低工資,和最低工資員工姓名,和該員工所在部門名稱

select t.deptno, t.msal, e.ename, d.dname

from

(select deptno,

min(sal)

as msal

from emp

group

by deptno

) t, emp e, dept d

where t.deptno = e.deptno

and t.msal = e.sal

and e.deptno = d.deptno;

分步解析:

當前沒有每個部門最低工資這張表,需要自己先查詢出來。員工姓名和部門名稱都可以根據 emp 表和 dept 表進行查詢。

1、先查詢出每個部門最低工資

select deptno,

min(sal)

as msal

from emp

group

by deptno;

2、三表聯查,得到最終結果

select t.deptno, t.msal, e.ename, d.dname

from

(select deptno,

min(sal)

as msal

from emp

group

by deptno

) t, emp e, dept d

where t.deptno = e.deptno

and t.msal = e.sal

and e.deptno = d.deptno;

msal 這個別名可以使用,因為會先執行子查詢,執行完後 msal 這個別名就生效了,可以在外部的 select 中使用。

t.deptno = e.deptno – 確保在同乙個部門(t 表和 emp 表聯合)

t.msal = e.sal – 通過這個條件得到最低工資員工姓名(t 表和 emp 表聯合)

e.deptno = d.deptno – 通過這個條件得到員工所在部門名稱(emp 表和 dept 表聯合)

t.deptno – 部門編號

t.msal – 最低工資

e.ename – 員工姓名

d.dname – 部門名稱

Oracle資料庫學習筆記 一

微軟 sql server 和 access 瑞典mysql ab公司 mysql ibm公司 db2 美國sybase公司 sybase ibm公司 informix 美國oracle公司 oracle 小型資料庫 access 中型資料庫 sql server mysql informix 大型...

資料庫 Oracle學習筆記(1)

類class class student 學生物件public class student byte b 100 int i 10000 double d 3.14 char c 我 boolean f true id name age1001 張三30 1002 李四25 nickname pas...

資料庫 Oracle學習筆記(4)

select from emp 查詢表中所有列 select ename,sal from emp 查詢表中ename列,和sal列 select concat ename,的工資是 from emp smith的工資是 smith的工資是 sal smith的工資是800 select conca...