目录
1.查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
3.列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
4.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
5.列出最低薪金大于15000的各种工作及从事此工作的员工人数。
6.列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。
7.列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。
9.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。
表关系图:
# 创建表
create table employee
(
empno int NOT NULL AUTO_INCREMENT,
ename varchar(20) NULL,
job varchar(20) NULL,
mgr int NULL,
hiredate date NULL,
sal decimal(10,2) NULL,
comm decimal(10,2) NULL,
deptno int NULL,
primary key (empnos)
)engine=InnoDB;
例题:
1.查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。
mysql> SELECT
-> d.deptno,
-> d.dname,
-> d.loc,
-> COUNT(e.empno) AS dept_count
-> FROM
-> department d
-> JOIN
-> employee e ON d.deptno = e.deptno
-> GROUP BY
-> d.deptno, d.dname, d.loc
-> HAVING
-> COUNT(e.empno) > 0;
+--------+-----------+--------+------------+
| deptno | dname | loc | dept_count |
+--------+-----------+--------+------------+
| 20 | 学工部 | 上海 | 5 |
| 30 | 销售部 | 广州 | 6 |
| 10 | 教研部 | 北京 | 3 |
+--------+-----------+--------+------------+
3 rows in set (0.01 sec)
2.列出所有员工的姓名及其直接上级的姓名。
mysql> SELECT
-> e1.ename AS employee_name,
-> e2.ename AS manager_name
-> FROM
-> employee e1
-> LEFT JOIN
-> employee e2 ON e1.mgr = e2.empno;
+---------------+--------------+
| employee_name | manager_name |
+---------------+--------------+
| 甘宁 | 庞统 |
| 黛琦丝 | 关羽 |
| 殷天正 | 关羽 |
| 刘备 | 曾阿牛 |
| 谢逊 | 关羽 |
| 关羽 | 曾阿牛 |
| 张飞 | 曾阿牛 |
| 诸葛亮 | 刘备 |
| 曾阿牛 | NULL |
| 韦一笑 | 关羽 |
| 周泰 | 诸葛亮 |
| 程普 | 关羽 |
| 庞统 | 刘备 |
| 黄盖 | 张飞 |
+---------------+--------------+
14 rows in set (0.01 sec)
3.列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
mysql> SELECT
-> e1.empno,
-> e1.ename,
-> d.dname
-> FROM
-> employee e1
-> JOIN
-> employee e2 ON e1.mgr = e2.empno
-> JOIN
-> department d ON e1.deptno = d.deptno
-> WHERE
-> e1.hiredate < e2.hiredate;
+-------+-----------+-----------+
| empno | ename | dname |
+-------+-----------+-----------+
| 1001 | 甘宁 | 学工部 |
| 1002 | 黛琦丝 | 销售部 |
| 1003 | 殷