+----------+-------+---------+--------+------+------------+------+------+--------+| deptname | empno | empname | job | mgr | hiredate | sal | comm | deptno |+----------+-------+---------+--------+------+------------+------+------+--------+| 会计部 |7782 | 关羽 | 经理 | 7839 | 1981-06-09 | 2450 | NULL | 10|
| 会计部 |7839 | 韩少云 | 董事长 | NULL | 1981-11-17 | 5000 | NULL | 10|
| 会计部 |7934 | 夏侯惇 | 办事员 | 7782 | 1982-01-23 | 1300 | NULL | 10|
| 调查部 |7369 | 张无忌 | 办事员 | 7902 | 1980-12-17 | 800 | NULL | 20|
| 调查部 |7566 | 朱元璋 | 经理 | 7839 | 1981-04-02 | 2975 | NULL | 20|
| 调查部 |7788 | 宋江 | 分析员 | 7566 | 1987-04-19 | 3000 | NULL | 20|
| 调查部 |7876 | 张飞 | 办事员 | 7788 | 1987-05-23 | 1100 | NULL | 20|
| 调查部 |7902 | 诸葛亮 | 分析员 | 7566 | 1981-12-03 | 3000 | NULL | 20|
| 销售部 |7499 | 曹操 | 推销员 | 7698 | 1981-02-20 | 1600 | 300 | 30|
| 销售部 |7521 | 杨志 | 推销员 | 7698 | 1981-02-22 | 1250 | 500 | 30|
| 销售部 |7654 | 殷天正 | 推销员 | 7698 | 1981-09-28 | 1250 | 1400 | 30|
| 销售部 |7698 | 张三丰 | 经理 | 7839 | 1981-05-01 | 2850 | NULL | 30|
| 销售部 |7844 | 孙二娘 | 推销员 | 7698 | 1981-09-08 | 1500 | 0 | 30|
| 销售部 |7900 | 赵云 | 办事员 | 7698 | 1981-12-03 | 950 | NULL | 30|+----------+-------+---------+--------+------+------------+------+------+--------+
-- 1.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。/*列: deptname, emp.*条件: emp.deptno=dept.deptno*/select d.deptname, e.*from dept d left join emp e
on e.deptno=d.deptno;-- 2.列出薪资比关羽高的所有员工。/*列: emp.*表: emp
条件: sal>(关羽的薪资)*/
--求出关羽的薪资:
select*from emp
where sal> (select sal from emp where empname='关羽');-- 3.列出所有员工的姓名及其直接上级的姓名。/*列: e1.empname, (直接上级)e2.empname
表: emp e1, emp e2
条件: e1.mgr=e2.empno*/select e1.empname, e2.empname
from emp e1, emp e2
where e1.mgr=e2.empno;-- 4.列出最低薪资大于1500的各种职位及从事此职位的员工人数。/*列: job 员工人数
表: emp
条件: 最低薪资(分组)>1500分组条件: job*/select job, min(sal) 最低工资, count(*) 员工人数
from emp
group by job
having min(sal)>1500;-- 5.列出在销售部的员工的姓名,假定不知道销售部的部门编号。/*列: empname
表: dept d, emp e
条件: d.deptname='销售部' d.deptno=e.deptno*/select e.empname, d.deptname
from dept d, emp e
where d.deptname='销售部' and d.deptno=e.deptno;-- 6.列出与曹操从事相同职位的所有员工及部门名称。/*列: e.empname d.deptname
表: emp e, dept d
条件: job='曹操的职位' e.deptno=d.deptno*/select e.empname, d.deptname, e.job
from emp e, dept d
where e.deptno=d.deptno and job=(select job from emp where empname='曹操');-- 7.列出薪资高于在销售部(已知部门编号为30)就职的所有员工的薪资的员工姓名和薪资、部门名称。/*列: e.empname, e.sal, d.deptname
表: emp e, dept d
条件: e.deptno=d.deptno sal>(30号部门的最高薪资)*/select d.deptname, e.* /*select d.deptname, e.sal, e.empname*/from emp e, dept d
where e.deptno=d.deptno and e.sal > (select max(sal) from emp where deptno=30);-- 8.列出在每个部门职位的员工数量、平均工资。/*列: 员工数量, 平均工资
表: emp
分组条件: deptno
聚合函数: count(*), avg(sal)*/select deptno, count(*) 员工数量, avg(sal) 平均工资
from emp
group by deptno;-- 9.查出至少有一个员工的部门。显示部门人数、部门编号、部门名称、部门位置。/*列: 部门人数(count(*)) d.deptno, d.deptname, d.loc
表: emp e, dept d
条件: e.deptno=d.deptno
分组条件: e.deptno*/select d.*, count(*) 部门人数
from emp e, dept d
where e.deptno=d.deptno
group by e.deptno;-- 10.列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。/*列: e.empno, e.empname, d.deptname
表: emp e1, emp e2, dept d
条件: e1.hiredate
from emp e1, emp e2, dept d
where e1.hiredate
表: emp e, dept d
条件: e.deptno=d.deptno
分组条件: e.deptno*/
--查询员工及对应的部门
select e.empname, d.deptname, d.deptno
from emp e, dept d
where e.deptno=d.deptno;--查询部门的人数
select deptno, count(*) cnt
from emp
group by deptno--关联查询
select e.empname, d.deptname, e.deptno, e2.cnt 部门人数
from emp e, dept d, (
select deptno, count(*) cnt
from emp
group by deptno
) e2
where e.deptno=d.deptno and e.deptno=e2.deptno;