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 ;