day3
codedecent 852 0

DAY3

本文一共586字,读完大概需要6分钟

适用人群:sql初学者

问题来源:[牛客网sql在线编程题-3]

问题描述查找当前薪水详情以及部门编号dept_no

问题解决:联表查询中查找固定字段的问题

1.由于最终输出中没有多余累赘的null,因此我们选取INNER JOIN的方式来取两表交集,同时指定需要获取的字段,以避免所有字段的输出,同时由于题目需要排序和升序,加上排序和升序的关键字

day3

作为一个刚学完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,我吐了,你们呢) 周末快乐哈~

评论区

索引目录