select

e.emp_no,

s1.salary-s2.salary growth

from employees e

join salaries s1

on s1.to_date='9999-01-01'

and s1.emp_no=e.emp_no

join salaries s2

on s2.from_date=e.hire_date 

and s2.emp_no=e.emp_no

order by growth

#理清思路:
找到每个员工现在在职的salary和对应的时间9999-01-01,入职的salary和时间hire_date、from_date,然后通过连续两次连接,查询在职salary-入职salary后别名growth,最后升序排序;

知识点及提疑:

1.单指一次表连接,它的连接键是否有先后顺序,是否可以用and?(上面是双连接键吗?)

答:用and那么前后就没有先后顺序,包括如:s1.emp_no=e.emp_no左右调换也没关系。

2.s1.salary-s2.salary字段名对应列的数值可直接在select后加减+-;

3.二次连接from...join...on(and)...join...on(and)...这种语法需要彻底理解;

4.为什么最后的grouth可以直接用order by排序,按道理不是先from...最后再select...的吗?

应该还没检测到growth才对,又不是检测到窗口函数会返回?