안녕하세요~ 코딩 연습생입니다
코로나 사태 여러분 괜찮으신가요??
언제쯤 잠잠해질지 참...얼른 백신이나 대책이 나왔으면 좋겠는데 마스크 때문에 숨도 잘 안쉬어지네요~
그래도 할건 해야겠죠?ㅎㅎ
그래서 저는 매일 출근합니다;;;ㅋ
오늘 포스팅 주제는 MSSQL 쿼리인데요
MSSQL을 접해보신 분들한데는 참 쉬운 정보일수 있지만 혹시 모르시는 분들을 위해서 포스팅 합니다
프로그램을 작성하다가 DB와 Data를 주고 받을때 이미 있는 데이터를 처리하기 위해서 SELECT를 한번 더 해야 하고
중복인지 아닌지를 체크해서 중복이면 UPDATE를 신규이면 INSERT 뭐 이런식으로 프로그램을 많이 했습니다
그런데 이 MERGE라는 함수를 알게 되고 부턴 한번의 쿼리로 INSERT / UPDATE가 조건에 의해 한번에 처리가 되니
참 편하더라구요
그래서 이 MERGE함수 사용하는 방법을 포스팅 하겠습니다
일단 쿼리 작성을 위해서 MSSQL을 접속합니다
접속을 하신뒤 새쿼리를 눌러 쿼리를 작성합니다
저의 경우 USER_MAST라는 테이블을 생성하였습니다
*USER_MAST 테이블
- 컬럼정보 : USER_ID, USER_NAME, USER_PSWD
이렇게 3개의 컬럼이 존재합니다
그럼 조회를 한번 해보겠습니다
보시는거와 같이 USER_MAST라는 테이블에는 TEST라는 정보가 이미 존재하고 있습니다
그럼 MERGE 쿼리를 작성해 볼께요
*Query
MERGE USER_MAST
USING (SELECT 'x' AS DUAL) AS B
ON [USER_ID] = 'TEST'
WHEN MATCHED THEN
UPDATE SET [USER_NAME] = 'TEST111111'
WHEN NOT MATCHED THEN
INSERT([USER_ID], [USER_NAME], USER_PSWD) VALUES('TEST', 'TEST', '');
쿼리의 내용을 말로 설명하자면 이렇게 됩니다
USER_MAST라는 테이블에 [USER_ID]가 'TEST'인 테이터가 존재하면
UPDATE문으로 [USER_NAME] 컬럼에 'TEST111111'을 UPDATE하고
존재하지 않으면 INSERT문으로 [USER_ID]가 'TEST'이고 [USER_NAME]가 'TEST'인 DATA를 생성해라
이렇게 됩니다 어렵지 않죠?
그럼 MERGE 쿼리를 실행해 보겠습니다
※ 아래 이미지는 USER_PSWD가 빠져있는데 쿼리 자체게 문제는 없습니다 참고하세요
실행했으면 USER_MAST 테이블을 다시 조해해보겠습니다
위에서 보았듯이 이미 USER_MAST 테이블에는 TEST라는 데이터가 존재했습니다
그래서 USER_NAME 컬럼에 TEST111111을 UPDATE한 결과를 확인 할 수 있습니다
그럼 다음 조건을 테스트하기 위해서 USER_MAST 테이블의 값을 지워 볼께요
DELETE문을 실행했습니다
이제 USER_MAST 테이블에는 'TEST'라는 데이터는 존재하지 않습니다
다시 MERGE문을 실행해 보겠습니다
그럼 저희는 예측할수가 있죠
USER_MAST 테이블에 USER_ID컬럼이 'TEST'이고 USER_NAME컬럼이 'TEST'인 데이터가 생성되어야 합니다
조회 해보겠습니다
예상했던 결과값이 보여지네요
이렇게 INSERT와 UPDATE를 하나의 쿼리에서 동작할 수 있는 방법을 알아봤습니다
'코딩정보 > MS-SQL' 카테고리의 다른 글
[Query]MSSQL 2005 이하 버전에서 Merge 기능 만들기. (0) | 2020.11.06 |
---|---|
[MSSQL] 날짜 계산하기(datediff, dateadd) (0) | 2020.09.10 |
[MSSQL] 테이블 인덱스 지정하기 (0) | 2019.12.19 |
[MSSQL] ROW_NUMBER함수를 사용한 GROUP BY (0) | 2019.12.13 |
[MS-SQL] VARCHAR과 NVARCHAR의 차이?? (0) | 2019.12.05 |