[SQL] self-join 문제 181번

박진우·2023년 12월 31일

181. Employees Earning More Than Their Managers

<문제>
아래 테이블에서 자신의 manager보다 많은 급여를 받는 employee의 name을 출력하라.

Employee table:

idnamesalarymanagerId
1Joe700003
2Henry800004
3Sam60000null
4Max90000null

<문제 해석>

  1. manager의 salary는 어디서 보지? 잘 보면 managerId = id이다. id가 3인 직원은 직책이 ‘Manager’인 것으로 managerId에 있는 3이 그를 가리키는 것이다.

  2. 그러면 employee 테이블을 ‘id = managerid’라는 기준으로 SELF JOIN해야 하는 것이다. (자기 스스로 JOIN하는 것을 SELF JOIN이라고 한다)

SELECT *
FROM employee AS e1 LEFT JOIN employee AS e2
ON e1.managerId = e2.id;
idnamesalarymanagerIdidnamesalarymanagerId
1Joe7000033Sam60000null
2Henry8000044Max90000null
3Sam60000nullnullnullnullnull
4Max90000nullnullnullnullnull

지금은 id = 1, id = 2 행만 현재 문제풀이에 의미있는 행이다.
여기서 조건에 맞는 데이터만 원하는 형태로 뽑아내면 된다.


<최종 쿼리문>

SELECT e1.name AS 'Employee'
FROM employee AS e1 LEFT JOIN employee AS e2
ON e1.managerId = e2.id
WHERE e1.salary > e2.salary;

짜라란 ~

0개의 댓글