Oracle初級(jí)測(cè)試題七--子查詢

思考題

查詢工資比Jones工資高的員工信息颂翼?

select * from emp 
where sal > (select sal from emp where ename in 'JONES');


查詢工資最低的員工姓名圾笨?

select ename from emp
where sal = (select min(sal) from emp);

練習(xí)一

  1. 查詢?nèi)肼毴掌谧钤绲膯T工姓名天吓,入職日期
select ename,hiredate

from emp 

where hiredate = (select min(hiredate) from emp);
  1. 查詢工資比SMITH工資高并且工作地點(diǎn)在CHICAGO的員工姓名辨赐,工資宣增,部門名稱
select ename,sal,dept.dname

from emp join dept

on emp.deptno = dept.deptno

where sal > 

(select sal from emp where ename in 'SMITH') 

and dept.loc in 'CHICAGO';

  1. 查詢?nèi)肼毴掌诒?0部門入職日期最早的員工還要早的員工姓名车遂,入職日期
一種解法:

select ename,hiredate

from emp

where hiredate < 

(select min(hiredate) from emp group by deptno having deptno in 20);


另一種解法:

select ename,hiredate

from emp

where hiredate < 

(select min(hiredate) from emp where deptno in 20);
  1. 查詢部門人數(shù)大于所有部門平均人數(shù)的的部門編號(hào),部門名稱舶担,部門人數(shù)

select dept.deptno,dept.dname,count(emp.deptno)

from emp join dept

on emp.deptno = dept.deptno

group by dept.deptno,dept.dname

having count(emp.deptno) > 

(select avg(count(deptno)) from emp group by deptno);

練習(xí)二

  1. 查詢?nèi)肼毴掌诒?0部門任意一個(gè)員工晚的員工姓名坡疼、入職日期,不包括10部門員工
select ename,hiredate

from emp

where hiredate > 

any (select hiredate from emp where deptno in 10) 

and deptno <> 10;
  1. 查詢?nèi)肼毴掌诒?0部門所有員工晚的員工姓名衣陶、入職日期柄瑰,不包括10部門員工
select ename,hiredate

from emp

where hiredate > 

all (select hiredate from emp where deptno in 10)

and deptno <> 10;
  1. 查詢職位和10部門任意一個(gè)員工職位相同的員工姓名,職位剪况,不包括10部門員工
select ename,job

from emp

where job =

any (select job from emp where deptno in 10)

and deptno <> 10;

練習(xí)三

  1. 查詢職位及經(jīng)理和10部門任意一個(gè)員工職位及經(jīng)理相同的員工姓名教沾,職位,不包括10部門員工

select ename,job

from emp

where (job,mgr) in 

(select job,mgr from emp where deptno in 10)

and deptno not in 10;
  1. 查詢職位及經(jīng)理和10部門任意一個(gè)員工職位或經(jīng)理相同的員工姓名译断,職位授翻,不包括10部門員工
select ename,job

from emp

where job in 

(select job from emp where deptno in 10)

or mgr in

(select mgr from emp where deptno in 10)

and deptno not in 10;

練習(xí)四

  1. 查詢比自己職位平均工資高的員工姓名、職位,部門名稱堪唐,職位平均工資
此題我不熟練巡语,建議重復(fù)練習(xí)

select ename,emp.job,dname,avgSal

from emp,

(select job,avg(sal) avgSal from emp group by job) tabjob,

dept

where emp.job = tabjob.job 

and emp.deptno = dept.deptno 

and avgSal < sal;
  1. 查詢職位和經(jīng)理同員工SCOTT或BLAKE完全相同的員工姓名、職位淮菠,不包括SCOOT和BLAKE本人男公。

select ename,job

from emp

where (job,mgr) in (select job,mgr from emp where ename in ('SCOTT','BLAKE'))

and ename not in ('SCOTT','BLAKE');
  1. 查詢不是經(jīng)理的員工姓名。
select ename 

from emp

where empno not in 

(select nvl(mgr,0) from emp);

此處要特別注意只要 (select mgr from emp) 語句返回只要有一條空則

