작은입맞춤

besito.egloos.com

포토로그



merge, case, nullif, coalesce 프로그램

MERGE, CASE, NULLIF, COALESCE

MERGE

한 번에 조건에 따라 INSERT, UPDATE가 가능 하다. 해당 ROW가 있으면 UPDATE, 없으면 INSERT 문장이 실행 된다.

MERGE Syntax
 MERGE INTO target_table_name      USING (table|view|subquery) ON (join condition)WHEN MATCHED THEN     UPDATE SET col1 = val1[, col2 = val2…]WHEN NOT MATCHED THEN     INSERT(...) VALUES(...)    
  • - INTO : DATA가 UPDATE되거나 INSERT 될 TABLE 이름을 지정.
  • - USING : 대상 TABLE의 DATA와 비교한 후 UPDATE 또는 INSERT 할 대상이 되는 DATA의 SOURCE 테이블 또는 뷰를 지정
  • - ON : UPDATE나 INSERT를 하게 될 조건으로, 해당 조건을 만족하는 DATA가 있으면 WHEN MATCHED 절을 실행하게 되고, 없으면 WHEN NOT MATCHED 이하를 실행하게 된다.
  • - WHEN MATCHED : ON 조건절이 TRUE인 ROW에 수행 할 내용
  • - WHEN NOT MATCHED : ON 조건절에 맞는 ROW가 없을 때 수행할 내용

MERGE 예제
 -- scott유저로 접속C:\> SQLPLUS scott/tiger -- 테스트를 위한 테이블 생성-- 부서번호가 10인 사원의 데이터 생성.SQL> CREATE TABLE emp_test     AS SELECT * FROM emp WHERE deptno = 10; SQL> SELECT empno, ename, sal FROM emp_testEMPNO ENAME        SAL----- ---------- ----- 7782 CLARK       2450 7839 KING        5000 7934 MILLER      1300  -- emp_test테이블에 데이터가 있으면 급여를 10%인상하고 -- 없으면 새로 INSERT하는 예제.SQL> MERGE INTO emp_test et     USING emp e     ON(et.empno = e.empno)     WHEN MATCHED THEN       UPDATE SET et.sal = e.sal*1.1     WHEN NOT MATCHED THEN       INSERT VALUES (e.empno,e.ename,e.job,e.mgr,                      e.hiredate,e.sal,e.comm,e.deptno)14 행이 병합되었습니다.  -- 실행결과 조회.SQL> SELECT empno, ename, sal FROM emp_testEMPNO ENAME        SAL----- ---------- ----- 7782 CLARK       2695 7839 KING        5500 7934 MILLER      1430 7844 TURNER      1500 ...14 개의 행이 선택되었습니다.    

CASE 문장

Simple CASE expression

DECODE 함수와 비슷하다

 SQL> SELECT deptno,         CASE deptno          WHEN 10 THEN 'ACCOUNTING'            WHEN 20 THEN 'RESEARCH'            WHEN 30 THEN 'SALES'            ELSE 'OPERATIONS'          END as "Dept Name"     FROM emp;    

Searched CASE expression

IF.. THEN .. ELSE 구문과 비슷 하다. WHEN절 다음에 여러 조건이 올 수 있다.

 SQL> INSERT INTO raise     SELECT last_name ,            CASE              WHEN job_id LIKE 'AD%' THEN '10%'              WHEN job_id LIKE 'IT%' THEN '15%'              WHEN job_id LIKE 'PU%' THEN '18%'              ELSE '20%'            END     FROM employees;    

NULLIF

  • - NULLIF(exp1, exp2)
  • - exp1값과 exp2값이 동일하면 NULL을 그렇지 않으면 exp1을 반환
  • - CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

COALESCE

  • - COALESCE(expr1,expr2,expr3,…)
  • - expr1이 NULL이 아니면 expr1값을 그렇지 않으면 COALESCE(expr2,expr3,…)값을 반환.
  • - NVL 함수와 비슷하다.
 -- 아래 문장을 실행해 보자.SQL> SELECT COALESCE(comm,1) FROM emp;    

문서에 대하여


덧글

댓글 입력 영역