-- 1. 70년대 생(1970~1979) 중 여자이면서 전씨인 사원의 이름과 주민번호, 부서 명, 직급 조회
SELECT
emp_name,
emp_no,
dept_title,
job_name
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON DEPT_CODE = DEPT_ID
LEFT JOIN JOB USING (JOB_CODE)
WHERE (SUBSTR(EMP_NO, 1, 2) BETWEEN 70 AND 79)
-- EXTRACT(YEAR FROM TO_DATE(SUBSTR(EMP_NO, 1, 6))) BETWEEM 1970 AND 1979
AND SUBSTR(EMP_NO, 8, 1) = 2
AND EMP_NAME LIKE '전%';
-- 2. 나이 상 가장 막내의 사원 코드, 사원 명, 나이, 부서 명, 직급 명 조회
SELECT
E.*
FROM (SELECT
emp_id,
emp_name,
EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM TO_DATE(SUBSTR(EMP_NO, 1, 2), 'RR')) AS "나이",
dept_title,
job_name
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON DEPT_CODE = DEPT_ID
LEFT JOIN JOB USING (JOB_CODE)
ORDER BY "나이" ASC) E
WHERE ROWNUM = 1;
솔직히 이렇게 어렵게 풀 필요 없었다고 생각하는데 풀 때는 생각나는게 이거 밖에 없었다.
-- 3. 이름에 ‘형’이 들어가는 사원의 사원 코드, 사원 명, 직급 조회
SELECT
emp_id,
emp_name,
job_name
FROM EMPLOYEE
JOIN JOB USING (JOB_CODE)
WHERE EMP_NAME LIKE '%형%';
-- 4. 부서코드가 D5이거나 D6인 사원의 사원 명, 직급 명, 부서 코드, 부서 명 조회
SELECT
emp_name,
job_NAME,
dept_code,
dept_title
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON DEPT_CODE = DEPT_ID
LEFT JOIN JOB USING (JOB_CODE)
WHERE DEPT_CODE IN ('D5', 'D6')
ORDER BY EMP_ID;
-- 5. 보너스를 받는 사원의 사원 명, 부서 명, 지역 명 조회
SELECT
emp_name,
bonus,
dept_title,
local_name
FROM EMPLOYEE
JOIN DEPARTMENT ON DEPT_CODE = DEPT_ID
JOIN LOCATION ON LOCATION_ID = LOCAL_CODE
WHERE BONUS IS NOT NULL;