則會(huì)導(dǎo)致主查詢沒有記錄返回合陵。這是因?yàn)樗械臈l件和空值比較結(jié)果都是空值枢赔。因此無論

什么時(shí)候只要空值有可能成為子查詢結(jié)果集合中的一部分,就不能使用NOT IN 運(yùn)算符

切記拥知!切記Lぐ荨!否則最終會(huì)害死自己和同事還有公司的>偈V此怼?铡;Ы摹!峦嗤!

練習(xí)五

  1. 查詢?nèi)肼毴掌谧钤绲那?名員工姓名蕊唐,入職日期。
select ename,hiredate 
from (select * from emp order by hiredate asc)
where rownum <= 5;
  1. 查詢工作在CHICAGO并且入職日期最早的前2名員工姓名烁设,入職日期替梨。
select ename,hiredate

from (select ename,hiredate 

from emp,dept 

where emp.deptno = dept.deptno 

and loc in 'CHICAGO' 

order by hiredate asc)

where rownum <= 2;




第二種解法:

select emp.ename,emp.hiredate

from emp join dept

on emp.deptno = dept.deptno

where dept.loc in 'CHICAGO' and rownum <= 2

order by hiredate;

練習(xí)六

  1. 按照每頁顯示5條記錄,分別查詢第1頁装黑,第2頁副瀑,第3頁信息,要求顯示員工姓名恋谭、入職日期糠睡、部門名稱。
第一頁

select ename,hiredate,dname

from (select ename,hiredate,dname,rownum rn

from emp join dept 

on emp.deptno = dept.deptno where rownum < 6 )

where rn > 0;
第二頁

select ename,hiredate,dname

from (select ename,hiredate,dname,rownum rn 

from emp join dept 

on emp.deptno = dept.deptno where rownum < 11 )

where rn > 5;
第三頁

select ename,hiredate,dname

from (select ename,hiredate,dname,rownum rn

from emp join dept 

on emp.deptno = dept.deptno where rownum < 16 )

where rn > 10;

練習(xí)七

  1. 按照每頁顯示5條記錄疚颊,分別查詢工資最高的第1頁狈孔,第2頁,第3頁信息材义,要求顯示員工姓名均抽、入職日期、部門名稱其掂、工資油挥。
-- 第一步:將其所有的結(jié)果查出
select ename,hiredate,dname,sal
from emp,dept
where emp.deptno = dept.deptno
order by sal desc;
-- 第二步:將第一步的結(jié)果作為一個(gè)表再次進(jìn)行查詢,
--將將偽列重命名為一個(gè)列,此表可以作為制最大數(shù)值的表

select rownum rn tab_allDate.* from 
(select ename,hiredate,dname,sal
from emp,dept
where emp.deptno = dept.deptno
order by sal desc) tab_allDate;
-- 比如此處可以添一句where rownum <= maxNum 
-- 而若想分頁則可以將以上的集合再判斷 rn > minNum



-- 第三步:以上結(jié)果再次作業(yè)一個(gè)表進(jìn)行分頁

-- 第一頁:0~5
select * from
(select rownum rn,tab_allDate.* from 
(select ename,hiredate,dname,sal
from emp,dept
where emp.deptno = dept.deptno
order by sal desc) tab_allDate
where rownum <= 5)
where rn > 0;

--第二頁:5~10
select * from
(select rownum rn,tab_allDate.* from 
(select ename,hiredate,dname,sal
from emp,dept
where emp.deptno = dept.deptno
order by sal desc) tab_allDate
where rownum <= 10)
where rn > 5;
-- 第三頁: 11~15
select * from
(select rownum rn,tab_allDate.* from 
(select ename,hiredate,dname,sal
from emp,dept
where emp.deptno = dept.deptno
order by sal desc) tab_allDate
where rownum <= 15)
where rn > 10;

課后作業(yè)

  1. 查詢工資高于編號(hào)為7782的員工工資,并且和7369號(hào)員工從事相同工作的員工的編號(hào)喘漏、姓名及工資护蝶。
