728x90
반응형
MELON_CHART
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | CREATE TABLE MELON_CHART ( RANKING NUMBER , SINGER VARCHAR2(30) NOT NULL , SONG VARCHAR2(200) NOT NULL , REMARK VARCHAR2(100) DEFAULT NULL ); INSERT INTO MELON_CHART VALUES (1, '아이유', '에잇', ''); INSERT INTO MELON_CHART VALUES (2, '아이즈원', '환상동화', ''); INSERT INTO MELON_CHART VALUES (3, '블루', 'Downtown Baby', ''); INSERT INTO MELON_CHART VALUES (4, '오마이걸', '살짝 설렜어', ''); INSERT INTO MELON_CHART VALUES (5, '트와이스', 'More and More', ''); INSERT INTO MELON_CHART VALUES (6, '조정석', '아로하', ''); INSERT INTO MELON_CHART VALUES (7, '아이유', 'Into the I-LAND', ''); INSERT INTO MELON_CHART VALUES (8, '전미도', '사랑하게 될 줄 알았어', ''); INSERT INTO MELON_CHART VALUES (9, '조이', '좋은 사람 있으면 소개시켜줘', ''); INSERT INTO MELON_CHART VALUES (10, '식케이', '깡', ''); SELECT * FROM MELON_CHART; | cs |
MELON_CHART_NEW
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | CREATE TABLE MELON_CHART_NEW ( RANKING NUMBER , SINGER VARCHAR2(30) NOT NULL , SONG VARCHAR2(200) NOT NULL , REMARK VARCHAR2(100) DEFAULT NULL ); INSERT INTO MELON_CHART_NEW VALUES (1, '세븐틴', 'Left and Right', ''); INSERT INTO MELON_CHART_NEW VALUES (2, '아이즈원', '환상동화', ''); INSERT INTO MELON_CHART_NEW VALUES (3, '블랙핑크', 'How You Like That', ''); INSERT INTO MELON_CHART_NEW VALUES (4, '화사', '마리아', ''); INSERT INTO MELON_CHART_NEW VALUES (5, '조이', '좋은 사람 있으면 소개시켜줘', ''); INSERT INTO MELON_CHART_NEW VALUES (6, '아이유', 'Into the I-LAND', ''); INSERT INTO MELON_CHART_NEW VALUES (7, '트와이스', 'More and More', ''); INSERT INTO MELON_CHART_NEW VALUES (8, '오마이걸', '살짝 설렜어', ''); INSERT INTO MELON_CHART_NEW VALUES (9, '지코', 'Summer Hate', ''); INSERT INTO MELON_CHART_NEW VALUES (10, '선미', '보랏빛 밤', ''); SELECT * FROM MELON_CHART_NEW; | cs |
MERGE INTO
1 2 3 4 5 6 7 | MERGE INTO MELON_CHART M1 USING MELON_CHART_NEW M2 ON (M1.SINGER = M2.SINGER AND M1.SONG = M2.SONG) WHEN MATCHED THEN UPDATE SET M1.RANKING = M2.RANKING, M1.REMARK = 'CONTINUE' WHEN NOT MATCHED THEN INSERT VALUES (M2.RANKING, M2.SINGER, M2.SONG, 'NEW'); | cs |
SELECT * FROM MELON_CHART;
위와 같이 MELON_CHART에 있는 값을 다시한번 조회하면 5개의 새로운 데이터가 추가된 것을 확인할 수 있다.
ON 조건절에 MELON_CHART의 SINGER가 MELON_CHART_NEW의 SINGER와 같고, 노래가 같은 것을 조건으로 둔다.
WHEN 일치하면,
MELON_CHART_NEW의 랭킹을 MELON_CHART로 바꿔주고, REMARK 값을 CONTINUE로 업데이트 시킨다.
WHEN NOT 일치하지 않다면,
MELON_CHART_NEW의 RANKING, SINGER, SONG REMARK 데이터 모두 MELON_CHART 값에 추가해준다.
DUAL (하나의 테이블)
다른 테이블과의 비교 뿐만 아니라, 하나의 테이블 내에서 직접 값을 넣는 형식으로 DUAL을 사용할 수도 있다.
1 2 3 4 5 6 7 8 | MERGE INTO MELON_CHART M2 USING DUAL ON (SINGER='환풍' AND SONG ='백만장자 사나이') WHEN MATCHED THEN UPDATE SET REMARK = 'GOOD' WHEN NOT MATCHED THEN INSERT (RANKING, SINGER, SONG, REMARK) VALUES (11,'환풍','억만장자 사나이', 'RE'); | cs |
SELECT * FROM MELON_CHART;
USING에 DUAL을 넣고, 조건을 준 결과 WHEN NOT MATCHED THEN 절로 출력한 결과가 아래에 있다.
업데이트
1 2 3 4 5 6 7 8 | MERGE INTO MELON_CHART M2 USING DUAL ON (SINGER='환풍' AND SONG ='억만장자 사나이') WHEN MATCHED THEN UPDATE SET RANKING =1 WHEN NOT MATCHED THEN INSERT (RANKING, SINGER, SONG, REMARK) VALUES (12,'환풍','억만장자 사나이', 'RE'); | cs |
SELECT * FROM MELON_CHART;
삭제
1 2 3 4 5 6 7 8 9 10 11 | MERGE INTO MELON_CHART M2 USING DUAL ON (SINGER='환풍' AND SONG ='억만장자 사나이') WHEN MATCHED THEN UPDATE SET SINGER='환풍' WHERE RANKING =1 DELETE WHERE RANKING =1 WHEN NOT MATCHED THEN INSERT (RANKING, SINGER, SONG, REMARK) VALUES (12,'환풍','억만장자 사나이', 'RE'); | cs |
위와 같이 ON 조건절에서 사용했던 컬럼을 업데이트하면 오류가 발생된다.
1 2 3 4 5 6 7 8 9 10 11 | MERGE INTO MELON_CHART M2 USING DUAL ON (SINGER='환풍' AND SONG ='억만장자 사나이') WHEN MATCHED THEN UPDATE SET REMARK='RE' WHERE RANKING =1 DELETE WHERE RANKING =1 WHEN NOT MATCHED THEN INSERT (RANKING, SINGER, SONG, REMARK) VALUES (12,'환풍','억만장자 사나이', 'RE'); | cs |
SONG에 있는 '환풍' 데이터가 모두 사라진 것을 확인할 수 있다.
728x90
반응형
댓글