SQL练习:SQL3_中等
题目: 查找各个部门当前(dept_manager.to_date=‘9999-01-01’)领导当前(salaries.to_date=‘9999-01-01’)薪水详情以及其对应部门编号dept_no
注:输出结果以salaries.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`));
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL, -- '部门编号'
`emp_no` int(11) NOT NULL, -- '员工编号'
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
解答
#方式1:隐式内连接
SELECT S.*,D.dept_no
FROM salaries S,dept_manager 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;
#方式2:显式内连接
select s.*,d.dept_no
from salaries s
inner join dept_manager d on s.emp_no=d.emp_no # inner可省略
where s.to_date='9999-01-01' and d.to_date='9999-01-01';
#方式3:左外连接,不建议使用
select s.*,d.dept_no
from salaries s
left outer join dept_manager d on s.emp_no = d.emp_no # outer可省略
where s.to_date = '9999-01-01' and d.to_date = '9999-01-01';
#方式4:右外连接,不建议使用
select s.*,d.dept_no
from salaries s
right outer join dept_manager d on s.emp_no = d.emp_no # outer可省略
where s.to_date = '9999-01-01' and d.to_date = '9999-01-01';
##关于外连接:
##1.对于附表,即使不存在对应于主表的数据,也不影响主表的检索结果。
##2.一般用于查询除了交集部分的剩余的不匹配的行,此题没有这个需求。
个人整理的笔记,仅供学习使用,有问题麻烦指正。
题目及解答思路均来源于:牛客网