MySQL实战--基于emp dept salgrade表

MySQL实战-基于emp,dept,salgrade表的34道题

--emp表
+-------+--------+-----------+------+------------+---------+---------+--------+
| EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL     | COMM    | DEPTNO |
+-------+--------+-----------+------+------------+---------+---------+--------+
|  7369 | SMITH  | CLERK     | 7902 | NULL       |  800.00 |    NULL |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | NULL       | 1600.00 |  300.00 |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | NULL       | 1250.00 |  500.00 |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-02-04 | 2975.00 |    NULL |     20 |
|  7654 | MARTIN | SALESMAN  | 7698 | NULL       | 1250.00 | 1400.00 |     30 |
|  7698 | BLAKE  | MANAGER   | 7839 | NULL       | 2850.00 |    NULL |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-09-06 | 2450.00 |    NULL |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | NULL       | 3000.00 |    NULL |     20 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-08-09 | 1500.00 |    0.00 |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | NULL       | 1250.00 |    NULL |     20 |
|  7900 | JAMES  | CLERK     | 7566 | 1981-03-12 | 1250.00 |    NULL |     30 |
|  7902 | FROD   | ANALYST   | 7782 | 1981-03-12 | 3000.00 |    NULL |     20 |
|  7934 | MILLER | CLERK     | 7698 | NULL       | 1300.00 |    NULL |     10 |
|  7839 | KING   | PRESIDENT | NULL | NULL       | 5000.00 |    NULL |     10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
14 rows in set (0.00 sec)

--dept表
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.00 sec)
--salgrade表
+-------+-------+-------+
| GRADE | LOSAL | HISAL |
+-------+-------+-------+
|     1 |   700 |  1200 |
|     2 |  1201 |  1400 |
|     3 |  1401 |  2000 |
|     4 |  2001 |  3000 |
|     5 |  3001 |  9999 |
+-------+-------+-------+
5 rows in set (0.00 sec)

1、取得每个部门最高薪水的人员名称

--思路:
1、第一步先找出每个部门最大工资数
2、将1中的表当成临时表t,与emp e表进行连接。连接条件是:t.deptno=e.deptno and t.maxsal=e.sal

SELECT e.ename,e.sal,e.deptno FROM emp e JOIN
(select deptno,max(sal) as maxsal from emp group by deptno) t
ON e.deptno=t.deptno AND e.sal=t.maxsal;
+-------+---------+--------+
| ename | sal     | deptno |
+-------+---------+--------+
| BLAKE | 2850.00 |     30 |
| SCOTT | 3000.00 |     20 |
| FROD  | 3000.00 |     20 |
| KING  | 5000.00 |     10 |
+-------+---------+--------+
4 rows in set (0.00 sec)

2、哪些人的薪水在部门的平均薪水之上

--思路
1、找出部门平均薪水(按照部门编号分组求平均值)
2、将查询结果当成临时表t,t表与emp e进行表连接 条件:t.deptno=e.deptno and e.sal>t.avgsal

SELECT e.ename,e.sal,t.* FROM emp e JOIN
(select deptno,avg(sal) as avgsal from emp group by deptno) t
ON e.deptno=t.deptno  AND e.sal>t.avgsal;

+-------+---------+--------+-------------+
| ename | sal     | deptno | avgsal      |
+-------+---------+--------+-------------+
| JONES | 2975.00 |     20 | 2205.000000 |
| BLAKE | 2850.00 |     30 | 1616.666667 |
| SCOTT | 3000.00 |     20 | 2205.000000 |
| FROD  | 3000.00 |     20 | 2205.000000 |
| KING  | 5000.00 |     10 | 2916.666667 |
+-------+---------+--------+-------------+
5 rows in set (0.00 sec)

3、取得部门中(所有人的)平均的薪水等级

--将所有人的薪水等级求出来再平均
--将emp e和salgrade s进行表连接,连接条件是e.sal BETWEEN s.losal AND s.hisal。

SELECT e.deptno,avg(s.grade) FROM emp e JOIN salgrade s
ON e.sal BETWEEN s.losal AND s.hisal
GROUP BY e.deptno;
+--------+--------------+
| deptno | avg(s.grade) |
+--------+--------------+
|     10 |       3.6667 |
|     20 |       3.0000 |
|     30 |       2.6667 |
+--------+--------------+
3 rows in set (0.00 sec)

变形:取得部门中(所有人的)平均 薪水等级。(没有的)

