[오라클 SQL] MERGE INTO 구문 사용 방법 및 예제



 

안녕하세요~

 

이번 포스팅에서는 오라클에서만 제공하는 문법인 MERGE INTO 구문 사용 방법에 대해서 알아보도록 하겠습니다.

 

MERGE 문이란?


-      MERGE문은 조건에 따라서 데이터의 삽입, 갱신, 삭제 작업을 한번에 할 수 있게 해주는 문 입니다.

 

-      해당 행이 존재하는 경우 UPDATE or DELETE 문을 수행하고, 새로운 행인 경우 INSERT 문을 수행합니다.

 

-      대상 테이블에 대한 UPDATE/INSERT 조건은 ON 절에 결정 됩니다.


 

MERGE Syntax


1

2

3

4

5

6

7

8

9

10

11

12

13

MERGE [ hint ]

   INTO [ schema. ] { table | view } [ t_alias ]

   USING { [ schema. ] { table | view }

         | subquery

         } [ t_alias ]

   ON ( condition )

WHEN MATCHED THEN

UPDATE SET column = { expr | DEFAULT }

           [, column = { expr | DEFAULT } ]...

[ DELETE where_clause ]

WHEN NOT MATCHED THEN

INSERT [ (column [, column ]...) ]

VALUES ({ expr [, expr ]... | DEFAULT })


  • INTO : DATA UPDATE되거나 INSERT 될 테이블 또는 뷰를 지정.
  • USING : 비교할 SOURCE 테이블 또는 뷰나 서브쿼리를 지정, INTO절의 테이블과 동일하거나 다를 수 있다.
  • ON : UPDATE INSERT를 하게 될 조건으로, 해당 조건을 만족하는 DATA가 있으면 WHEN MATCHED 절을 실행하게 되고, 없으면 WHEN NOT MATCHED 이하를 실행하게 된다.
  • WHEN MATCHED : ON 조건절이 TRUE ROW에 수행 할 내용 (UPDATE, DELETE포함 될 수 있음)
  • WHEN NOT MATCHED : ON 조건절에 맞는 ROW가 없을 때 수행할 내용 (INSERT)

 

※참고 사이트 - http://www.gurubee.net/lecture/2225



 

그럼 위와 같은 내용을 가지고서 실제 MERGE 문 사용을 해보도록 하겠습니다.

 

아래와 같이 STUDENT 테이블이 있습니다.



 

위 테이블에서, SCOREA인 학생을 찾아서 해당 학생이 존재하면 GRADE(학년) 2학년으로 수정하고,


만약 존재하지 않는다면 이름은 장영실이면서 나이는 31, 학년은 4학년, 성적은 A+인 학생을 추가하는 MEGRE 구문을 작성해 보도록 하겠습니다.

 

SQL 구문


1

2

3

4

5

6

7

8

9

MERGE INTO WIN.STUDENT stu

    USING DUAL 

        ON(stu.SCORE = 'A')

WHEN MATCHED THEN

    UPDATE SET 

        stu.GRADE = '2'

WHEN NOT MATCHED THEN

    INSERT (stu.NAME, stu.AGE, stu.GRADE, stu.SCORE)

    VALUES ('장영실'314'A+')

cs

 

실행 결과



 

위와 같이, 성적이 A학점인 홍길동 학생이 존재 하므로 1학년에서 2학년으로 정보가 UPDATE 된 것을 볼 수 있습니다.

 

만약 위 조건에서 점수가 A학생이 없었다면, 장영실 이라는 학생이 STUDENT 테이블에 새롭게 추가가 되었을 것 입니다!

 


이로써, 간단히 MERGE 문 사용 방법에 대해 알아보았습니다!

 

읽어 주셔서 감사합니다~~



728x90

이 글을 공유하기

댓글

Designed by JB FACTORY