http://www.cnblogs.com/huyong/archive/2011/06/03/2071228.html
记录一下自己写的答案,估计大多数运行会出错,逻辑应该....大概没有问题。
1.列出至少有一个员工的所有部门。
SELECT DISTINCT * FROM scott.dept where scott.emp.DEPTNO = scott.dept.DEPTNO ;
2.列出薪金比“SMITH”多的所有员工。
SELECT * FROM emp WHERE emp.SAL>(SELECT SAL FROM emp WHERE ENAME='SMITH');
3.列出所有员工的姓名及其直接上级的姓名。
SELECT e1.ename,(SELECT ename FROM emp e2 WHERE e1.mgr = e2.ename) FROM emp e1;
4.列出受雇日期早于其直接上级的所有员工。
SELECT e1.ename FROM emp e1 emp.hiredate>(select hiredate from emp as e2 where e1.mgr = e2.ename);
5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
SELECT dept.dname,emp.ename FROM dept LEFT OUTER JOIN emp ON emp.deptno = dept.deptno;
6.列出所有“CLERK”(办事员)的姓名及其部门名称。
select emp.ename,dept.dname from emp,dept where emp.JOB='CLERK' and emp.deptno = dept.deptno;
7.列出最低薪金大于1500的各种工作。
select distinct emp.job from emp where emp.sal > '1500';
8.列出在部门“SALES”(销售部)工作的员工的姓名,假定不知道销售部的部门编号。
select emp.ename from emp,dept where emp.deptno = (select deptno from dept where dept.dname = 'SALES')
9.列出薪金高于公司平均薪金的所有员工。
select emp.ename from emp e1 where emp.sal > (select AVG(e2.sal) from emp e2)
10.列出与“SCOTT”从事相同工作的所有员工。
select e1.* from emp e1 where e1.job = (select e2.job from emp as e2 where e2.ename = 'SCOTT')
11.列出薪金等于部门30中员工的薪金的所有员工的姓名和薪金。
select e.ename,e.sal from emp e where e.deptno = '30'
12.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金。
select e1.ename,e1.sal from emp e1 where e1.sal > (select MAX(e2.sal) from emp as e2 e2.deptno = '30')
13.列出在每个部门工作的员工数量、平均工资和平均服务期限。
select COUNT(e.empno) as count_empno,AVG(e.sal) as sal_avg,AVG(e.hiredate) as hiredate_avg
from emp e group by deptno;
14.列出所有员工的姓名、部门名称和工资。
select emp.ename as ename,(select dept.dname from dept where emp.deptno=dept.deptno) as deptname, emp.sal from emp;
15.列出所有部门的详细信息和部门人数。
select d.*, count(select * from emp e where e.deptno = d.deptno group by e.deptno) from dept d;
16.列出各种工作的最低工资。
select emp.job,MIN(emp.sal) from emp group by emp.job
17.列出各个部门的MANAGER(经理)的最低薪金。
select emp.deptno,min(emp.sal) from emp where emp.job = 'MANAGER' group by deptno;
18.列出所有员工的年工资,按年薪从低到高排序。
select (emp.sal+nvl(emp.comm,0))*12 as salery from emp order by salery;
最后介绍一下NVL(参数1,参数2)这个函数,如果参数1为NULL,则将参数2赋值给参数1。