select empno,ename,sal,job
from emp 
where sal > (select sal from emp where empno in 7782)
and job in (select job from emp where empno in 7369);
  1. 查詢工資最高的員工姓名和工資。
select ename,sal
from emp
where sal in (select max(sal) from emp);
  1. 查詢部門最低工資高于10號(hào)部門最低工資的部門的編號(hào)翩迈、名稱及部門最低工資持灰。
--第一步:查詢部門最低工資
select emp.deptno,dname,min(sal) from emp,dept
where emp.deptno = dept.deptno;
--第二步:查詢10號(hào)部門的最低工資
select min(sal) from emp where deptno in 10;
--第三步:解題

--第一種 解題方式:
select emp.deptno,dname,min(sal) from emp,dept
where emp.deptno = dept.deptno
group by emp.deptno,dname --group by是所有列必須出現(xiàn)在后邊
having min(sal) > (select min(sal) from emp where deptno in 10);
--第二種 解題方式:
select tab_minSal_gb_deptno.deptno,dname,tab_minSal_gb_deptno.minSal_by_deptno
from (select min(sal) minSal_by_deptno,deptno from emp group by deptno) tab_minSal_gb_deptno,
(select min(sal) minSal_deptno10 from emp where deptno in 10),dept
where tab_minSal_gb_deptno.deptno = dept.deptno 
and minSal_by_deptno > minSal_deptno10;
  1. 查詢員工工資為其部門最低工資的員工的編號(hào)和姓名及工資。
--第一步:先查部門的最低工資
select deptno,min(sal) from emp group by deptno;
--第二步:將上面的結(jié)果集作為一個(gè)表负饲,進(jìn)行多表查詢
select empno,ename,sal 
from emp,(select deptno,min(sal) minSal_gb_deptno from emp group by deptno) tab_minSal_gb_deptno
where emp.deptno = tab_minSal_gb_deptno.deptno
and sal = minSal_gb_deptno;
  1. 顯示經(jīng)理是KING的員工姓名堤魁,工資。
--第一步:先查出KING的員工編號(hào)
select empno from emp where ename in 'KING';
--第二步:解題 
select ename,sal
from emp
where mgr in (select empno from emp where ename in 'KING')
  1. 顯示比員工SMITH參加工作時(shí)間晚的員工姓名返十,工資妥泉,參加工作時(shí)間。
--第一步:先查出SMITH參加工作的時(shí)間
select hiredate from emp where ename in 'SMITH';
--第二步:解題 
select ename,sal,hiredate
from emp
where hiredate > (select hiredate from emp where ename in 'SMITH');
  1. 使用子查詢的方式查詢哪些職員在NEW YORK工作洞坑。
select * from emp,dept
where emp.deptno in dept.deptno
and loc in 'NEW YORK';
  1. 寫一個(gè)查詢顯示和員工SMITH工作在同一個(gè)部門的員工姓名盲链,雇用日期,查詢結(jié)果中排除SMITH迟杂。
select ename,hiredate
from emp,dept
where emp.deptno in dept.deptno
and emp.deptno in (select deptno from emp where ename in 'SMITH')
and ename not in 'SMITH';
  1. 寫一個(gè)查詢顯示其工資比全體職員平均工資高的員工編號(hào)刽沾、姓名。
select empno,ename
from emp
where sal > (select avg(sal) from emp);
  1. 寫一個(gè)查詢顯示其上級(jí)領(lǐng)導(dǎo)是King的員工姓名排拷、工資侧漓。
select ename,sal
from emp
where mgr in (select empno from emp where ename in 'KING');
  1. 顯示所有工作在RESEARCH部門的員工姓名,職位监氢。
select ename,job
from emp,dept
where emp.deptno in dept.deptno
and dname in 'RESEARCH';
  1. 查詢每個(gè)部門的部門編號(hào)布蔗、平均工資,要求部門的平均工資高于部門20的平均工資浪腐。
