首页 > 试题广场 >

获取所有非manager员工当前的薪水情况

[编程题]获取所有非manager员工当前的薪水情况
  • 热度指数:307002 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个员工表employees简况如下:
emp_no 
birth_date 
first_name 
last_name 
gender hire_date 
10001
1953-09-02
Georgi     
Facello   
 M 1986-06-26
10002 1964-06-02 Bezalel Simmel  F 1996-08-03

有一个,部门员工关系表dept_emp简况如下:
emp_no
dept_no 
from_date 
to_date
10001 d001
1986-06-26 9999-01-01
10002 d001
1996-08-03 9999-01-01

有一个部门经理表dept_manager简况如下:
dept_no emp_no from_date to_date
d001 10002 1996-08-03 9999-01-01


有一个薪水表salaries简况如下:
emp_no 
salary
from_date 
to_date
10001
88958 1986-06-26
9999-01-01
10002 72527 1996-08-03
9999-01-01

获取所有非manager员工薪水情况,给出dept_no、emp_no以及salary,以上例子输出:
dept_no
emp_no
salary
d001 10001 88958

示例1

输入

drop table if exists  `dept_emp` ; 
drop table if exists  `dept_manager` ; 
drop table if exists  `employees` ; 
drop table if exists  `salaries` ; 
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));
INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_manager VALUES('d001',10002,'1996-08-03','9999-01-01');
INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1996-08-03');
INSERT INTO salaries VALUES(10001,88958,'1986-06-26','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'1996-08-03','9999-01-01');

输出

d001|10001|88958
头像 前端小白~佩奇
发表于 2021-03-31 20:36:37
简单的查询 SELECT b.dept_no, a.emp_no, d.salary FROM employees a, dept_emp b, dept_manager c, salaries d WHERE a.emp_no = 展开全文
头像 数据分析阿宇君
发表于 2020-08-21 17:17:02
思路:先找到所有非manager员工emp_no,再内连接工资表和部门表即可 select de.dept_no,a.emp_no,s.salary from (select emp_no from employees where emp_no not in (select emp_no fro 展开全文
头像 杨师傅和面包
发表于 2021-01-24 17:22:56
分享一个逻辑很清晰的答案: 步骤 找出所有非manger的emp_no,这里通过差集实现:select t1.emp_no from employees t1 left join dept_manager t2 on t1.emp_no = t2.emp_no where t2.emp_no 展开全文
头像 不是江小白
发表于 2020-12-02 12:49:54
2022.02.15 更新 再次感谢评论区的朋友纠正!!! 之前有朋友评论区说的不用连接员工表就可以的方法最近又通不过了。。。所以掌柜再次更新了解法,下面是测试和提交都可以通过的代码: SELECT d.dept_no, d.emp_no, s.salary FROM employees e JO 展开全文
头像 109号
发表于 2020-12-03 12:24:45
这里给出了四个表,每个表里都有一个主键emp_no,所以这里要注意的是每个表里的emp_no范围是否相同。理论上来说,employees表里的数据应该是员工信息最全、最准确的,dept_emp、dept_manager中的emp_no是employees中的子集,salaries中的emp_no可能 展开全文
头像 N刻后告诉你
发表于 2020-05-19 20:35:57
题目:获取所有非manager员工当前的薪水情况,给出dept_no、emp_no以及salary,当前表示to_date=‘9999-01-01' 方法1:多表联查+NOT INSELECT de.dept_no, de.emp_no, s.salaryFROM dept_emp AS de, e 展开全文
头像 王饱饱不饱
发表于 2021-07-17 09:57:55
selectdept_no,s.emp_no,salaryfrom salaries sjoin dept_emp d_eon s.emp_no = d_e.emp_nowhere s.emp_no not in ( select emp_no 展开全文
头像 卯兔
发表于 2022-02-10 16:24:22
需求:拿到非 manager 的员工数据 思路:dept_manager 表中不存在的数据就是符合条件的数据,拿到 dept_manager 中的emp_no作为条件,关联其他三张表进行查询 代码: select de.dept_no, e.emp_no, s.salary from employ 展开全文
头像 jiang_dr
发表于 2021-10-12 10:23:19
本题有两种解法 方法一:inner join 思路:本题的重点在于获取非manager员工,因此我们使用inner join将employees,dept_emp,salaries表进行连接,在 where 条件中加入 e.emp_no not in (select emp_no from dept 展开全文
头像 LY_coder
发表于 2021-11-17 14:51:44
*1.找部门经理的id    2.在所有员工中排除部门经理的id(NOT IN)    3.非经理的员工表和薪水表 salaries 连接 select t.dept_no,t.emp_no,s.salary from salaries s,( &nbs 展开全文

问题信息

难度:
702条回答 25595浏览

热门推荐

通过挑战的用户

查看代码