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才对,又不是检测到窗口函数会返回?