--第一步:查詢第個(gè)部門的部門編號(hào)纵揍,平均工資
select deptno,avg(sal) avgSal_gb_deptno
from emp
group by deptno;
--第二步:查詢部門20的平均工資
select deptno,avg(sal) avgSal_gb_deptno_20
from emp
group by deptno
having deptno in 20;
--第三步:解題 
select deptno,avg(sal)
from emp
group by deptno
having avg(sal) > 
(select avg(sal)
from emp
group by deptno
having deptno in 20);
  1. 查詢大于自己部門平均工資的員工姓名,工資议街,所在部門平均工資泽谨,高于部門平均工資的額度。
--第一步:查詢自己部門的平均工資
select deptno,avg(sal) from emp group by deptno;
--第二步:將以上結(jié)果作為一個(gè)表進(jìn)行多表查詢

select ename,sal,avgSal_gb_deptno,(sal - avgSal_gb_deptno) 高于平均工資的差值
from emp,
(select deptno,avg(sal) avgSal_gb_deptno from emp group by deptno) tab_gb_deptno
where emp.deptno in tab_gb_deptno.deptno
and sal > avgSal_gb_deptno;
  1. 列出至少有一個(gè)雇員的所有部門
select deptno,count(1)
from emp
group by deptno
having count(*) > 0;
  1. 列出薪金比"SMITH"多的所有雇員
select * from emp
where sal > (select sal from emp where ename in 'SMITH');
  1. 列出入職日期早于其直接上級(jí)的所有雇員
select worker.ename,worker.hiredate
from emp worker,emp manager
where worker.mgr in manager.empno
and worker.hiredate < manager.hiredate;
  1. 找員工姓名和直接上級(jí)的名字
select worker.ename 員工姓名,manager.ename 直接上級(jí)姓名
from emp worker,emp manager
where worker.mgr in manager.empno(+);
  1. 顯示部門名稱和人數(shù)
--第一步:先查出部門人數(shù)
select count(*) countNum,deptno
from emp
group by deptno;
--第二步:以上面的查詢結(jié)果作一個(gè)表傍睹,多表查詢
select dname,countNum
from dept,(
select count(*) countNum,deptno
from emp
group by deptno) tab_countNum_gb_deptno
where dept.deptno in tab_countNum_gb_deptno.deptno(+);
  1. 顯示每個(gè)部門的最高工資的員工
select ename,sal,deptno
from emp
where sal in
(select max(sal) from emp group by deptno);
  1. 顯示出和員工號(hào)7369部門相同的員工姓名隔盛,工資
select ename,sal 
from emp
where deptno in (select deptno from emp where empno in 7369);
  1. 顯示出和姓名中包含"W"的員工相同部門的員工姓名
--第一步:先查出姓名中包含"W"的員工部門
select deptno from emp where ename like '%W%';
--第二步:解題 
select ename
from emp 
where deptno in
 (select deptno from emp where ename like '%W%')
  1. 顯示出工資大于平均工資的員工姓名,工資
select ename,sal
from emp 
where sal > (select avg(sal) from emp);
  1. 顯示出工資大于本部門平均工資的員工姓名拾稳,工資
--第一步:查詢本部門的平均工資
select avg(sal),deptno from emp group by deptno;
--第二步:解題
select ename,sal
from emp,(select avg(sal) avgSal_gb_deptno,deptno from emp group by deptno) tab_avgSal_gb_deptno
where emp.deptno in tab_avgSal_gb_deptno.deptno
and sal > avgSal_gb_deptno;
  1. 顯示每位經(jīng)理管理員工的最低工資吮炕,及最低工資者的姓名
--第一步:先查出每位經(jīng)理管理的員工的最低工資
select min(sal),mgr from emp where mgr is not null group by mgr;
--第二步:解題 
select sal,ename
from emp,(select min(sal) minSal,mgr from emp where mgr is not null group by mgr) tab_minSal_gb_mgr
where emp.mgr in tab_minSal_gb_mgr.mgr
and sal in minSal;
  1. 顯示比工資最高的員工參加工作時(shí)間晚的員工姓名,參加工作時(shí)間
select ename,hiredate
from emp
where hiredate > (select hiredate from emp where sal in (select max(sal) from emp));
  1. 顯示出平均工資最高的的部門平均工資及部門名稱
