DEPT (DEPTNO INT, DNAME VARCHAR(14),LOC VARCHAR(13)); EMP (EMPNO INT,ENAME VARCHAR(10), JOB VARCHAR(9), MGR INT, HIREDATE DATE, SAL FLOAT, COMM FLOAT, DEPTNO INT); BONUS (ENAME VARCHAR(10), JOB VARCHAR(9), SAL INT, COMM INT); SALGRADE ( GRADE INT, LOSAL INT, HISAL INT);
其中表中包含如下数据:
DEPT表:
EMP表:
SALGRADE表:
BONUS表: 无数据
1. 查看EMP表中部门号为10的员工的姓名,职位,参加工作时间,工资。
select ename,job,hiredate,sal from emp where deptno=102. 查所有已有的职位,要求去除重复项。
select distinct job from emp
3. 计算每个员工的年薪,并取列名为Salary of Year(emp.sal为员工的月薪),要求输出员工姓名,年薪。
select ename, sal*12 as 'Salary of Year' from emp4.查询每个员工每个月拿到的总金额(emp.sal为工资,emp.comm为补助)。(提示:isnull(ex1,ex2)表示如果ex1为空则返回ex2)
select ename,sal+ isnull(comm,0)as total from emp
5. 显示职位是主管(manager)的员工的姓名,工资。
select ename,sal from emp where job= 'manager'6.显示第3个字符为大写O的所有员工的姓名及工资。
select ename,sal from emp where ename like '__O%'7.显示职位为销售员(SALESMAN)或主管(MANAGER)的员工的姓名,工资,职位。
select ename,sal,job from emp where job='SALESMAN' or job='MANAGER'8. 显示所有没有补助的员工的姓名。
select ename from emp where comm is null9. 显示有补助的员工的姓名,工资,补助。
select ename from emp where comm is not null10. 排序显示所有员工的姓名,工资(按工资降序方式)。
select ename,sal from emp order by sal desc11. 显示员工的最高工资和最低工资。
select max(sal) as '最高工资' , min(sal) as '最低工资' from emp12. 显示所有员工的平均工资和总计工资。
select avg(sal) as '平均工资',sum(sal) as '总计工资' from emp13.显示补助在员工中的发放比例、即有多少比例的员工有补助。(此题需注意两个问题:1.select语句中进行除法如何保留小数点后数据。2.count函数如何处理null型数据。)
select cast ( count(comm) as float) /count(ename) from emp14. 显示每种职业的平均工资。
select job,avg(sal) as average from emp group by job15. 显示每个部门每种岗位的平均工资和最高工资。
select deptno,job,avg(sal) as average,max(sal) as max from emp group by deptno,job16.显示平均工资低于2500的部门号,平均工资及最高工资。
select deptno,avg(sal) as average, max(sal) as max from emp group by DEPTNO having avg(sal)<250017. 上一条语句以平均工资升序排序。
select deptno,avg(sal) as average, max(sal) as max from emp group by DEPTNO having avg(sal)<2500 order by avg(sal)18.显示工资高于2500或岗位为MANAGER的所有员工的姓名,工资,职位,和部门号。
select ename,sal,job,deptno from emp where sal>2500 or job='MANAGER'19. 排序显示所有员工的姓名,部门号,工资(以部门号升序,工资降序,雇用日期升序显示)。
select ename,deptno,sal from emp order by deptno,sal desc,hiredate20. 采用自然连接原理显示部门名以及相应的员工姓名。 ( S ql server不支持 NATURAL JOIN 语法。 )
select dname,ename from dept inner join emp on dept.deptno = emp.deptno21.查询SCOTT的上级领导的姓名。
select e.ename from emp join emp as e on emp.mgr = e.empno where emp.ENAME = 'SCOTT'22. 显示部门的部门名称,员工名即使部门没有员工也显示部门名称。
select dname,ename from emp right join dept on emp.deptno = dept.deptno23. 显示所有员工的名称、工资以及工资级别。
select ename,sal,grade from emp left join salgrade on (emp.sal >= salgrade.losal and emp.sal <= salgrade.hisal) where grade in ( select grade from salgrade)24.显示ACCOUNTING部门所有员工的名称,工资。
select ename,sal from emp left join dept on emp.deptno = dept.deptno where dept.dname = 'accounting'25.显示职位属于10号部门所提供职位范围的员工的姓名,职位,工资,部门号。
select ename,job,sal,deptno from emp where job in (select job from emp where emp.deptno = 10)26.显示在所有员工中高于30号部门中任一个员工工资的员工的姓名,工资和部门号。
select ename,sal,deptno from emp where sal > all(select sal from emp where deptno = 30)27.显示工资高于2500或职位为MANAGER的员工的姓名,工资和职位(采用UNION语法实现)。
(select ename,sal,job from emp where sal>2500) union (select ename,sal,job from emp where job = 'manager')28.显示工资高于2500且职位为MANAGER的员工的姓名,工资和职位(采用INTERSECT语法实现)。
(select ename,sal,job from emp where sal>2500) intersect (select ename,sal,job from emp where job = 'manager')29.显示工资高于2500但职位不是MANAGER的员工的姓名,工资和职位(采用EXCEPT语法实现)。
(select ename,sal,job from emp where sal>2500) except (select ename,sal,job from emp where job = 'manager')