4 정답
SELECT COUNT(*)
FROM employees a
WHERE NOT EXISTS (SELECT 1
FROM dept_emp b
WHERE SYSDATE() BETWEEN b.from_date AND b.to_date
AND a.emp_no = b.emp_no);
실행결과
해설 부서에 속한 사원 정보는 dept_emp 테이블에 있고, 현재 시점 기준으로 구하려면 현재 날짜를 반환하는 SYSDATE() 값이 from_date와 to_date 사이에 있는 건을 조회하면 됩니다. 이를 조건 서브쿼리로 만들고, 메인쿼리에는 모든 사원 정보가 들어 있는 employees 테이블을 명시합니다. 부서에 속하지 않은 사원을 구해야 하니 WHERE 절에서 NOT EXISTS 연산자를 사용합니다. 서브쿼리의 WHERE 절에는 두 테이블(employees와 dept_emp)의 emp_no 칼럼 값이 같다는 조건을 줍니다. 그리고 메인쿼리의 SELECT 절에 COUNT() 함수를 사용하면 dept_emp 테이블에는 없지만, employees 테이블에는 있는 총 사원 수를 구할 수 있습니다.