|
| ¢Ñ 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
|
|
| |