數據庫練習

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*60%

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' 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天受僱的員工

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

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

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

upper len substring 

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、顯示所有員工姓名的前三個字符

select substrin(ename,1,3) from emp;

14、顯示所有員工的姓名,用‘a‘替換所有‘A’

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

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

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

16、顯示員工的詳細資料,並按姓名排序。

select *from emp order by ename

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

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

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

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

============================================================================

1、列出至少有一個員工的部門

select count(*),deptno from emp group by deptno having count(*)>1

2、列出薪金比‘SMITH’多的所有員工

select *from emp where sal>(slect sal from emp where ename='smith')

3、列出所有員工的姓名及其直接上級的姓名

select w.ename,b.ename from emp w,emp b where w.mgr=b.empno

4、列出受僱日期晚於其直接上級的所有員工

select w.ename,w.hiredate,b.ename ,b.hiredatefrom emp w,emp b where w.mgr=b.empno and w.hiredate>b.hiredate

5、列出部門名稱和這些部門的員工信息,同時列出沒有員工的部門

select d.dname, e.ename,e.job from emp e right join dept d on e.deptno=d.deptno

6、列出所有‘CLERK’(辦事員)的姓名及其部門名稱

select ename,dname from emp,dept where job='CLERK'

7、列出最低薪金大於1500的各種工作

select min(sal),job from emp group by job having min(sal)>1500

8、列出在部門‘sales’(銷售部)的工作的員工的姓名

select ename,‘sales’ from emp where deptno=(select deptno from dept where dname=‘sales’)

9、列出薪金高於公司平均薪金的所有員工

select * from emp where sal>(select avg(sal) from emp)

10、列出薪金等於部門30中的員工的薪金的所有的員工的姓名和薪金

select ename,sal from emp where sal in(select sal from emp where deptno=30)

大於

select ename,sal from emp where sal >(select  max(sal) from emp where deptno=30)

11、列出在每個部門工作的員工數量、平均工資和平均服務期限

select count(*)總人數,avg(sal)平均工資,avg(datediff(hiredate,getdate()))平均服務年限,deptno from emp group by deptno

12、列出所有部門的詳細信息和部門人數

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

13、列出MANAGER(經理)的最低薪金

select min(sal)  from emp where job='manager'

14、列出所有員工的年工資,按年薪從低到高排序

select(sal+isnull(comm,0)*)*12 年工資,ename from emp order by 年工資

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章