数据库练习

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 年工资

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