select s.emp_no,s.salary,s.from_date,s.to_date,dm.dept_no from salaries as s innerjoin dept_manager as dm on s.emp_no=dm.emp_no
结果:
emp_no
salary
from_date
to_date
dept_no
10002
72527
2001-08-02
9999-01-01
d001
10004
74057
2001-11-27
9999-01-01
d004
10005
94692
2001-09-09
9999-01-01
d003
10006
43311
2001-08-02
9999-01-01
d002
知识点:
连接查询:表1 left join 表2 on 表1.列名=表2.列名2 (左表全显示,右表显示满足条件的)
表1 right join 表2 on 表1.列名=表2.列名2 (右表全显示,左表显示满足条件的)
表1 inner join 表2 on 表1.列名=表2.列名2 (左右两表都显示只满足条件的)
先查询每个部门中薪资最高的员工,表1select d.dept_no,max(s.salary) salary
from
dept_emp d innerjoin salaries s on d.emp_no=s.emp_no
groupby dept_no
结果:
dept_no
salary
d001
88958
d002
92527
再查询员工、部门、薪水,表2
select d.dept_emp,d.emp_no,s.salary
from
dept_emp d inner join salaries s on d.emp_no=s.emp_no
结果:
dept_no
emp_no
salary
d001
10001
88958
d001
10002
72527
d002
10003
92527
将表1和表2结合起来,通过内查询找出符合条件的结果
select t1.dept_no,t2.emp_no,t1.salary
from(select d.dept_no,max(s.salary) salary
from
dept_emp d innerjoin salaries s on d.emp_no = s.emp_no
groupby dept_no) t1
innerjoin(select d.dept_no,d.emp_no,s.salary
from
dept_emp d innerjoin salaries s on d.emp_no = s.emp_no ) t2
on t1.dept_no=t2.dept_no and t1.salary=t2.salary
orderby
t1.dept_no
思路:因为可能有相同薪资的人,所以可以根据题目,先搜索薪水第二多是多少钱,使用distinct关键字去重。之后根据薪资看一下有哪些员工,最后对员工进行排序输出
select emp_no,salary from salaries where salary=(selectdistinct salary from salaries orderby salary desclimit1,1)
由于不能使用orderby,那么就换一种思路:
1.先查出薪资最大的
selectmax(salary)from salaries
2.再根据最大的搜出薪资第二大的
selectmax(salary)from salaries where salary !=(selectmax(salary)from salaries)3.最后根据薪资搜出员工编号,薪水等数据
select e.emp_no,s.salary,e.last_name,e.first_name
from employees e join salaries s
on e.emp_no = s.emp_no and s.emp_no =(selectmax(salary)from salaries
where salary !=(selectmax(salary)from salaries
))
思路:此题有三张表,1.可以使用第1+第3张表查找出last_name和first_name
2.接着使用查询出的表再与第二张表关联查询出最后结果
注意:题目要求也要输出没有分配部门的员工,所以需要使用外连接
select
e.first_name,
e.last_name,
de.dept_no
from
employees e
leftjoin
dept_emp de on e.emp_no=de.emp_no
结果:
first_name
last_name
dept_no
Georgi
Facello
d001
Bezale
Simmel
d001
Parto
Bamford
d002
Christian
Koblick
None
select
t1.last_name,
t1.first_name,
d.dept_name
from
departments d
rightjoin(select
e.first_name,
e.last_name,
de.dept_no
from
employees e
leftjoin dept_emp de on e.emp_no = de.emp_no
) t1 on d.dept_no = t1.dept_no
select
t1.emp_no,(t2.salary - t1.salary)as growth
from(select
s.emp_no,
s.salary
from
employees e
innerjoin salaries s on e.emp_no = s.emp_no
and e.hire_date = s.from_date
) t1,(select
emp_no,
salary
from
salaries
where
to_date ='9999-01-01') t2
where t1.emp_no = t2.emp_no
orderby growth