数据库SQL实战 --23.获取员工其当前的薪水比其manager当前薪水还高的相关信息

本文介绍如何通过SQL查询,找出当前薪资高于其经理的员工。利用INNER JOIN连接salaries与dept_emp、dept_manager表,筛选出to_date为'9999-01-01'的记录,确保数据的时效性。最终输出包括员工编号、经理编号及各自的薪资。

题目描述

获取员工其当前的薪水比其manager当前薪水还高的相关信息,当前表示to_date='9999-01-01',
结果第一列给出员工的emp_no,
第二列给出其manager的manager_no,
第三列给出该员工当前的薪水emp_salary,
第四列给该员工对应的manager当前的薪水manager_salary
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 `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`));

解决思路

SELECT sem.emp_no emp_no, sdm.emp_no manager_no, sem.salary emp_salary,sdm.salary manager_salary
FROM (SELECT s.salary, s.emp_no, de.dept_no 
	FROM salaries s 
	INNER JOIN dept_emp de
	ON s.emp_no = de.emp_no 
	AND s.to_date = '9999-01-01' ) sem, 
(SELECT s.salary, s.emp_no, dm.dept_no 
	FROM salaries s 
	INNER JOIN dept_manager dm
	ON s.emp_no = dm.emp_no 
	AND s.to_date = '9999-01-01' ) sdm
WHERE sem.dept_no = sdm.dept_no AND sem.salary > sdm.salary
  • 先用INNER JOIN连接salaries和demp_emp,建立当前所有员工的工资记录sem
  • 再用INNER JOIN连接salaries和demp_manager,建立当前所有员工的工资记录sdm
  • 最后用限制条件sem.dept_no = sdm.dept_no AND sem.salary > sdm.salary找出同一部门中工资比经理高的员工,并根据题意依次输出emp_no、manager_no、emp_salary、manager_salary
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值