-- 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;