解题思路:

使用2个子查询,第一个子查询查出每个部门每名员工的薪水;第二个子查询查出每个部门的最高薪水。

1.查询查出每个部门每名员工的薪水
SELECT d.emp_no, d.dept_no, s.salary 
FROM dept_emp d
LEFT JOIN salaries s 
ON d.emp_no = s.emp_no 

执行结果如下:

2.查出每个部门的最高薪水
    SELECT
        d.dept_no,
        max( salary )  salary
    FROM
        dept_emp d
        LEFT JOIN salaries s ON d.emp_no = s.emp_no 
    GROUP BY
    d.dept_no 

图片说明

3.通过这两张子表做链接,只保留部门编号相同并且薪水相同的数据

所以最终的查询sql语句为

SELECT
    t1.dept_no,
    t1.emp_no,
    t1.salary 
FROM
    (
    SELECT
        d.emp_no,
        d.dept_no,
        s.salary 
    FROM
        dept_emp d
        LEFT JOIN salaries s ON d.emp_no = s.emp_no 
    ) t1,
    (
    SELECT
        d.dept_no,
        max( salary ) salary 
    FROM
        dept_emp d
        LEFT JOIN salaries s ON d.emp_no = s.emp_no 
    GROUP BY
        d.dept_no 
    ) t2 
WHERE
    t1.dept_no = t2.dept_no 
    AND t1.salary = t2.salary 
ORDER BY
    t1.dept_no

运行结果为:图片说明