더북(TheBook)

2 정답

SELECT b.dept_name, a.emp_no, CONCAT(c.first_name, ' ', c.last_name) emp_name,
       a.from_date ,a.to_date
  FROM dept_manager a
 RIGHT JOIN departments b
    ON a.dept_no = b.dept_no
  LEFT JOIN employees c
    ON a.emp_no = c.emp_no
 WHERE SYSDATE() BETWEEN IFNULL(a.from_date, SYSDATE())
                     AND IFNULL(a.to_date, SYSDATE());

실행결과

해설 관리자 이름을 가져오려면 employees 테이블과 조인해야 합니다. 그런데 IT 부서는 할당된 관리자가 없으므로 SELECT 절의 a.emp_no 칼럼이 반환하는 값은 NULL입니다. 따라서 employees 테이블과 외부 조인을 해야 합니다. 이때 dept_manager 테이블에 데이터가 없으므로 LEFT 조인을 사용합니다. 여기서도 관리자 이름은 CONCAT() 함수로 이름과 성을 연결해 조회했습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.