[leetcode] employees-with-missing-information

Lana Chung·2022년 10월 27일
0

SQLRunday

목록 보기
15/16
post-custom-banner

hackerrank 보다 leetcode 문제들이 더 깔끔하고 딱 배워야 하는 주제별로 문제가 잘 나와있는 거 같다.
사실 그냥 서버가 더 빨라서 좋다.

employees 테이블과, salaries 테이블에서 누락값을 갖고 있는 employee_id를 출력해라
1. name 필드가 NULL인 id
2. 혹은 salary 필드가 NULL인 id

Key Points

  1. mysql은 Full Outer Join을 지원하지 않는다
  2. left join, right join한 결과값 각각을 union으로 합쳐서 조회한다.
  3. union은 조회하는 두 테이블의 필드 값이 같은 경우 알아서 distinct 값만 조회해서 보여주고, 중복해도 상관없이 조회하고 싶다면 union all을 사용한다.
  4. union 마지막에 order by를 붙여서 정렬 가능

처음 내가 쓴 쿼리

(select employee_id from employees e
left join salaries s on e.employee_id = s.employee_id
where s.salary is NULL)
union
(select employee_id from employees e
right join salaries s on e.employee_id = s.employee_id
where e.name is NULL)
order by employee_id

근데 반복되는 구문이 좀 많은 거 같아서 discussion을 봤는데 다음처럼 좀 더 깔끔하게 쓸 수 있을 거 같다

Solution

select employee_id
from 
((select * from employees left join salaries using(employee_id))
union
(select * from employees right join salaries using(employee_id)))as T
where T.name is NULL or T.salary is NULL
order by 1

훨씬 깔끔해졌다! 가독성이 높아졌다
우선 using을 써서 join on구문을 짧게 썼는데 필드 이름이 똑같을 경우(employee_id) using(field)로 사용이 가능하다
그리고 order by 1으로 첫번째 칼럼으로 정렬한다고 축약해서 쓸 수 있다.

profile
그게 쉬운 일이었다면, 아무런 즐거움도 얻을 수 없었을 것이다.
post-custom-banner

0개의 댓글