ORACLE SQL

SQL 관련 문제 풀이

최종군 2024. 7. 19. 20:05

 

-- 3. EMPLOYEE테이블에서 사원명, 입사일-오늘, 오늘-입사일 조회
--     (단, 각 별칭은 근무일수1, 근무일수2가 되도록 하고 모두 정수(내림), 양수가 되도록 처리)

 

SELECT EMP_NAME 사원명, FLOOR(ABS(HIRE_DATE - SYSDATE )) + 1 "근무일수1" , TRUNC(ABS(sysdate - HIRE_DATE ))+ 1 "근무일수2"
FROM eMPLOYEE;

 

-- 4. EMPLOYEE테이블에서 사번이 홀수인 직원들의 정보 모두 조회
SELECT *
FROM employee
WHERE MOD(EMP_ID, 2) != 0;

 

 

SELECT *
FROM employee
WHERE   EXTRACT(YEAR FROM sysdate) - EXTRACT(YEAR FROM HIRE_DATE) >= 20;

-- WHERE MONTHS_BETWEEN(SYSDATE, HERE_DATE) >= 240;
-- ADD_MONTHS(HIRE_DATE, 240) < SYSDATE;

 

 

 

 

-- 7. EMPLOYEE테이블에서 직원 명, 부서코드, 생년월일, 나이(만) 조회
--     (단, 생년월일은 주민번호에서 추출해서 00년 00월 00일로 출력되게 하며 
--     나이는 주민번호에서 출력해서 날짜데이터로 변환한 다음 계산)
SELECT EMP_NAME, DEPT_CODE, SUBSTR(EMP_NO, 1, 2) || '년' || SUBSTR(EMP_NO, 3,2) || '월' || SUBSTR(EMP_NO, 5,2) || '일' 생년월일
     -- TO_CHAR(TO_DATE(SUBSTR(EMP_NO, 1,6)), 'YY'년'')
     --, --  EXTRACT(YEAR FOR )
FROM employee;

 

 

-- 8. EMPLOYEE테이블에서 부서코드가 D5, D6, D9인 사원만 조회하되 D5면 총무부, D6면 기획부, D9면 영업부로 처리
--     (단, 부서코드 오름차순으로 정렬)

--  * DECODE : (비교대상(컬럼/연산식/ 함수식), 비교값1, 결과값1, 비교값2, 결과값2  
SELECT EMP_NAME, DECODE(DEPT_CODE, 'D5', '총무부', 'D6', '기획부', 'D9', '영업부' , '미배정')
FROM employee
WHERE dept_code IN('D5','D6','D9')
ORDER BY DEPT_CODE;

 

다른 풀이 

 

SELECT EMP_ID, EMP_NAME, DEPT_CODE,
        CASE 
            WHEN DEPT_CODE = 'D5' THEN '총무부'
             WHEN DEPT_CODE = 'D6' THEN '기획부'
             WHEN DEPT_CODE = 'D9' THEN '영업부'
         END
         FROM employee
         WHERE dept_code IN('D5','D6','D9')
         ORDER BY 3;