SQL의 모든 것/SQL의 실무

오라클 DML(INSERT, DELETE, UPDATE)

IT너드남 2024. 6. 6. 23:31
ORACLE 12g 기준 및 실무 영역으로 작성한 글임을 알려드립니다.

DML : Data Manipulation Language(데이터 조작 언어)

 

1. INSERT

INSERT INTO 스키마명.테이블명 (컬럼1, 컬럼2, 컬럼3..)
SELECT 컬럼1, 컬럼2, 컬럼3..
FROM 스키마명.테이블;

 

데이터를 적재할 테이블의 컬럼명을 나열하고 적재할 쿼리의 컬럼 개수를 INSERT할 컬럼 개수와 정확하게 일치시켜야 한다.

 

INSERT INTO 스키마명.테이블명
SELECT 컬럼1, 컬럼2, 컬럼3..
FROM 스키마명.테이블명;

 

만약 INSERT할 테이블의 컬럼개수와 순서가 정확하게 일치한다면 INSERT 절에서 컬럼을 생략할 수 있다.

 

INSERT INTO MASTER.EMP (COL1, COL2, COL3, COL4, COL5)
(
SELECT COL1, COL2, COL3, COL4, COL5
FROM ODS.EMP A
WHERE A.EMPNO = '30'
AND A.RANK = 'LEADER'
);

 

그럼 실무에서는 INSERT절을 언제 사용하는가?

바로 프로시저를 생성하기 전 또는 해당 쿼리의 검증을 위해서 일부 데이터를 적재한 다음 의사결정에 사용하기 위함이다.

위 코드처럼 샘플 형식으로 일부 데이터를 적재한 후 BI툴을 사용하여 논리검증을 진행할 수도 있고, 

테이블과 AS-IS시스템을 비교하여 검증을 진행해 볼 수도 있다.

 

2. DELETE

DELETE FROM 스키마명.테이블명 WHERE 컬럼 = 삭제할 조건

/*예시*/
/*MASTER 스키마에 있는 EMP 테이블의 EMPNO = '50'인 로우 삭제*/
DELETE FROM MASTER.EMP WHERE EMPNO = '50';

 

보통 DELETE를 쓰는 경우는 특정 조건의 데이터를 삭제하기 위해서 사용된다. 전체 데이터를 삭제할 예정이라면 DELETE가 아니라 TRUNCATE를 쓰면 된다.

 

3. UPDATE

UPDATE 스키마명.테이블명 SET 업데이트컬럼 = 변경값;

 

INSERT는 검증을 위한 방법으로 사용된다고 했는데 UPDATE는 생각보다 프로세스 면에서 사용될 확률이 높다.

가령, 예시를 들자면 하나의 프로시저를 생성하였고 해당 프로시저에서 SELECT 절로 완성시킬 수 없는 부분이나 성능적인 측면으로 인하여 마지막에 UPDATE를 추가함으로서 MART 테이블을 완성시킬 수 있다.

 

CREATE PROCEDURE AS PROCEDURE_NAME (VAL1, VAL2)
----
BEGIN

LOOP
DELETE FROM MASTER.EMP WHERE EXCE_DT = SYSDATE - 1;

COMMIT;

INSERT INTO MASTER.EMP (COL1, COL2)
SELECT A.COL1, A.COL2
FROM ODS.EMP A
WHERE A.IN_DT = TO_CHAR(SYSDATE, 'YYYYMMDD');

--쿼리 복잡도에 의해 혹은 성능 개선 사유로 인하여 UPDATE 로직 추가
--SELECT절로 변경값을 가지고 오는데, 변경할 테이블의 오늘자만 변경하는 WHERE절 추가
UPDATE EMP B SET B.EMPNO = (SELECT EMPNO FROM ODS.EMP WHERE LAN = 'ENG')
WHERE B.EXEC_DT = TO_CHAR(SYSDATE, 'YYYYMMDD');

END LOOP
COMMIT

END

 

위 코드 블럭에서 INSERT 후 마지막 단에서 UPDATE를 친다. 

쉽게 말해 INSERT 하는 로직에서 처리할 수 없거나

로직 성능상 복잡도가 가장 큰 컬럼의 값은 UPDATE로 처리하여야 성능이 개선되는 상황들에서 사용되는 경우가 많다.

'SQL의 모든 것 > SQL의 실무' 카테고리의 다른 글

오라클 RANK OVER()  (0) 2024.06.11
오라클 컬럼 순서 바꾸기  (3) 2024.06.08
오라클 CREATE TABLE [PARTITION BY]  (5) 2024.06.06
오라클 CREATE TABLE [AS SELECT]  (5) 2024.06.05
오라클 CASE WHEN 사용법  (3) 2024.06.01