--第一步:先查出部門平均工資及名稱
select avg(sal) avgSal,deptno from emp group by deptno;
--第二步:解題 
--方法一
select * from (select dname,avg(sal) avgsal from emp e,dept d where e.deptno = d.deptno group by dname)
where avgsal = (select max(avg(sal)) from emp group by deptno);

--方法二
select dname,avg(sal)  from emp e,dept d 
where e.deptno = d.deptno 
group by dname 
having avg(sal) =(select max(avg(sal)) from emp group by deptno);

分割線


博主為咯學(xué)編程:父母不同意學(xué)編程访得,現(xiàn)已斷絕關(guān)系;戀人不同意學(xué)編程龙亲,現(xiàn)已分手;親戚不同意學(xué)編程陕凹,現(xiàn)已斷絕來往;老板不同意學(xué)編程,現(xiàn)已失業(yè)三十年。鳄炉。杜耙。。拂盯。佑女。如果此博文有幫到你歡迎打賞,金額不限谈竿。团驱。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末空凸,一起剝皮案震驚了整個(gè)濱河市嚎花,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呀洲,老刑警劉巖紊选,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異道逗,居然都是意外死亡兵罢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門憔辫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趣些,“玉大人仿荆,你說我怎么就攤上這事贰您。” “怎么了拢操?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵锦亦,是天一觀的道長。 經(jīng)常有香客問我令境,道長杠园,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任舔庶,我火速辦了婚禮抛蚁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惕橙。我一直安慰自己瞧甩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布弥鹦。 她就那樣靜靜地躺著肚逸,像睡著了一般爷辙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朦促,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天膝晾,我揣著相機(jī)與錄音,去河邊找鬼务冕。 笑死血当,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的禀忆。 我是一名探鬼主播歹颓,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼油湖!你這毒婦竟也來了巍扛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤乏德,失蹤者是張志新(化名)和其女友劉穎撤奸,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喊括,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胧瓜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了郑什。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片府喳。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蘑拯,靈堂內(nèi)的尸體忽然破棺而出钝满,到底是詐尸還是另有隱情,我是刑警寧澤申窘,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布弯蚜,位于F島的核電站,受9級(jí)特大地震影響剃法,放射性物質(zhì)發(fā)生泄漏碎捺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一贷洲、第九天 我趴在偏房一處隱蔽的房頂上張望收厨。 院中可真熱鬧,春花似錦优构、人聲如沸诵叁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽黎休。三九已至浓领,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間势腮,已是汗流浹背联贩。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捎拯,地道東北人泪幌。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像署照,于是被迫代替她去往敵國和親祸泪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 章節(jié)目標(biāo) 通過本章學(xué)習(xí)建芙,應(yīng)達(dá)到如下目標(biāo): 掌握子查詢可以解決的問題没隘; 了解子查詢的分類; 掌握單行子查詢禁荸、多行子查...
    涎涎閱讀 1,327評(píng)論 0 0
  • 引出 ?請(qǐng)思考如下問題右蒲? –查詢所有員工的每個(gè)月工資總和,平均工資赶熟? –查詢工資最高和最低的工資是多少瑰妄? –查詢公...
    C_cole閱讀 7,293評(píng)論 0 3
  • 目標(biāo) 聚合函數(shù) 分組函數(shù) 子查詢 多行子查詢 引出 ?請(qǐng)思考如下問題? –查詢所有員工的每個(gè)月工資總和映砖,平均工資间坐?...
    wqjcarnation閱讀 4,154評(píng)論 0 6
  • 將壓力變?yōu)閯?dòng)力,真那么容易就好了邑退。你己經(jīng)把公司和家全敗光了竹宋,還留下個(gè)大窟窿,我和兒孫都飽受了奔波瓜饥,分離之痛逝撬。我們都...
    寒江雪810閱讀 144評(píng)論 0 0
  • —1— 一星期之前趣苏,去一個(gè)朋友家里吃飯,飯菜很豐富梯轻,朋友食磕,他老婆還有一個(gè)七歲女兒,一家人都圍著桌子喳挑,有說有笑彬伦,氣氛...
    羅小宸閱讀 227評(píng)論 0 0