데이터베이스/Today's Query

[Today's Query] 부서 이동 경험이 있는 사원들의 현재 부서를 조회 (2025/01/07)

연화 2025. 1. 7. 18:44

부서 이동 경험이 있는 사원들의 정보와 현재 부서를 조회하세요.

SELECT
        e.emp_no,
        CONCAT(e.first_name, ' ', e.last_name) AS name,
        e.hire_date,
        d.dept_name,
        de.to_date
FROM 
	dept_emp AS de 
JOIN 
	departments AS d ON d.dept_no = de.dept_no
JOIN
	employees AS e ON de.emp_no = e.emp_no
WHERE 
	to_date = '9999-01-01' 
AND
	e.emp_no IN (
		SELECT
			e.emp_no
		FROM
			dept_emp AS d
		JOIN
			employees AS e ON d.emp_no = e.emp_no
		JOIN
			departments AS d2 ON d.dept_no = d2.dept_no
		GROUP BY 
			d.emp_no, e.first_name, e.last_name, e.hire_date
		HAVING
			COUNT(d.emp_no) > 1);
    
WITH emp_data AS (
	SELECT
		emp_no
	FROM
		dept_emp
	GROUP BY
		emp_no
	HAVING
		COUNT(emp_no) > 1
),
CurrentDepartments AS (
    SELECT 
        d.emp_no,
        d.dept_no,
        d2.dept_name
    FROM 
        dept_emp AS d
    JOIN 
        departments AS d2 ON d.dept_no = d2.dept_no
    WHERE 
        d.to_date = '9999-01-01' -- 현재 부서만 선택
)
SELECT
        e.emp_no,
        CONCAT(e.first_name, ' ', e.last_name) AS name,
        e.hire_date,
        cd.dept_name AS current_dept
FROM
	employees AS e
JOIN
        emp_data AS edm ON e.emp_no = edm.emp_no
JOIN
    	CurrentDepartments AS cd ON e.emp_no = cd.emp_no;
💡 IN 여러 값을 or 관계로 묶어 나열하는 조건을 WHERE 절에 사용할 수 있는 키워드
    조건의 범위를 지정할 경우 사용하며 위의 경우 서브쿼리의 결과값들을 조건으로 사용

부서 이동 경험이 있는 사원의 정보까지는 출력했으나 부서명을 출력하기 위해 department 테이블과 조인하여 출력하면 다른 부서임에도 불구하고 모든 데이터가 customer service 부서로 출력되는 오류가 있었습니다.

LEFT OUTER JOIN으로 바꾸니까 데이터가 정상출력 되었는데, 이후로는 그냥 JOIN을 해도 정상출력되는 상황이 생겼습니다... 왜 해결이 된 것인지 아시는 분이 계시다면 코멘트 부탁드립니다.