그동안 MySQL만 써오다가 Oracle을 쓰게 되어,
쿼리문을 작성하는 법에 대한 차이 중 UPSERT 쿼리문을 만드는 방법에 대해 기록하고자 한다.
🍁MYSQL : ON DUPLICATE KEY UPDATE
MySQL (+ MariaDB)에서는 INSERT문 뒤에
ON DUPLICATE KEY UPDATE
를 붙여줌으로서 중복 대상에 대한 업데이트를 진행한다.
INSERT INTO `STUDENT`(`code`, `name`, `age`)
VALUES(1891245, '홍길동', 20)
ON DUPLICATE KEY UPDATE `name` = '홍길동', `age` = 20
--삽입 값에 별칭을 사용하여 불필요한 중복 입력을 줄일 수도 있다.
INSERT INTO `STUDENT`(`code`, `name`, `age`)
VALUES(1891245, '홍길동', 20) AS `STU_INFO`
ON DUPLICATE KEY UPDATE `name` = `STU_INFO`.`name`, `age` = `STU_INFO`.`age`
🍁Oracle : MARGE INTO
Oracle에서는 MERGE INTO
를 통해 다른 테이블과 비교하여
값의 존재 유무에 따라 각기 다른 명령을 실행할 수 있다.
MERGE INTO `STUDENT`
USING `DUAL` --특정 값의 존재 유무 판단을 위해 자체 제공 테이블인 DUAL을 사용한다
ON `code` = 1891245
WHEN MATCHED THEN --code 값을 가진 튜플이 존재할 경우
UPDATE SET `name` = '홍길동', `age` = 20
WHEN NOT MATCHED THEN --code 값을 가진 튜플이 존재하지 않을 경우
INSERT INTO `STUDENT`(`code`, `name`, `age`)
VALUES(1891245, '홍길동', 20)
'데이터베이스 > SQL' 카테고리의 다른 글
[Oracle] DCL, TCL (0) | 2024.07.10 |
---|---|
[Oracle] DDL, DML (0) | 2024.07.10 |
[Oracle] Oracle Database 시작하기 (DBeaver, 계정 생성) (0) | 2024.07.09 |
Procedure; 프로시저 (0) | 2024.06.27 |
[Oracle] ORA-28000 Oracle 계정이 잠겼을 때 해제하는 법 (2) | 2024.06.03 |