1.選擇在部門(mén)30中員工的所有信息?
關(guān)鍵詞:部門(mén)30 所有信息:*
depto=30
select * from emp where depto=30; 還是‘30’
2.列出職位為(MANAGER)的員工的編號(hào)熙涤,姓名杨刨?
EMPNO:編號(hào) ENAME:姓名
關(guān)鍵詞:職位為MANAGER
select EMPNO,ENAME from emp where job='MANAGER'
3.找出獎(jiǎng)金高于工資的員工桅打?
COMM:獎(jiǎng)金 SAL:工資
關(guān)鍵詞:獎(jiǎng)金>工資
select * from emp where comm>sal
4.找出每個(gè)員工獎(jiǎng)金和工資的總和
錯(cuò)誤的方法:select sum(sal+comm) from emp;
正確的方法:select empno,sal+nvl (comm,0) from emp;
empno,sal+nvl (comm,0) 也可以換成sal+nvl(comm,0),empno.改變的是顯示的順序。
5.找出部門(mén)10中的經(jīng)理(MANAGER)和部門(mén)20中的普通員工(CLERK)
select * from emp where deptno=10 and job='MANAGER'
union
select * from emp where deptno=20 and job='clerk';
union
UNION 操作符用于合并兩個(gè)或多個(gè) SELECT 語(yǔ)句的結(jié)果集。
6.找出部門(mén)10中既不是經(jīng)理也不是普通員工漱受,而且工資大于等于2000的員工
select * from emp
where sal>2000 and deptno='10' and job !='MANAGER' and job !='CLERK';
7、找出有獎(jiǎng)金的員工的不同工作
select distinct job from emp where comm is not null;
關(guān)鍵是要把我不同工作的含義骡送,意思就是不重復(fù)昂羡。
有獎(jiǎng)金就是需要排除null,所以設(shè)置is not null摔踱!
8.找出沒(méi)有獎(jiǎng)金或者獎(jiǎng)金低于500的員工
select * from emp where comm<500 or comm is null;
9.顯示雇員姓名虐先,根據(jù)其服務(wù)年限,將最老的雇員排在最前面
select ename,hiredate from emp order by hiredate;
關(guān)鍵是解決服務(wù)年限問(wèn)題派敷,使用order by語(yǔ)句蛹批,初始默認(rèn)升序排列,asc篮愉,如果要降序使用desc般眉。
10.找出每個(gè)月倒數(shù)第三天受雇的員工
select * from emp where hiredate=last_day(hiredate)-2;
11、分別用case和decode函數(shù)列出員工所在的部門(mén)潜支,deptno=10顯示'部門(mén)10',deptno=20顯示'部門(mén)20',deptno=30顯示'部門(mén)30',deptno=40顯示'部門(mén)40',否則為'其他部門(mén)':
decode語(yǔ)句:
select ename,decode(deptno,'10','部門(mén)10'
,'20','部門(mén)20'
,'30','部門(mén)30'
,'40','部門(mén)40',
'其他部門(mén)')
from emp;
關(guān)鍵:
12、分組統(tǒng)計(jì)各部門(mén)下工資>500的員工的平均工資*/
Select avg(sal) from scott.emp where sal > 500 group by deptno
關(guān)鍵詞柿汛,首先判斷工資>500,然后是求平均工資冗酿,要求分組統(tǒng)計(jì)就需要開(kāi)始思考用group by埠对,在內(nèi)部判斷用where。
13裁替、統(tǒng)計(jì)各部門(mén)下平均工資大于500的部門(mén)
select deptno from scott.emp group by deptno having avg(sal) > 500
首先是最后輸出部門(mén)项玛,先求平均工資,就勢(shì)必涉及分組弱判,然后再求平均工資大于500襟沮,建立在分組上的篩選,需要考慮having
14昌腰、算出部門(mén)30中得到最多獎(jiǎng)金的員工獎(jiǎng)金
select max(comm) from scott.emp where deptno = 30
關(guān)鍵詞是最多獎(jiǎng)金的員工獎(jiǎng)金开伏,最多需要用max(comm)
15、算出部門(mén)30中得到最多獎(jiǎng)金的員工姓名
select ename from scott.emp where deptno = 30 and comm = (select max(comm) from scott.emp
where deptno = 30)
在部門(mén)30得到最多獎(jiǎng)金員工獎(jiǎng)金的基礎(chǔ)上遭商,此題需要考慮員工的姓名固灵,最后輸出是ename,此外要讓獎(jiǎng)金等于最多的人
16劫流、算出每個(gè)職位的員工數(shù)和最低工資
select count(ename),min(sal) from emp group by job;
算出員工數(shù)和最低工資巫玻,所以需要用到count函數(shù)和min函數(shù)。對(duì)于count函數(shù)數(shù)的是行數(shù)祠汇,任意的內(nèi)容都可行仍秤。
17、列出員工表中每個(gè)部門(mén)的員工數(shù)可很,和部門(mén)no
select count(ename),deptno from emp group by deptno;
員工數(shù)和部門(mén)no是關(guān)鍵诗力,需要考慮的是解決每個(gè)部門(mén)的問(wèn)題,用group by根穷。
18姜骡、得到工資大于自己部門(mén)平均工資的員工信息 ?屿良?圈澈??
select * from scott.emp e where sal > (select avg(sal) from scott.emp where e.deptno = deptno) 尘惧;
19康栈、分組統(tǒng)計(jì)每個(gè)部門(mén)下,每種職位的平均獎(jiǎng)金(也要算沒(méi)獎(jiǎng)金的人)和總工資(包括獎(jiǎng)金)
select avg(nvl(comm,0)),sum(sal+nvl(comm,0)) from emp group by deptno,job;
平均工資用avg喷橙,總工資用sum啥么,存在一個(gè)問(wèn)題,獎(jiǎng)金需要考慮null贰逾,這個(gè)時(shí)候就需要給nvl函數(shù)悬荣,讓comm為0,疙剑,氯迂,践叠,然后最后按照每個(gè)職位和部門(mén)就需要group by。
21嚼蚀、顯示員工ID,名字禁灼,直屬主管ID,名字