DAY3
本文一共586字,读完大概需要6分钟
适用人群:sql初学者
问题来源:[牛客网sql在线编程题-3]
问题描述:查找当前薪水详情以及部门编号dept_no
问题解决:联表查询中查找固定字段的问题
1.由于最终输出中没有多余累赘的null,因此我们选取INNER JOIN的方式来取两表交集,同时指定需要获取的字段,以避免所有字段的输出,同时由于题目需要排序和升序,加上排序和升序的关键字
作为一个刚学完JOIN出来的练习僧,很快啊,就写出来以下sql语句
SELECT
a.*,
b.dept_no
FROM
`salaries` a
INNER JOIN dept_manager b ON a.emp_no = b.emp_no
ORDER BY
a.emp_no ASC;
点击执行,也没问题,顺利通过。
但是再看一遍需求,是不是少了点什么呢?
请你查找各个部门当前领导的薪水详情以及其对应部门编号dept_no,输出结果以salaries.emp_no升序排序,并且请注意输出结果里面dept_no列是最后一列
当前领导的薪水详情
即如果与薪水表中对应的离职时间不符,就不属于当前领导,有可能已经离职了。所以严格来说,需要加上to_date的限定条件:
SELECT
a.*,
b.dept_no
FROM
`salaries` a
INNER JOIN dept_manager b ON a.emp_no = b.emp_no
WHERE
a.to_date = '9999-01-01'
AND b.to_date = '9999-01-01';
反倒是,由于dept_no作为主键,默认会作为 ORDER BY 的条件,且默认排序方式是升序,因此可以省略。
涉及关键字/函数(已经做过解释的不再赘述):
ORDER BY
ASC
INNER JOIN: 内连接,用于取两表之间的交集。通用写法如下:
SELECT column, another_table_column, …
FROM mytable (主表)
INNER JOIN another_table (要连接的表)
ON mytable.id = another_table.id
WHERE condition(s)
ORDER BY column, … ASC/DESC
LIMIT num OFFSET offset_num;
ON: 连接时遵循的条件。在本题中为员工号emp_no
宝,我去写sql了,写的什么SQL,写的与你十指相扣 (xdm,我吐了,你们呢) 周末快乐哈~