본문 바로가기

Oracle Database /SQL-문제풀이

[ORACLE] DB의 서브 쿼리 문제 풀이

33) 각 사원의 이름을 표시하고 근무 달 수(입사일로부터 현재까지의 달수)를 계산하여

열 레이블을 MONTHS_WORKED로 지정하시오. 결과는 정수로 반올림하여 표시하고 근무달 수를 기준으로 오름차순으로 정렬하시오.(MONTHS_BETWEEN 함수 참고)


SELECT ENAME, ROUND(MONTHS_BETWEEN(SYSDATE, HIREDATE)) "MONTHS_WORKED"

FROM EMP

ORDER BY MONTHS_WORKED ASC;


--ROUND 반올림

/*MONTHS_BETWEEN 함수

MONTHS_BETWEEN은 두 날짜 사이의 월 수를 계산합니다.

첫 번째 날짜가 두 번째 날짜 이후인 경우에는 결과 값이 양수이고, 그렇지 않으면 결과 값이 음수입니다. 두 인수 중 하나라도 NULL이면 결과 값도 NULL입니다.

*/


34)emp테이블에서 이름, 업무, 근무연차를 출력하시오.

SELECT ENAME, JOB, TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)/12)

FROM EMP;


TRUNC 함수 : 다른 버전 숫자의 소수 부분을 제거하여 숫자를 정수로 자릅니다.


35)emp테이블에서 사원이름, 월급, 월급과 커미션을 더한 값을 컬럼명 실급여라고 해서 출력.

단, NULL값은 나타나지 않게 작성하시오.


SELECT ENAME, SAL, SAL+NVL(COMM, 0) 실급여

FROM EMP;


36)월급과 커미션을 합친 금액이 2,000이상인 급여를 받는 사원의 이름,업무,월급,커미션,고용날짜 를 출력하시오. 단, 고용날짜는 1980-12-17 형태로 출력하시오.


SELECT ENAME,JOB,SAL,NVL(COMM, 0), TO_CHAR(HIREDATE, 'YYYY-MM-DD') 고용일

FROM EMP

WHERE SAL+NVL(COMM, 0) >= 2000;

/*

NVL(대상컬럼, 값)

대상컬럼 != NULL    -> 대상컬럼

대상컬럼 == NULL    -> 값


NVL2(대상컬럼, 값1, 값2)

대상컬럼 != NULL    -> 값1

대상컬럼 == NULL    -> 값2

*/




37)DECODE 또는 CASE WHEN THEN 함수를 사용하여 다음 데이터에 따라 JOB열의 값을 기준으로 모든 사원의 등급을 표시하시오.

/*업무        등급

PRESIDENT   A

ANALYST     B

MANAGER     C

SALESMAN    D

CLERK       E

기타         0

*/

SELECT JOB,

    CASE JOB

        WHEN 'PRESIDENT' THEN 'A'

        WHEN 'ANALYST' THEN 'B'

        WHEN 'MANAGER' THEN 'C'

        WHEN 'SALESMAN' THEN 'D'

        WHEN 'CLERK' THEN 'E'

        ELSE '기타'

        END AS "등급"

        FROM EMP;