¢Ñ MERGE

 - Çѹø¿¡ Á¶°Ç¿¡ µû¶ó INSERT,UPDATE °¡ °¡´ÉÇÕ´Ï´Ù.
 - ÇØ´ç ROW°¡ ÀÖÀ¸¸é UPDATE, ¾øÀ¸¸é INSERT ¹®ÀåÀÌ ½ÇÇà µË´Ï´Ù.
 
 
 ¢Â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(...)
 

 ¢Â syntax ¼³¸í
 - INTO : DATA°¡ UPDATEµÇ°Å³ª INSERTµÉ TABLEÀ̸§À» ÁöÁ¤ ÇÕ´Ï´Ù.

 - USING : ´ë»ó TABLEÀÇ DATA¿Í ºñ±³ÇÑ ÈÄ UPDATE ¶Ç´Â INSERTÇÒ ´ë»óÀÌ µÇ´Â DATAÀÇ SOURCE Å×ÀÌºí ¶Ç´Â ºä¸¦ ÁöÁ¤
 - ON  : UPDATE³ª INSERT¸¦ ÇÏ°Ô µÉ Á¶°ÇÀ¸·Î, ÇØ´ç conditionÀ» ¸¸Á·ÇÏ´Â DATA°¡ ÀÖÀ¸¸é WHEN MATCHED ÀýÀ» ½ÇÇàÇÏ°Ô µÇ°í, ¾øÀ¸¸é WHEN NOT MATCHED ÀÌÇϸ¦ ½ÇÇàÇÏ°Ô µË´Ï´Ù.

 - WHEN MATCHED : ON Á¶°ÇÀýÀÌ TRUEÀÎ ROW¿¡ ¼öÇà ÇÒ ³»¿ë

 - WHEN NOT MATCHED
: ON Á¶°ÇÀý¿¡ ¸Â´Â ROW°¡ ¾øÀ» ¶§ ¼öÇàÇÒ ³»¿ë
 
 
-- scottÀ¯Àú·Î Á¢¼Ó
C:\>SQLPLUS scott/tiger
 
-- Å×½ºÆ®¸¦ À§ÇÑ Å×ÀÌºí »ý¼º
SQL>CREATE TABLE emp_test
    AS SELECT * FROM emp WHERE deptno = 10;
 
-- ºÎ¼­¹øÈ£°¡ 10ÀÎ »ç¿ø¸¸ µ¥ÀÌÅͰ¡ »ý¼ºµÇ¾ú½À´Ï´Ù.
SQL>SELECT empno, ename, sal FROM emp_test
EMPNO 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_test
EMPNO ENAME        SAL
----- ---------- -----
 7782 CLARK       2695
 7839 KING        5500
 7934 MILLER      1430
 7844 TURNER      1500
 7521 WARD        1250
 7654 MARTIN      1250
 7788 SCOTT       3000
 7698 BLAKE       2850
 7566 JONES       2975
 7499 ALLEN       1600
 7902 FORD        3000
 ...
14 °³ÀÇ ÇàÀÌ ¼±ÅõǾú½À´Ï´Ù.


¢Ñ CASE ¹®Àå
 
  - Case¹®Àº 8.1.7¿¡¼­ºÎÅÍ Áö¿øµÇ¾úÀ¸¸ç, 9i¿¡¼­´Â SQL¿¡¼­»Ó¸¸ ¾Æ´Ï¶ó  PL/SQL¿¡¼­µµ Áö¿ø µË´Ï´Ù
 
 1) 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
    
    
 2) 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À» ¹Ýȯ ÇÕ´Ï´Ù.
  - exp1´Â NULLÀÌ ¿Ã ¼ö ¾ø½À´Ï´Ù.
  - CASE WHEN expr1 = expr2
         THEN NULL
         ELSE expr1
    END
 

¢Ñ COALESCE
 
  - COALESCE(expr1,expr2,expr3,¡¦)
  - expr1ÀÌ NULLÀÌ ¾Æ´Ï¸é expr1°ªÀ» ±×·¸Áö ¾ÊÀ¸¸é COALESCE(expr2,expr3,¡¦)°ªÀ» ¹Ýȯ ÇÕ´Ï´Ù.
  - NVL function°ú ºñ½Á ÇÕ´Ï´Ù.
  - CASE WHEN expr1 IS NOT NULL
          THEN expr1
          ELSE COALESCE(expr2,expr3,¡¦)
     END
 
-- ¾Æ·¡ ¹®ÀåÀ» ½ÇÇà½ÃÄÑ º¸¼¼¿ä.
SQL>SELECT COALESCE(comm,1) FROM emp