表结构
emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)
dept部门表(deptno部门编号/dname部门名称/loc地点)
说明:
- 工资 = 薪金 + 佣金
- 没有说明,sql语句在Oracle、MySql下通用。
- 如果使用Oracle练习,请用Scott账户登录,该账户下有这两张表
题目
1.列出至少有一个员工的所有部门
select deptno,dname from dept where deptno in (select deptno from emp group by deptno having count(*)>0);
2.列出薪金比“SMITH”多的所有员工。
select * from emp where sal>(select sal from emp where ename='SMITH');
3.列出所有员工的姓名及其直接上级的姓名。
select e1.ename '员工', e2.ename '上级' from emp e1 left join emp e2 on e1.mgr=e2.empno;
select ename,(select ename from emp where empno=a.mgr) from emp a;
4.列出受雇日期晚于其直接上级的所有员工。
连接查询:
select e1.ename,e1.hiredate,e2.hiredate
from emp e1 left join emp e2 on e1.mgr=e2.empno
where e1.hiredate>e2.hiredate;
子查询:
select ename from emp a
where hiredate>(select hiredate from emp where empno=a.mgr);
5.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
select d1.dname,e1.ename from emp e1 right join dept d1 on e1.deptno=d1.deptno order by d1.dname;