piri 2010. 5. 20. 15:38

2010/05/19

--각 사원의 근무 기간을 출력해보자.
--출력결과> 사원번호, 입사일자, 근속기간

SELECT employee_id
      , hire_date                                        
      , FLOOR(MONTHS_BETWEEN(SYSDATE, hire_date)/12) AS 년
      , FLOOR(MOD(months_between(SYSDATE, hire_date), 12)) AS 월
FROM employees


--각 사원의 입사 분기를 알아보자

SELECT TO_CHAR(hire_date, 'Q')
      , COUNT(*)
FROM employees
GROUP BY TO_CHAR(hire_date, 'Q')


-- 오늘과 2007년 1월 1일간의 개월 수는?

SELECT months_between(SYSDATE, to_date('2007-01-01', 'YYYY-MM-DD'))
FROM dual;


-- 오늘 날짜에 1년을 더해보자.

SELECT ADD_MONTHS(SYSDATE, 12) FROM DUAL;
SELECT SYSDATE +TO_YMINTERVAL('01-00') FROM dual;


-- NULL 과의 연산
-- NULL 과 연산 X -->  NVL 함수사용하여 대체

SELECT NULL + 1
FROM dual;


-- 직원들의 예상 월급을 구해보자
-- 출력결과> 사원번호, 이름, 월급, 커미션퍼센트, 예상월급(월급+월급X커미션퍼센트)

SELECT employee_id
      , last_name
      , salary
      , commission_pct
      , salary + salary * NVL(commission_pct, 0) AS 예상월급
FROM employees


--DECODE 보다는 CASE 사용
--CASE 두가지로 표현
-- 모든 사원에 대항 부서번호가 60이면 'IT', 80이면 'Sales', 나머지는 'Other'로
-- 나타내 보세요
-- 출력결과> 사원번호, 이름, 부서번호, 부서이름
SELECT employee_id
      , last_name
      , department_id
      , DECODE(department_id, 60, 'IT' , 80, 'Sales' , 'Other')
FROM employees


SELECT employee_id
      , last_name
      , department_id
      , CASE department_id
              WHEN 60 THEN 'IT'
              WHEN 80 THEN 'Sales'
              ELSE 'Other'
        END
FROM employees


--CASE 만 가능한 비교
--사원들의 월급에 등급을 매겨보자
--평균월급(6462) 보다 적으면 L, 많으면 H
--출력결과> 사원번호, 월급, 등급
SELECT employee_id
      , salary
      , CASE WHEN salary < 6462 THEN 'L'
             WHEN salary > 6462 THEN 'H'
             ELSE 'etc'
        END AS rnk
FROM employees


-- 등급: 월급이 20000 이상이면 A, 15000이상 20000미만 이면 B,
--      10000이상 15000미만이면 C, 5000이상 10000미만이면 D
--      이외는 E
SELECT employee_id
      , salary
      , CASE WHEN salary >= 20000 THEN 'A'
             WHEN salary >= 15000 THEN 'B'
             WHEN salary >= 10000 THEN 'C'
             WHEN salary >= 5000 THEN 'D'
             ELSE 'E'
        END AS 월급등급
FROM employees