MySQL 实例employee表综合查询

2024-04-16 15:36

本文主要是介绍MySQL 实例employee表综合查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

表关系图: 

例题:

1.查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。

2.列出所有员工的姓名及其直接上级的姓名。

3.列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。

4.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

5.列出最低薪金大于15000的各种工作及从事此工作的员工人数。

6.列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。

7.列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。

8.列出与庞统从事相同工作的所有员工及部门名称。

9.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。

10.查出年份、利润、年度增长比。


表关系图: 

# 创建表
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 | 殷天正    | 销售部    |
|  1004 | 刘备      | 学工部    |
|  1006 | 关羽      | 销售部    |
|  1007 | 张飞      | 教研部    |
+-------+-----------+-----------+
6 rows in set (0.00 sec)

4.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。

mysql> SELECT   ->     d.deptno,   ->     d.dname,   ->     e.empno,   ->     e.ename,   ->     e.job,   ->     e.mgr,   ->     e.hiredate,   ->     e.sal,   ->     e.comm  -> FROM   ->     department d  -> LEFT JOIN   ->     employee e ON d.deptno = e.deptno  -> ORDER BY   ->     d.deptno, e.empno;
+--------+-----------+-------+-----------+-----------+------+------------+----------+----------+
| deptno | dname     | empno | ename     | job       | mgr  | hiredate   | sal      | comm     |
+--------+-----------+-------+-----------+-----------+------+------------+----------+----------+
|     10 | 教研部    |  1007 | 张飞      | 经理      | 1009 | 2001-09-01 | 24500.00 | NULL     |
|     10 | 教研部    |  1009 | 曾阿牛    | 董事长    | NULL | 2001-11-17 | 50000.00 | NULL     |
|     10 | 教研部    |  1014 | 黄盖      | 文员      | 1007 | 2002-01-23 | 13000.00 | NULL     |
|     20 | 学工部    |  1001 | 甘宁      | 文员      | 1013 | 2000-12-17 | 8000.00  | NULL     |
|     20 | 学工部    |  1004 | 刘备      | 经理      | 1009 | 2001-04-02 | 29750.00 | NULL     |
|     20 | 学工部    |  1008 | 诸葛亮    | 分析师    | 1004 | 2007-04-19 | 30000.00 | NULL     |
|     20 | 学工部    |  1011 | 周泰      | 文员      | 1008 | 2007-05-23 | 11000.00 | NULL     |
|     20 | 学工部    |  1013 | 庞统      | 分析师    | 1004 | 2001-12-03 | 30000.00 | NULL     |
|     30 | 销售部    |  1002 | 黛琦丝    | 销售员    | 1006 | 2001-02-20 | 16000.00 | 3000.00  |
|     30 | 销售部    |  1003 | 殷天正    | 销售员    | 1006 | 2001-02-22 | 12500.00 | 5000.00  |
|     30 | 销售部    |  1005 | 谢逊      | 销售员    | 1006 | 2001-09-28 | 12500.00 | 14000.00 |
|     30 | 销售部    |  1006 | 关羽      | 经理      | 1009 | 2001-05-01 | 28500.00 | NULL     |
|     30 | 销售部    |  1010 | 韦一笑    | 销售员    | 1006 | 2001-09-08 | 15000.00 | 0.00     |
|     30 | 销售部    |  1012 | 程普      | 文员      | 1006 | 2001-12-03 | 9500.00  | NULL     |
|     40 | 财务部    |  NULL | NULL      | NULL      | NULL | NULL       | NULL     | NULL     |
+--------+-----------+-------+-----------+-----------+------+------------+----------+----------+
15 rows in set (0.00 sec)

5.列出最低薪金大于15000的各种工作及从事此工作的员工人数。

mysql> SELECT  job,count(*) as 人数 —> from employee —> where sal > 15000 or sal+comm > 15000 —> group by job;
+-----------+--------+
| job       | 人数   |
+-----------+--------+
| 销售员    |      3 |
| 经理      |      3 |
| 分析师    |      2 |
| 董事长    |      1 |
+-----------+--------+4 rows in set (0.01 sec)

6.列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。

mysql> SELECT   ->     e.ename  -> FROM   ->     employee e  -> JOIN   ->     department d ON e.deptno = d.deptno  -> WHERE   ->     d.dname = '销售部';
+-----------+
| ename     |
+-----------+
| 黛琦丝    |
| 殷天正    |
| 谢逊      |
| 关羽      |
| 韦一笑    |
| 程普      |
+-----------+
6 rows in set (0.00 sec)

7.列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。

mysql> SELECT   ->     e.empno,   ->     e.ename,   ->     d.dname,   ->     e.mgr,   ->     e.sal,   ->     sg.grade  -> FROM   ->     employee e  -> JOIN   ->     department d ON e.deptno = d.deptno  -> LEFT JOIN   ->     salarygrade sg ON e.sal BETWEEN sg.losal AND sg.hisal  -> WHERE   ->     e.sal > (SELECT avg(sal)+sum(comm)/14 FROM employee)  -> ORDER BY   ->     e.empno;
+-------+-----------+-----------+------+----------+-------+
| empno | ename     | dname     | mgr  | sal      | grade |
+-------+-----------+-----------+------+----------+-------+
|  1004 | 刘备      | 学工部    | 1009 | 29750.00 |     4 |
|  1006 | 关羽      | 销售部    | 1009 | 28500.00 |     4 |
|  1007 | 张飞      | 教研部    | 1009 | 24500.00 |     4 |
|  1008 | 诸葛亮    | 学工部    | 1004 | 30000.00 |     4 |
|  1009 | 曾阿牛    | 教研部    | NULL | 50000.00 |     5 |
|  1013 | 庞统      | 学工部    | 1004 | 30000.00 |     4 |
+-------+-----------+-----------+------+----------+-------+
6 rows in set (0.02 sec)

8.列出与庞统从事相同工作的所有员工及部门名称。

mysql> SELECT a.ename, b.dname -> FROM employee  a -> JOIN department b ON a.deptno = b.deptno -> WHERE a.job = (SELECT job FROM employee WHERE ename = '庞统');
+-----------+-----------+
| ename     | dname     |
+-----------+-----------+
| 诸葛亮    | 学工部    |
| 庞统      | 学工部    |
+-----------+-----------+
2 rows in set (0.00 sec)

9.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。

mysql> select e.ename,e.sal,d.dname from employee e      ->  inner join department d     -> on e.deptno = d.deptno  where sal >-> (select sum(sal)+sum(comm) from  employee where deptno = 30);
Empty set (0.01 sec)

10.查出年份、利润、年度增长比。

mysql> SELECT current_year.year, current_year.zz,-> CASE WHEN previous_year.zz = 0 THEN NULL-> -> ELSE CONCAT(ROUND(( (current_year.zz - previous_year.zz) / previous_year.zz )*100 ,2 ),'%')-> -> END AS growth_rate-> -> FROM-> ->          annualprofit current_year-> -> LEFT JOIN-> ->         annualprofit previous_year ON current_year.year = previous_year.year + 1-> -> ORDER BY current_year.year;
+------+---------+-------------+
| year | zz      | growth_rate |
+------+---------+-------------+
| 2010 | 100.00  | NULL        |
| 2011 | 150.00  | 50%         |
| 2012 | 250.00  | 66.67%      |
| 2013 | 800.00  | 220%        |
| 2014 | 1000.00 | 25%         |
+------+---------+-------------+
5 rows in set (0.01 sec)

这篇关于MySQL 实例employee表综合查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/909191

相关文章

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也