1. 程式人生 > >JAVA入門到精通-第67講-sqlserver作業講評

JAVA入門到精通-第67講-sqlserver作業講評

sql server作業點評:

使用scott/tiger使用者下的emp表完成下列練習,表的結構說明如下

emp員工表(empno員工號/ename員工姓名/job工作/mgr上級編號/hiredate受僱日期/sal薪金/comm佣金/deptno部門編號)

//把課堂上建立的emp,dept表自己建立一下(參考圖)

 

//根據emp表和dept表,完成下面的練習

--1、選擇部門30中的所有員工

select * from emp where deptno=30

 

--2、列出所有辦事員(CLERK)的姓名,編號和部門編號

select ename,empno,deptno from emp where job='clerk'

 

--3、找出佣金高於薪金的員工(佣金是獎金)

select * from emp where isnull(comm,0)>sal

 

--4、找出佣金高於薪金的60%的員工

select * from emp where comm>sal*0.6

 

--5、找出部門10中所有經理(MANAGER)和部門20中所有辦事員(CLERK)的詳細資料

select * from emp where (deptno=10 and job='manager')or(deptno=20 and job='clerk')

 

--6、找出部門10中所有經理(MANAGER)部門20中所有辦事員(CLERK)既不是經理又不是辦事員但其薪金大於或等於2000的所有員工的詳細資料。

select * from emp where (deptno=10 and job='manager') or (deptno=20 and job='clerk') or (job<>'manager' and job<>'clerk' and sal>=2000)

 

--7、找出收取佣金的員工的不同工作

select distinct job from emp where comm>0

 

--8、找出不收取佣金或收取的佣金低於100的員工

select * from emp where comm<100 or comm is null

 

--9、找出各月倒數第3天受僱的所有員工

//oracle中有一個函式可以得到某個日期的最後一天

select * from emp where hiredate=dateadd(day,-3,datename(year,dateadd(month,1,hiredate))+datename(month,dateadd(month,1,hiredate))+'01')

 

--10、找出早於12年前受僱的員工

select * from emp where hiredate<dateadd(dd,-12*365,getdate())

select * from emp where datediff(year,hiredate,getdate())>12

 

--11、以首字母大寫的方式顯示所有員工的姓名

select upper(substring(ename,1,1))+lower(substring(ename,2,len(ename))) from emp

 

--12、顯示正好為5個字元的員工的姓名

select * from emp where ename like'_____'

select * from emp where len(ename)=5

 

--13、顯示不帶有R的員工的姓名

select ename from emp where ename not like'%R%'

 

--14、顯示所有員工姓名的前三個字元

select substring(ename,1,3) from emp

 

--15、顯示所有員工的姓名,用a替換所有A

select replace(ename,'A','a') from emp

 

--16、顯示滿10年服務年限的員工的姓名和受僱日期

select ename,hiredate from emp where datediff(year,hiredate,getdate())>10

 

--17、顯示員工的詳細資料,按姓名排序

select * from emp order by ename

 

--18、顯示員工的姓名和受僱日期,根據其服務年限,將最老的員工排在最前面

select ename,hiredate from emp order by hiredate

 

--19、顯示所有員工的姓名、工作和薪金,按工作的降序排序,若工作相同則按薪金排序

select ename,job,sal from emp order by job desc,sal

 

--20、顯示所有員工的姓名、加入公司的年份和月份,按受僱日期所在月排序,若月份相同則將最早年份的員工排在最前面

select ename,datepart(year,hiredate) y,datepart(month,hiredate) m from emp order by m,y

 


 
 1 --21、列出至少有一個員工的所有部門
 2 select count(*),deptno from emp group by deptno having count(*)>1
 3  
 4 --22、列出薪金比“SMITH”多的所有員工
 5 select * from emp where sal>(select sal from emp where ename='smith')and ename<>'smith'
 6  
 7 --23、列出所有員工的姓名及其直接上級的姓名
 8 select e1.ename,e2.ename from emp e1,emp e2 where e1.mgr=e2.empno
 9  
10 --24、列出受僱日期晚於其直接上級的所有員工
11 select e1.ename,e1.hiredate,e2.ename,e2.hiredate from emp e1,emp e2 where e1.mgr=e2.empno and e1.hiredate>e2.hiredate
12  
13 --25、列出部門名稱和這些部門的員工資訊,同時列出那些沒有員工的部門。
14 select d.dname,e.ename,e.job from emp e right join dept d on e.deptno=d.deptno
15  
16 --26、列出所有“clerk”(辦事員)的姓名及其部門名稱
17 select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno and job='clerk'
18  
19 --27、列出最低薪金大於1500的各種工作。
20 select min(sal),job from emp group by job having min(sal)>1500
21  
22 --28、列出在部門“SALES”(銷售部)工作的員工的姓名,假定不知道銷售部的部門編號。
23 select ename,'sales' from emp where deptno=(select deptno from dept where dname='sales')
24  
25 --29、列出薪金高於公司平均薪金的所有員工。
26 select * from emp where sal>(select avg(sal) from emp)
27  
28 --30、列出與“SCOTT”從事相同工作的所有員工。
29 select * from emp where job=(select job from emp where ename='scott')
30  
31 --31、列出薪金等於部門30中員工的薪金的所有員工的姓名和薪金
32 select ename,sal from emp where sal in(select sal from emp where deptno=30)
33  
34 --32、列出薪金高於在部門30工作的所有員工的薪金的員工姓名和薪金
35 select ename,sal from emp where sal>(select max(sal) from emp where deptno=30)
36 
37 --33、列出在每個部門工作的員工數量、平均工資和平均服務期限
38 select count(*)"員工人數",avg(sal)"部門平均工資",avg(datediff(year,hiredate,getdate()))"部門平均服務期限",deptno from emp group by deptno
39  
40 --34、列出所有員工的姓名、部門名稱和工資
41 select e.ename,d.dname,e.sal from emp e,dept d where e.deptno=d.deptno
42  
43 --35、列出從事同一種工作但屬於不同部門的員工的一種組合。
44 select w1.ename,w1.job,w1.deptno,w2.ename,w2.job,w2.deptno from emp w1,emp w2 where w1.job=w2.job and w1.deptno<>w2.deptno
45  
46 --36、列出所有部門的詳細資訊和部門人數。
47 select d2.dname,d2.loc,isnull(d.c,0) from dept d2 left join (select count(*) c,deptno de from emp group by deptno) d on d2.deptno=d.de
48  
49 --37、列出各種工作的最低工資
50 select min(sal),job from emp group by job
51  
52 --38、列出MANAGER(經理)的最低薪金
53 select min(sal) from emp where job='manager'
54  
55 --39、列出所有員工的年工資,按年薪從低到高排序
56 select ename,(sal+isnull(comm,0))*12"年工資" from emp order by "年工資"

 

 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

       



來自為知筆記(Wiz)