牛客在线编程练习:SQL3_中等

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.一般用于查询除了交集部分的剩余的不匹配的行,此题没有这个需求。

个人整理的笔记,仅供学习使用,有问题麻烦指正。
题目及解答思路均来源于:牛客网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值