Admin

SQL 10g 교육내용

Qhtlr 2008. 8. 4. 14:21

NVL(expr1,expr2)
  변환되는 값=expr1의 데이터 타입
NVL2 9i에서 추가
 NVL2(exp1,expr2,expr3)
  첫번째 표현식이 null인 경우, 세번째 표현식을 반환 함.
                  null이 아닌경우, 두번째 표현식을 반환
NULLIF 9i에서 추가
 NULLIF(expr1,expr2) : 두 표현식을 비교하고 동일한 경우 null을 반환하고
   동일하지 않은 경우 첫번째 표현식을 반환
  첫번째 표현식에 null 리터럴을 지정할 수 없음

COALESCE 9i에서 추가
  목록에서 널이 아닌 첫번째 표현식을 반환 함.
  COALESCE(comission_pct,salary,10)

DECODE(expr,search1,result1[,search2,result2,...][,default])

CASE 9i에서 추가됨...의미는 DECODE와 동일, ANSI SQL을 준수함
CASE expr WHEN comparison_expr1 THEN return_expr1
         [WHEN comparison_expr2 THEN return_expr2
          WHEN comparison_exprn THEN return_exprn
                     ELSE else_expr]
                       END
CASE job_id WHEN 'IT_PROG'   THEN 1.10*salary,
            WHEN 'ST_CLEARK' THEN 1.15*salary,
            WHEN 'SA_REP'    THEN 1.20*salary,
ELSE salary END "REVISED_SALARY"


with절  9i부터
WITH
  query_name1 AS (subquery),
  query_name2 AS (subquery)
SELECT select_list
FROM table,query_name1,query_name2
WHERE
ORDER BY;

SQL>
WITH
dept_costs  AS(
   SELECT   d.department_name, SUM(e.salary) AS dept_total
   FROM     employees e, departments d
   WHERE    e.department_id = d.department_id
   GROUP BY d.department_name),
avg_cost    AS(
   SELECT   SUM(dept_total)/count(*) AS dept_avg
   FROM     dept_costs)
SELECT *
FROM        dept_costs
WHERE       dept_total > (SELECT dept_avg FROM avg_cost)
ORDER BY    department_name ;


- WITH CHECK OPTION : 9i , 서브쿼리에 포함되지 않은 행이 생성되는것을 방지
insert into (subquery WITH CHECK OPTION)
values (value1...);

SQL> INSERT INTO  (select id,name,email,hire_date,job_id,dept_id
                   from emp
                   where dept_id=10 WITH CHECK OPTION)
     VALUES (999,'둘리','abc@naver.com',sysdate,'st_cleark',20) ;

- MERGE : 9i, 해당 행이 존재할 경우 update를 수행하고, 새로운 행일경우 insert

MERGE INTO  table_name
      USING (table,...)
      ON    (join 조건)
      WHEN MATCHED THEN
               UPDATE SET col1 = col_val1,
                          col2 = col_cal2
               DELETE WHERE  <-- 10g부터
      WHEN NOT MATCHED THEN
               INSERT (column,..)
               VALIES (value,...) ;


- DATE types (9i추가 된것)

TIMESTAMP : 소수점 이하 초까지 있는 날짜, 9자리까지 표현
TIMESTAMP(7) : 정밀도 '7'초의 소수점 이하 자릿수,,기본값 '6'
SQL> select * from new_emp3;
START_DATE             END_DATE
-----------------   --------------------------
25-DEC-07           07/12/25 19:35:14.7520000

INTERVAL YEAR TO MONTH : 연수와 개월 수로 저장
INTERVAL DAY TO SECOND : 날짜수,시간 수,분수,초수로 저장

ex)
INTERVAL '123-2' YEAR(3) TO MONTH : 123년 2개월의 기간 나타냄
INTERVAL '12' MONTH(2) : 12개월의 기간을 나타냄

SQL>select sysdate,sysdate+interval '12' month(2) from dual;
SYSDATE   SYSDATE+I
--------- ---------
31-JUL-08 31-JUL-09

- FLASHBACK TABLE new_emp3 TO BEFORE DROP ;