반응형




안녕하세요~ 오늘은 DML로 돌아왔습니다~



DML이란,

(DATA MANIPULATION LANGUAGE)


데이터 조작언어는 데이터베이스 사용자 또는 응용 프로그램 소프트웨어가 컴퓨터 데이터베이스에 대해 데이터 검색, 등록, 삭제, 갱신을 위한 데이터베이스 언어 또는 데이터베이스 언어 요소입니다.


출처: WIKIPEDIA


< DML의 종류 >



SELECT: DATA 검색


INSERT: DATA 삽입


UPDATE: DATA 갱신


DELETE: DATA 삭제


MERGE


 

오늘은 이 중 MERGE에 대해 알아보겠습니다.



MERGE, 섞다출처 _ booleanstrings.com



merge문


insert, update, delete를 한번에 수행하는 명령어 입니다.


(잘 사용할 줄 안다면 굉장히 편리하고 유용한 방법입니다!)



<예제를 위한 테이블>


[ 고객 테이블 ]


고객이름

 나이

  주소 

 총구매액

 추천인

 A

 24

 서울

 30000

 null

 B

 29

 서울

 10000

 A

 C

 26

 파주

 25000

 A

 D

 27

 제주

 1000

 B



[ 등급 테이블 ]


고객등급 

 최소구매액

 최대구매액

 1

 0

 9999

 2

 10000

 19999

 3

 20000

 30000




예제1.

고객이름, 총구매액, 등급을 새로운 고객_등급 테이블로 저장하고 싶습니다.




STEP1. 우선 고객테이블에서 필요한 데이터를 선택하여 서브쿼리를 이용해 새로운 TABLE인 고객_등급 테이블을 생성합니다. (CREATE문은 DDL입니다.)


STEP2. 고객_등급 테이블에 등급 컬럼을 추가합니다. ( ALTER문은 DDL입니다)


STEP3. MERGE를 이용해 고객_등급 테이블의 등급 테이블에 DATA를 UPDATE할 수 있습니다.



< 고객_등급 테이블 결과 >


 고객이름

 총구매액

 등급

 A

 30000

 3

 B

 10000

 2

 C

 25000

 3

 D

 1000

 1





< 이때 UPDATE대신 MERGE를 쓰는 이유! >


만약 고객_등급 테이블에 고객DATA가 약 100만 건이라면?



UPDATE문의 경우 DATA를 하나씩 대조하며 등급 DATA를 업데이트합니다.


100만건의 데이터를 모두 대조해보겠죠?


0.01초에 하나씩 검사를 진행한다고 해도 과연 .. 




MERGE문의 경우 DATA를 한번에 DATA를 업데이트합니다.


따라서 훨씬 빠르게 결과를 얻을 수 있습니다.

(참고로 index를 가진 데이터는 더욱 빠르답니다~)






예제2.

고객테이블에서 총구매액에 변화가 생기면 고객_등급 테이블을 자동적으로 UPDATE가 될까요?






예제3.

(MERGE를 이용해)

고객테이블의 총구매액의 변화를 고객_등급 테이블의 총구매액에 반영하고 싶습니다.




(설명)


합치겠다.


고객_등급 테이블과 고객 테이블과


ON 조건절로


MATCH된다면


SET과 같이 UPDATE하겠다




참고) group함수를 사용하는 경우에는

using절에서 서브쿼리로 사용할 수 있다.



오늘은 여기까지!


DML은 아주 기본적이고도 중요합니다!


특히 빅데이터 분석가를 꿈꾸는 저와 많은 응용 프로그래머들에게는 더더욱! 많이 사용하는 부분이지 않을까 싶습니다!


SELECT 문을 모르신다면 여기로!

반응형

+ Recent posts