知识点:联结、别名
一.查找各个部门当前领导当前薪水详情以及其对应部门编号
题目描述
查找各个部门当前(dept_manager.to_date='9999-01-01')领导当前(salaries.to_date='9999-01-01')薪水详情以及其对应部门编号dept_no(注:请以salaries表为主表进行查询,输出结果以salaries.emp_no升序排序,并且请注意输出结果,dept_no列是最后一列)

方法1:内部联结
select s.*,d.dept_no
from salaries as s inner join dept_manager as d
on s.emp_no=d.emp_no
where d.to_date='9999-01-01'
and s.to_date='9999-01-01'
order by s.emp_no
注:inner join中的inner可以省略,甚至inner join整个省略替换成,(逗号)也可以
起别名的dept_manager as d中的as可以省略
*可以省略
方法2:
select s.*,d.dept_no
from salaries as s,dept_manager as d
where s.emp_no=d.emp_no
and d.to_date='9999-01-01'
and s.to_date='9999-01-01'
order by s.emp_no
注:因为使用了salaries.(其中包含emp_no),所以order by后面的emp_no可以不加前缀
因为存在换部门,甚至离职的情况,所以d.to_date='9999-01-01’
2.获取所有部门当前的当前薪水情况,给出dept_no, emp_no以及salary
题目描述
获取所有部门当前(dept_manager.to_date='9999-01-01')manager的当前(salaries.to_date='9999-01-01')薪水情况,给出dept_no, emp_no以及salary(请注意,同一个人可能有多条薪水情况记录)
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`));
分析
因为同一emp_no在salaries表中对应多条涨薪记录,而当s.to_date = '9999-01-01'时是该员工当前的薪水记录
select d.dept_no,d.emp_no,s.salary
from salaries as s inner join dept_manager as d
on s.emp_no=d.emp_no
where d.to_date='9999-01-01'
and s.to_date='9999-01-01'
或
select d.dept_no,d.emp_no,s.salary
from dept_manager as d inner join salaries as s
on d.emp_no=s.emp_no
and d.to_date=s.to_date
and d.to_date='9999-01-01'
本文详细介绍了如何使用SQL的内部联结(INNER JOIN)和别名来查询部门当前领导及其薪水详情,同时提供了获取所有部门当前经理薪水情况的方法。通过实际案例,展示了如何从salaries和dept_manager表中筛选出所需信息。
1万+

被折叠的 条评论
为什么被折叠?



