单表查询
1.查询出部门编号为D2019060011的所有员工
mysql
mysql> use test ;
Database changed
mysql> SELECT * FROM `employee`
-> WHERE department_NO = 'D2019060011' ;
+----+-------------+-----------+--------------+-------------+------------+---------+--------+-------+---------------+
| id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO |
+----+-------------+-----------+--------------+-------------+------------+---------+--------+-------+---------------+
| 5 | E2019050001 | 马金花 | 财务总监 | E2018010001 | 2019-01-01 | 3800.00 | 500.00 | 6 | D2019060011 |
| 6 | E2019050018 | 李昌贵 | 财务专员 | E2019050001 | 2019-04-21 | 2800.00 | 800.00 | 4 | D2019060011 |
+----+-------------+-----------+--------------+-------------+------------+---------+--------+-------+---------------+
2 rows in set (0.00 sec)
2.所有财务总监的姓名、编号和部门编号
mysql
mysql> SELECT name , number , department_NO FROM `test`.`employee` WHERE `job` LIKE '%财务总监%' ;
+-----------+-------------+---------------+
| name | number | department_NO |
+-----------+-------------+---------------+
| 马金花 | E2019050001 | D2019060011 |
| 刘六一 | E2019020017 | D2019090011 |
+-----------+-------------+---------------+
2 rows in set (0.00 sec)
3.找出奖金高于工资的员工。
mysql
mysql> SELECT * FROM `employee`
-> WHERE bonus > salary ;
+----+-------------+-----------+-----------+-----------+------------+---------+---------+-------+---------------+
| id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO |
+----+-------------+-----------+-----------+-----------+------------+---------+---------+-------+---------------+
| 1 | E2018010001 | 吴所为 | 总经理 | NULL | 2018-01-01 | 2800.00 | 4000.00 | 9 | D2019060001 |
| 2 | E2018070003 | 韩金龙 | 总经理 | NULL | 2018-07-01 | 2800.00 | 4000.00 | 8 | D2019090001 |
| 3 | E2018060002 | 王黎明 | 总经理 | NULL | 2018-06-01 | 2800.00 | 4000.00 | 8 | D2019060002 |
| 4 | E2018020002 | 龚爱国 | 总经理 | NULL | 2018-02-01 | 2800.00 | 4000.00 | 8 | D2020010001 |
+----+-------------+-----------+-----------+-----------+------------+---------+---------+-------+---------------+
4 rows in set (0.00 sec)
4.找出奖金高于工资40%的员工。
mysql
mysql> SELECT * FROM `employee`
-> WHERE bonus > salary * 0.4;
+----+-------------+-----------+--------------+-------------+------------+---------+---------+-------+---------------+
| id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO |
+----+-------------+-----------+--------------+-------------+------------+---------+---------+-------+---------------+
| 1 | E2018010001 | 吴所为 | 总经理 | NULL | 2018-01-01 | 2800.00 | 4000.00 | 9 | D2019060001 |
| 2 | E2018070003 | 韩金龙 | 总经理 | NULL | 2018-07-01 | 2800.00 | 4000.00 | 8 | D2019090001 |
| 3 | E2018060002 | 王黎明 | 总经理 | NULL | 2018-06-01 | 2800.00 | 4000.00 | 8 | D2019060002 |
| 4 | E2018020002 | 龚爱国 | 总经理 | NULL | 2018-02-01 | 2800.00 | 4000.00 | 8 | D2020010001 |
| 11 | E2019060009 | 廖云龙 | 技术总监 | E2018010001 | 2019-06-01 | 4800.00 | 2000.00 | 7 | D2019060012 |
+----+-------------+-----------+--------------+-------------+------------+---------+---------+-------+---------------+
5 rows in set (0.00 sec)
5 找出部门编号为D2019090011中所有财务总监,和部门编号为D2019060011中所有财务专员的详细资料。
mysql
mysql> SELECT * FROM `employee`
-> WHERE (department_NO = 'D2019090011' AND job = '财务总监')
-> OR (department_NO = 'D2019060011' AND job = '财务专员') ;
+----+-------------+-----------+--------------+-------------+------------+---------+---------+-------+---------------+
| id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO |
+----+-------------+-----------+--------------+-------------+------------+---------+---------+-------+---------------+
| 6 | E2019050018 | 李昌贵 | 财务专员 | E2019050001 | 2019-04-21 | 2800.00 | 800.00 | 4 | D2019060011 |
| 15 | E2019020017 | 刘六一 | 财务总监 | E2018070003 | 2019-02-16 | 3800.00 | 1000.00 | 6 | D2019090011 |
+----+-------------+-----------+--------------+-------------+------------+---------+---------+-------+---------------+
2 rows in set (0.00 sec)
6.找出部门编号为D2019090001中所有总经理部门编号为D2019090011中所有财务总监,还有即不是总经理又不是销售总监但其工资大或等于4000的所有员工详细资料。
mysql
mysql> SELECT * FROM `employee`
-> WHERE (department_NO = 'D2019090001' AND job = '总经理')
-> OR (department_NO = 'D2019090011' AND job = '财务总监')
-> OR (job NOT IN ('总经理' ,'销售总监') AND salary >= 4000) ;
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
| id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO |
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
| 2 | E2018070003 | 韩金龙 | 总经理 | NULL | 2018-07-01 | 2800.00 | 4000.00 | 8 | D2019090001 |
| 11 | E2019060009 | 廖云龙 | 技术总监 | E2018010001 | 2019-06-01 | 4800.00 | 2000.00 | 7 | D2019060012 |
| 12 | E2019120021 | 刘盛会 | 研发工程师 | E2019060009 | 2019-12-11 | 4800.00 | 500.00 | 5 | D2019060012 |
| 13 | E2019020001 | 马明全 | 高级工程师 | E2019060009 | 2019-02-01 | 4800.00 | 1000.00 | 6 | D2019060012 |
| 15 | E2019020017 | 刘六一 | 财务总监 | E2018070003 | 2019-02-16 | 3800.00 | 1000.00 | 6 | D2019090011 |
| 16 | E2020020012 | 陈超 | 研发工程师 | E2019060009 | 2020-02-18 | 4200.00 | 500.00 | 5 | D2019060012 |
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
6 rows in set (0.00 sec)
7有奖金的工种。
mysql
mysql> SELECT DISTINCT job FROM employee
-> WHERE bonus IS NOT NULL AND bonus > 0;
+-----------------+
| job |
+-----------------+
| 总经理 |
| 技术总监 |
| 研发工程师 |
| 行政专员 |
| 财务专员 |
| 财务总监 |
| 销售经理 |
| 高级工程师 |
+-----------------+
8 rows in set (0.00 sec)
8无奖金或奖金低于1000的员工
mysql
mysql> SELECT * FROM `employee`
-> WHERE bonus IS NULL OR bonus < 1000 ;
+----+-------------+-----------+-----------------+-------------+------------+---------+--------+-------+---------------+
| id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO |
+----+-------------+-----------+-----------------+-------------+------------+---------+--------+-------+---------------+
| 5 | E2019050001 | 马金花 | 财务总监 | E2018010001 | 2019-01-01 | 3800.00 | 500.00 | 6 | D2019060011 |
| 6 | E2019050018 | 李昌贵 | 财务专员 | E2019050001 | 2019-04-21 | 2800.00 | 800.00 | 4 | D2019060011 |
| 7 | E2019100011 | 王建国 | 网络管理员 | E2018010001 | 2019-10-01 | 3200.00 | NULL | 5 | D2019060013 |
| 8 | E2019110004 | 黎锦熙 | 网络管理员 | E2019100011 | 2019-11-01 | 3200.00 | NULL | 5 | D2019060013 |
| 9 | E2020020023 | 繁茂森 | 销售专员 | E2019060005 | 2020-02-01 | 2800.00 | 0.00 | 4 | D2019060014 |
| 10 | E2019060005 | 张善民 | 销售经理 | E2018010001 | 2019-06-01 | 2800.00 | 500.00 | 6 | D2019060014 |
| 12 | E2019120021 | 刘盛会 | 研发工程师 | E2019060009 | 2019-12-11 | 4800.00 | 500.00 | 5 | D2019060012 |
| 14 | E2019120015 | 李意 | 行政专员 | E2018070003 | 2019-12-20 | 2800.00 | 500.00 | 4 | D2019090001 |
| 16 | E2020020012 | 陈超 | 研发工程师 | E2019060009 | 2020-02-18 | 4200.00 | 500.00 | 5 | D2019060012 |
+----+-------------+-----------+-----------------+-------------+------------+---------+--------+-------+---------------+
9 rows in set (0.00 sec)
9.查询名字由两个字组成的员工
mysql
mysql> SELECT * FROM `employee`
-> WHERE `name` LIKE '__' ;
+----+-------------+--------+-----------------+-------------+------------+---------+--------+-------+---------------+
| id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO |
+----+-------------+--------+-----------------+-------------+------------+---------+--------+-------+---------------+
| 14 | E2019120015 | 李意 | 行政专员 | E2018070003 | 2019-12-20 | 2800.00 | 500.00 | 4 | D2019090001 |
| 16 | E2020020012 | 陈超 | 研发工程师 | E2019060009 | 2020-02-18 | 4200.00 | 500.00 | 5 | D2019060012 |
+----+-------------+--------+-----------------+-------------+------------+---------+--------+-------+---------------+
2 rows in set (0.00 sec)
10.查询2020年入职的员工。
mysql
mysql> SELECT * FROM `employee`
-> WHERE hire_date BETWEEN '2020-01-01' AND '2020-12-31' ;
+----+-------------+-----------+-----------------+-------------+------------+---------+--------+-------+---------------+
| id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO |
+----+-------------+-----------+-----------------+-------------+------------+---------+--------+-------+---------------+
| 9 | E2020020023 | 繁茂森 | 销售专员 | E2019060005 | 2020-02-01 | 2800.00 | 0.00 | 4 | D2019060014 |
| 16 | E2020020012 | 陈超 | 研发工程师 | E2019060009 | 2020-02-18 | 4200.00 | 500.00 | 5 | D2019060012 |
+----+-------------+-----------+-----------------+-------------+------------+---------+--------+-------+---------------+
2 rows in set (0.00 sec)
11.查询所有员工详细信息,用编号升序排序
mysql
mysql> SELECT * FROM `employee`
-> ORDER BY number ASC;
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
| id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO |
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
| 1 | E2018010001 | 吴所为 | 总经理 | NULL | 2018-01-01 | 2800.00 | 4000.00 | 9 | D2019060001 |
| 4 | E2018020002 | 龚爱国 | 总经理 | NULL | 2018-02-01 | 2800.00 | 4000.00 | 8 | D2020010001 |
| 3 | E2018060002 | 王黎明 | 总经理 | NULL | 2018-06-01 | 2800.00 | 4000.00 | 8 | D2019060002 |
| 2 | E2018070003 | 韩金龙 | 总经理 | NULL | 2018-07-01 | 2800.00 | 4000.00 | 8 | D2019090001 |
| 13 | E2019020001 | 马明全 | 高级工程师 | E2019060009 | 2019-02-01 | 4800.00 | 1000.00 | 6 | D2019060012 |
| 15 | E2019020017 | 刘六一 | 财务总监 | E2018070003 | 2019-02-16 | 3800.00 | 1000.00 | 6 | D2019090011 |
| 5 | E2019050001 | 马金花 | 财务总监 | E2018010001 | 2019-01-01 | 3800.00 | 500.00 | 6 | D2019060011 |
| 6 | E2019050018 | 李昌贵 | 财务专员 | E2019050001 | 2019-04-21 | 2800.00 | 800.00 | 4 | D2019060011 |
| 10 | E2019060005 | 张善民 | 销售经理 | E2018010001 | 2019-06-01 | 2800.00 | 500.00 | 6 | D2019060014 |
| 11 | E2019060009 | 廖云龙 | 技术总监 | E2018010001 | 2019-06-01 | 4800.00 | 2000.00 | 7 | D2019060012 |
| 7 | E2019100011 | 王建国 | 网络管理员 | E2018010001 | 2019-10-01 | 3200.00 | NULL | 5 | D2019060013 |
| 8 | E2019110004 | 黎锦熙 | 网络管理员 | E2019100011 | 2019-11-01 | 3200.00 | NULL | 5 | D2019060013 |
| 14 | E2019120015 | 李意 | 行政专员 | E2018070003 | 2019-12-20 | 2800.00 | 500.00 | 4 | D2019090001 |
| 12 | E2019120021 | 刘盛会 | 研发工程师 | E2019060009 | 2019-12-11 | 4800.00 | 500.00 | 5 | D2019060012 |
| 16 | E2020020012 | 陈超 | 研发工程师 | E2019060009 | 2020-02-18 | 4200.00 | 500.00 | 5 | D2019060012 |
| 9 | E2020020023 | 繁茂森 | 销售专员 | E2019060005 | 2020-02-01 | 2800.00 | 0.00 | 4 | D2019060014 |
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
16 rows in set (0.00 sec)
12.查询所有员工详细信息,用工资降序排序,如果工资相同使用入职日期升序排序。
mysql
mysql> SELECT * FROM `employee`
-> ORDER BY salary DESC , hire_date ASC ;
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
| id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO |
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
| 13 | E2019020001 | 马明全 | 高级工程师 | E2019060009 | 2019-02-01 | 4800.00 | 1000.00 | 6 | D2019060012 |
| 11 | E2019060009 | 廖云龙 | 技术总监 | E2018010001 | 2019-06-01 | 4800.00 | 2000.00 | 7 | D2019060012 |
| 12 | E2019120021 | 刘盛会 | 研发工程师 | E2019060009 | 2019-12-11 | 4800.00 | 500.00 | 5 | D2019060012 |
| 16 | E2020020012 | 陈超 | 研发工程师 | E2019060009 | 2020-02-18 | 4200.00 | 500.00 | 5 | D2019060012 |
| 5 | E2019050001 | 马金花 | 财务总监 | E2018010001 | 2019-01-01 | 3800.00 | 500.00 | 6 | D2019060011 |
| 15 | E2019020017 | 刘六一 | 财务总监 | E2018070003 | 2019-02-16 | 3800.00 | 1000.00 | 6 | D2019090011 |
| 7 | E2019100011 | 王建国 | 网络管理员 | E2018010001 | 2019-10-01 | 3200.00 | NULL | 5 | D2019060013 |
| 8 | E2019110004 | 黎锦熙 | 网络管理员 | E2019100011 | 2019-11-01 | 3200.00 | NULL | 5 | D2019060013 |
| 1 | E2018010001 | 吴所为 | 总经理 | NULL | 2018-01-01 | 2800.00 | 4000.00 | 9 | D2019060001 |
| 4 | E2018020002 | 龚爱国 | 总经理 | NULL | 2018-02-01 | 2800.00 | 4000.00 | 8 | D2020010001 |
| 3 | E2018060002 | 王黎明 | 总经理 | NULL | 2018-06-01 | 2800.00 | 4000.00 | 8 | D2019060002 |
| 2 | E2018070003 | 韩金龙 | 总经理 | NULL | 2018-07-01 | 2800.00 | 4000.00 | 8 | D2019090001 |
| 6 | E2019050018 | 李昌贵 | 财务专员 | E2019050001 | 2019-04-21 | 2800.00 | 800.00 | 4 | D2019060011 |
| 10 | E2019060005 | 张善民 | 销售经理 | E2018010001 | 2019-06-01 | 2800.00 | 500.00 | 6 | D2019060014 |
| 14 | E2019120015 | 李意 | 行政专员 | E2018070003 | 2019-12-20 | 2800.00 | 500.00 | 4 | D2019090001 |
| 9 | E2020020023 | 繁茂森 | 销售专员 | E2019060005 | 2020-02-01 | 2800.00 | 0.00 | 4 | D2019060014 |
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
16 rows in set (0.00 sec)
13.查询每个部门的平均工资,
mysql
mysql> SELECT department_NO,AVG(salary) AS 平均工资 FROM employee GROUP BY department_NO;
+---------------+--------------+
| department_NO | 平均工资 |
+---------------+--------------+
| D2019060001 | 2800.000000 |
| D2019060002 | 2800.000000 |
| D2019060011 | 3300.000000 |
| D2019060012 | 4650.000000 |
| D2019060013 | 3200.000000 |
| D2019060014 | 2800.000000 |
| D2019090001 | 2800.000000 |
| D2019090011 | 3800.000000 |
| D2020010001 | 2800.000000 |
+---------------+--------------+
9 rows in set (0.00 sec)
14.求出每个部门的雇员数量
mysql
mysql> SELECT department_NO, COUNT(number)
-> AS 雇员数量
-> FROM employee
-> GROUP BY department_NO;
+---------------+--------------+
| department_NO | 雇员数量 |
+---------------+--------------+
| D2019060001 | 1 |
| D2019060002 | 1 |
| D2019060011 | 2 |
| D2019060012 | 4 |
| D2019060013 | 2 |
| D2019060014 | 2 |
| D2019090001 | 2 |
| D2019090011 | 1 |
| D2020010001 | 1 |
+---------------+--------------+
9 rows in set (0.00 sec)
15.查询每种工作的最高工资、最低工资、人数
mysql
mysql> SELECT
-> job ,
-> MAX(salary) AS 最高工资,
-> MIN(salary) AS 最低工资,
-> COUNT(number) AS 人数
-> FROM employee
-> GROUP BY job;
+-----------------+--------------+--------------+--------+
| job | 最高工资 | 最低工资 | 人数 |
+-----------------+--------------+--------------+--------+
| 总经理 | 2800.00 | 2800.00 | 4 |
| 技术总监 | 4800.00 | 4800.00 | 1 |
| 研发工程师 | 4800.00 | 4200.00 | 2 |
| 网络管理员 | 3200.00 | 3200.00 | 2 |
| 行政专员 | 2800.00 | 2800.00 | 1 |
| 财务专员 | 2800.00 | 2800.00 | 1 |
| 财务总监 | 3800.00 | 3800.00 | 2 |
| 销售专员 | 2800.00 | 2800.00 | 1 |
| 销售经理 | 2800.00 | 2800.00 | 1 |
| 高级工程师 | 4800.00 | 4800.00 | 1 |
+-----------------+--------------+--------------+--------+
10 rows in set (0.00 sec)
16.列出最低薪金大于4000的各种工作及从事此
工作的员工人数。
mysql
mysql> SELECT
-> job ,
-> MIN(salary) AS 最低工资,
-> COUNT(number) AS 人数
-> FROM employee
-> GROUP BY job
-> HAVING MIN(salary) > 4000;
+-----------------+--------------+--------+
| job | 最低工资 | 人数 |
+-----------------+--------------+--------+
| 技术总监 | 4800.00 | 1 |
| 研发工程师 | 4200.00 | 2 |
| 高级工程师 | 4800.00 | 1 |
+-----------------+--------------+--------+
3 rows in set (0.00 sec)
17.统计各部门工资总和,显示部门编号和该部门雇员的月工资的总和,并且要满足该部门雇员的月工资合计大于6000,输出结果按月工资的合计升序排列。
mysql
mysql> SELECT
-> department_NO,
-> SUM(salary) AS 工资总和
-> FROM employee
-> GROUP BY department_NO
-> HAVING SUM(salary) > 6000
-> ORDER BY 工资总和 ASC;
+---------------+--------------+
| department_NO | 工资总和 |
+---------------+--------------+
| D2019060013 | 6400.00 |
| D2019060011 | 6600.00 |
| D2019060012 | 18600.00 |
+---------------+--------------+
3 rows in set (0.00 sec)
多表练习
1.列出所有员工的姓名及其直接上级的姓名
mysql
mysql> SELECT
-> e.name AS '员工姓名',
-> m.name AS '上级姓名'
-> FROM employee e
-> LEFT JOIN employee m
-> ON e.leader_NO = m.number;
+--------------+--------------+
| 员工姓名 | 上级姓名 |
+--------------+--------------+
| 吴所为 | NULL |
| 韩金龙 | NULL |
| 王黎明 | NULL |
| 龚爱国 | NULL |
| 马金花 | 吴所为 |
| 李昌贵 | 马金花 |
| 王建国 | 吴所为 |
| 黎锦熙 | 王建国 |
| 繁茂森 | 张善民 |
| 张善民 | 吴所为 |
| 廖云龙 | 吴所为 |
| 刘盛会 | 廖云龙 |
| 马明全 | 廖云龙 |
| 李意 | 韩金龙 |
| 刘六一 | 韩金龙 |
| 陈超 | 廖云龙 |
+--------------+--------------+
16 rows in set (0.00 sec)
2.列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。
mysql
mysql> SELECT
-> e.number AS '员工编号',
-> e.name AS '姓名',
-> d.name AS '部门名称'
-> FROM employee e
-> JOIN employee m
-> ON e.leader_NO = m.number
-> JOIN department d
-> ON e.department_NO = d.number
-> WHERE e.hire_date < m.hire_date;
+--------------+-----------+--------------+
| 员工编号 | 姓名 | 部门名称 |
+--------------+-----------+--------------+
| E2019020001 | 马明全 | 技术部 |
+--------------+-----------+--------------+
1 row in set (0.00 sec)
3.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。
mysql
mysql> SELECT
-> d.name AS '部门名称',
-> e.*
-> FROM department d
-> LEFT JOIN employee e
-> ON d.number = e.department_NO;
+--------------+------+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
| 部门名称 | id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO |
+--------------+------+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
| 清华集团 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| 集团总部 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| 成都中心 | 1 | E2018010001 | 吴所为 | 总经理 | NULL | 2018-01-01 | 2800.00 | 4000.00 | 9 | D2019060001 |
| 武汉中心 | 3 | E2018060002 | 王黎明 | 总经理 | NULL | 2018-06-01 | 2800.00 | 4000.00 | 8 | D2019060002 |
| 上海中心 | 2 | E2018070003 | 韩金龙 | 总经理 | NULL | 2018-07-01 | 2800.00 | 4000.00 | 8 | D2019090001 |
| 上海中心 | 14 | E2019120015 | 李意 | 行政专员 | E2018070003 | 2019-12-20 | 2800.00 | 500.00 | 4 | D2019090001 |
| 广州中心 | 4 | E2018020002 | 龚爱国 | 总经理 | NULL | 2018-02-01 | 2800.00 | 4000.00 | 8 | D2020010001 |
| 财务部 | 15 | E2019020017 | 刘六一 | 财务总监 | E2018070003 | 2019-02-16 | 3800.00 | 1000.00 | 6 | D2019090011 |
| 行政部 | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
| 财务部 | 5 | E2019050001 | 马金花 | 财务总监 | E2018010001 | 2019-01-01 | 3800.00 | 500.00 | 6 | D2019060011 |
| 财务部 | 6 | E2019050018 | 李昌贵 | 财务专员 | E2019050001 | 2019-04-21 | 2800.00 | 800.00 | 4 | D2019060011 |
| 技术部 | 11 | E2019060009 | 廖云龙 | 技术总监 | E2018010001 | 2019-06-01 | 4800.00 | 2000.00 | 7 | D2019060012 |
| 技术部 | 12 | E2019120021 | 刘盛会 | 研发工程师 | E2019060009 | 2019-12-11 | 4800.00 | 500.00 | 5 | D2019060012 |
| 技术部 | 13 | E2019020001 | 马明全 | 高级工程师 | E2019060009 | 2019-02-01 | 4800.00 | 1000.00 | 6 | D2019060012 |
| 技术部 | 16 | E2020020012 | 陈超 | 研发工程师 | E2019060009 | 2020-02-18 | 4200.00 | 500.00 | 5 | D2019060012 |
| 网络部 | 7 | E2019100011 | 王建国 | 网络管理员 | E2018010001 | 2019-10-01 | 3200.00 | NULL | 5 | D2019060013 |
| 网络部 | 8 | E2019110004 | 黎锦熙 | 网络管理员 | E2019100011 | 2019-11-01 | 3200.00 | NULL | 5 | D2019060013 |
| 市场部 | 9 | E2020020023 | 繁茂森 | 销售专员 | E2019060005 | 2020-02-01 | 2800.00 | 0.00 | 4 | D2019060014 |
| 市场部 | 10 | E2019060005 | 张善民 | 销售经理 | E2018010001 | 2019-06-01 | 2800.00 | 500.00 | 6 | D2019060014 |
+--------------+------+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+
19 rows in set (0.00 sec)
4.列出在财务部工作的员工的姓名,假定不知道财务部的部门编号。
mysql
mysql> SELECT
-> e.name AS '姓名'
-> FROM employee e
-> JOIN department d
-> ON e.department_NO = d.number
-> WHERE d.name = '财务部';
+-----------+
| 姓名 |
+-----------+
| 刘六一 |
| 马金花 |
| 李昌贵 |
+-----------+
3 rows in set (0.00 sec)
5.列出薪金高于公司平均薪金的所有员工信息所在部门名称,上级领导。
mysql
mysql> SELECT
-> e.*,
-> d.name AS '部门名称',
-> m.name AS '上级领导'
-> FROM employee e
-> JOIN department d
-> ON e.department_NO = d.number
-> LEFT JOIN employee m
-> ON e.leader_NO = m.number
-> WHERE e.salary > (SELECT AVG(salary) FROM employee);
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+--------------+--------------+
| id | number | name | job | leader_NO | hire_date | salary | bonus | level | department_NO | 部门名称 | 上级领导 |
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+--------------+--------------+
| 15 | E2019020017 | 刘六一 | 财务总监 | E2018070003 | 2019-02-16 | 3800.00 | 1000.00 | 6 | D2019090011 | 财务部 | 韩金龙 |
| 5 | E2019050001 | 马金花 | 财务总监 | E2018010001 | 2019-01-01 | 3800.00 | 500.00 | 6 | D2019060011 | 财务部 | 吴所为 |
| 16 | E2020020012 | 陈超 | 研发工程师 | E2019060009 | 2020-02-18 | 4200.00 | 500.00 | 5 | D2019060012 | 技术部 | 廖云龙 |
| 13 | E2019020001 | 马明全 | 高级工程师 | E2019060009 | 2019-02-01 | 4800.00 | 1000.00 | 6 | D2019060012 | 技术部 | 廖云龙 |
| 12 | E2019120021 | 刘盛会 | 研发工程师 | E2019060009 | 2019-12-11 | 4800.00 | 500.00 | 5 | D2019060012 | 技术部 | 廖云龙 |
| 11 | E2019060009 | 廖云龙 | 技术总监 | E2018010001 | 2019-06-01 | 4800.00 | 2000.00 | 7 | D2019060012 | 技术部 | 吴所为 |
+----+-------------+-----------+-----------------+-------------+------------+---------+---------+-------+---------------+--------------+--------------+
6 rows in set (0.00 sec)
6.列出与陈超从事相同工作的所有员工及部门名称。
mysql
mysql> SELECT
-> e.name AS '姓名',
-> d.name AS '部门名称'
-> FROM employee e
-> JOIN department d
-> ON e.department_NO = d.number
-> WHERE
-> e.job = (SELECT job FROM employee WHERE name = '陈超')
-> AND e.name != '陈超';
+-----------+--------------+
| 姓名 | 部门名称 |
+-----------+--------------+
| 刘盛会 | 技术部 |
+-----------+--------------+
1 row in set (0.00 sec)
7.查出至少有一个员工的部门。显示部门编号部门名称、部门位置、部门人数。
mysql
mysql> SELECT
-> d.number AS '部门编号',
-> d.name AS '部门名称',
-> d.location AS '部门位置',
-> COUNT(e.number) AS '部门人数'
-> FROM department d
-> JOIN employee e
-> ON d.number = e.department_NO
-> GROUP BY d.number, d.name, d.location
-> HAVING COUNT(e.number) >= 1;
+--------------+--------------+--------------+--------------+
| 部门编号 | 部门名称 | 部门位置 | 部门人数 |
+--------------+--------------+--------------+--------------+
| D2019060001 | 成都中心 | 成都 | 1 |
| D2019060002 | 武汉中心 | 武汉 | 1 |
| D2019090001 | 上海中心 | 上海 | 2 |
| D2020010001 | 广州中心 | 广州 | 1 |
| D2019090011 | 财务部 | 上海 | 1 |
| D2019060011 | 财务部 | 成都 | 2 |
| D2019060012 | 技术部 | 成都 | 4 |
| D2019060013 | 网络部 | 成都 | 2 |
| D2019060014 | 市场部 | 成都 | 2 |
+--------------+--------------+--------------+--------------+
9 rows in set (0.00 sec)
8.列出薪金高于在财务部工作员工平均薪金的员工姓名和薪金、部门名称。
mysql
mysql> SELECT
-> e.name AS '姓名',
-> e.salary AS '薪金',
-> d.name AS '部门名称'
-> FROM employee e
-> JOIN department d
-> ON e.department_NO = d.number
-> WHERE e.salary > (
-> SELECT AVG(salary)
-> FROM employee e
-> JOIN department d
-> ON e.department_NO = d.number
-> WHERE d.name = '财务部'
-> );
+-----------+---------+--------------+
| 姓名 | 薪金 | 部门名称 |
+-----------+---------+--------------+
| 刘六一 | 3800.00 | 财务部 |
| 马金花 | 3800.00 | 财务部 |
| 陈超 | 4200.00 | 技术部 |
| 马明全 | 4800.00 | 技术部 |
| 刘盛会 | 4800.00 | 技术部 |
| 廖云龙 | 4800.00 | 技术部 |
+-----------+---------+--------------+
6 rows in set (0.00 sec)