--先求各部门平均薪水,再求对应的等级
--从emp e中取出deptno,avg(sal)并将其看作临时表t
--将t和salgrade s进行表连接,连接条件是t.avgsal BETWEEN s.losal AND s.hisal
SELECT t.*,s.grade FROM salgrade s JOIN
(SELECT deptno,avg(sal) avgsal FROM emp GROUP BY deptno) t
ON t.avgsal BETWEEN s.losal AND s.hisal;
+--------+-------------+-------+
| deptno | avgsal      | grade |
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 根据题目要求,需建立一个管理马士兵员工、部门和薪资等级的数据库。根据给出的关键词,我们可以创建以下三个dept(部门)、emp(员工)和salgrade(薪资等级),具体结构如下: 1. 部门dept): 名:dept 字段:dept_id(部门编号,主键)、dept_name(部门名称) 2. 员工emp): 名:emp 字段:emp_id(员工编号,主键)、emp_name(员工姓名)、dept_id(部门编号,外键关联deptdept_id字段)、salary(薪资) 3. 薪资等级salgrade): 名:salgrade 字段:grade(等级号码,主键)、low_salary(最低薪资)、high_salary(最高薪资) 通过以上三个的设计,可以实现马士兵员工的部门、薪资等级的管理。在emp中,通过dept_id字段与dept进行关联,方便查询员工所在部门信息;在emp中,salary字段存储员工的薪资信息;在salgrade中,通过grade字段建立薪资等级和对应薪资范围的关联,方便查询员工所在薪资等级。 以上是根据提供的关键词建立的简单数据库结构,具体根据实际需求可能有所不同。在实际使用中,还可以根据具体业务需求增加更多字段和的设计,以满足更复杂的数据管理需求。 ### 回答2: 马士兵 dept emp salgrade mysql有以下几个步骤: 首先,我们需要建立一个部门(dept。这个将包含部门的信息,如部门编号(deptno)和部门名称(dname)。可以使用以下语句创建该: CREATE TABLE dept ( deptno INT PRIMARY KEY, dname VARCHAR(255) NOT NULL ); 接下来,我们可以创建一个员工(emp。这个将包含员工的信息,如员工编号(empno)、员工姓名(ename)、职位(job)、上级领导(mgr)、入职日期(hiredate)、工资(sal)、奖金(comm)和所属部门编号(deptno)。可以使用以下语句创建该: CREATE TABLE emp ( empno INT PRIMARY KEY, ename VARCHAR(255) NOT NULL, job VARCHAR(255), mgr INT, hiredate DATE, sal FLOAT, comm FLOAT, deptno INT, FOREIGN KEY (deptno) REFERENCES dept (deptno) ); 最后,我们可以创建一个工资等级(salgrade)。这个将包含不同工资等级的信息,如等级(grade)、最低工资(losal)和最高工资(hisal)。可以使用以下语句创建该: CREATE TABLE salgrade ( grade INT PRIMARY KEY, losal FLOAT, hisal FLOAT ); 通过以上步骤,我们成功建立了马士兵 dept emp salgrade 的 mysql 结构。这些将有助于存储和管理相关的部门、员工和工资等级信息。 ### 回答3: 马士兵dept emp salgrade mysql如下: 1. 建立dept: CREATE TABLE dept ( deptno INT(4) NOT NULL, -- 部门编号 dname VARCHAR(40), -- 部门名称 loc VARCHAR(30), -- 部门所在地 PRIMARY KEY (deptno) ); 2. 建立emp: CREATE TABLE emp ( empno INT(4) NOT NULL, -- 员工编号 ename VARCHAR(10), -- 员工姓名 job VARCHAR(30), -- 员工职位 mgr INT(4), -- 上级员工编号 hiredate DATE, -- 入职日期 sal DECIMAL(7, 2), -- 员工薪水 comm DECIMAL(7, 2), -- 员工佣金 deptno INT(4), -- 部门编号 PRIMARY KEY (empno), FOREIGN KEY (deptno) REFERENCES dept(deptno) ); 3. 建立salgrade: CREATE TABLE salgrade ( grade INT(2) NOT NULL, -- 薪资等级 losal DECIMAL(7, 2), -- 最低薪资 hisal DECIMAL(7, 2), -- 最高薪资 PRIMARY KEY (grade) ); 以上是根据马士兵所提供的信息,在MySQL中建立了三个deptempsalgrade。dept用于存储部门信息,包括部门编号、部门名称和部门所在地;emp用于存储员工信息,包括员工编号、员工姓名、员工职位、上级员工编号、入职日期、员工薪水、员工佣金和所属部门编号;salgrade用于存储薪资等级信息,包括薪资等级、最低薪资和最高薪资。在emp中,使用了外键约束,将部门编号与dept中的部门编号进行关联。这样就可以通过查询操作等关联的数据,获得相关的员工和部门信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值