DML 완벽 정리

SQLD 시험 출제 범위의 INSERT·UPDATE·DELETE·MERGE를 구문 예시와 함께 정리

1. DML 개요

DML이란?

DML(Data Manipulation Language)은 테이블의 데이터를 조회·삽입·수정·삭제하는 SQL 명령어입니다. DDL과 달리 COMMIT 전까지 ROLLBACK이 가능합니다.

DML 명령어 종류

명령어설명
SELECT데이터 조회
INSERT데이터 삽입
UPDATE데이터 수정
DELETE데이터 삭제
MERGE조건부 삽입/수정/삭제 (UPSERT)

2. INSERT

단일행 INSERT

-- 컬럼 지정
INSERT INTO EMP (EMP_ID, EMP_NAME, DEPT_ID)
VALUES (1, '김철수', 10);

-- 컬럼 생략 (모든 컬럼에 값 필수)
INSERT INTO EMP
VALUES (1, '김철수', 10, 3000, 'A');

컬럼 리스트를 생략하면 테이블의 모든 컬럼에 대해 순서대로 값을 입력해야 합니다.

서브쿼리 INSERT

SELECT 결과를 한 번에 INSERT합니다. VALUES 키워드를 사용하지 않습니다.

INSERT INTO EMP_BACKUP (EMP_ID, EMP_NAME)
SELECT EMP_ID, EMP_NAME FROM EMP
WHERE DEPT_ID = 10;

컬럼 수와 데이터 타입이 일치해야 합니다.

INSERT ALL (Oracle)

하나의 SELECT 결과를 여러 테이블에 동시에 삽입합니다.

-- 무조건 분배
INSERT ALL
  INTO TABLE_A (COL1) VALUES (V1)
  INTO TABLE_B (COL1) VALUES (V2)
SELECT V1, V2 FROM SOURCE;

-- 조건부 분배
INSERT ALL
  WHEN SAL > 5000 THEN INTO HIGH_SAL VALUES (ID, SAL)
  WHEN SAL <= 5000 THEN INTO LOW_SAL VALUES (ID, SAL)
SELECT ID, SAL FROM EMP;

INSERT FIRST를 사용하면 첫 번째 조건에 해당하는 테이블에만 삽입됩니다 (ALL은 모든 조건 체크).

3. UPDATE

기본 구문

UPDATE 테이블명
SET 컬럼1 = 값1, 컬럼2 = 값2
WHERE 조건;

WHERE 절을 생략하면 모든 행이 수정됩니다 — 시험에서 자주 출제되는 함정!

서브쿼리를 이용한 UPDATE

-- SET절 서브쿼리
UPDATE EMP
SET SALARY = (SELECT AVG(SALARY) FROM EMP)
WHERE DEPT_ID = 10;

-- WHERE절 서브쿼리
UPDATE EMP
SET SALARY = SALARY * 1.1
WHERE DEPT_ID IN (SELECT DEPT_ID FROM DEPT WHERE LOC = '서울');

UPDATE 주의사항

  • 1. WHERE 절 생략 시 — 전체 행 수정 (매우 위험)
  • 2. FK 참조 중인 PK 값 변경 — 참조 무결성 위반 에러 발생
  • 3. NOT NULL 컬럼에 NULL 설정 — 제약조건 위반 에러 발생
  • 4. CHECK 제약조건 위반 값 — 범위 밖 값 입력 시 에러 발생

4. DELETE

기본 구문

DELETE [FROM] 테이블명
WHERE 조건;

Oracle에서는 FROM 생략 가능, SQL Server에서는 FROM 필수입니다.

DELETE vs TRUNCATE vs DROP

항목DELETETRUNCATEDROP
분류DMLDDLDDL
ROLLBACK가능불가불가
테이블 구조유지유지삭제
저장 공간유지해제해제

5. MERGE

MERGE란?

대상 테이블과 소스 테이블을 비교하여 조건에 따라 INSERT, UPDATE, DELETE를 한 번에 수행하는 명령어입니다. UPSERT(존재하면 수정, 없으면 삽입)를 구현할 때 사용합니다.

MERGE 구문

MERGE INTO 대상테이블 T
USING 소스테이블 S
ON (T.ID = S.ID)

WHEN MATCHED THEN
  UPDATE SET T.NAME = S.NAME, T.SAL = S.SAL
  [DELETE WHERE T.SAL = 0]

WHEN NOT MATCHED THEN
  INSERT (ID, NAME, SAL) VALUES (S.ID, S.NAME, S.SAL);

MERGE 핵심 정리

설명동작
MERGE INTO변경할 대상 테이블 지정-
USING비교 소스 (테이블/서브쿼리)-
ON매칭 조건 지정-
WHEN MATCHED조건에 일치하는 행UPDATE / DELETE
WHEN NOT MATCHED조건에 불일치하는 행INSERT

6. 시험 빈출 포인트

반드시 알아야 할 포인트

  • 1. DML은 ROLLBACK 가능 — COMMIT 전이면 변경사항 취소 가능 (DDL과의 핵심 차이)
  • 2. 서브쿼리 INSERT에는 VALUES 없음 — INSERT INTO ... SELECT ... 형태
  • 3. UPDATE WHERE 생략 = 전체 수정 — 의도치 않은 전체 행 변경 주의
  • 4. DELETE FROM에서 FROM 생략 여부 — Oracle은 생략 가능, SQL Server는 필수
  • 5. MERGE의 WHEN MATCHED/NOT MATCHED — MATCHED에서 UPDATE/DELETE, NOT MATCHED에서 INSERT
  • 6. INSERT ALL vs INSERT FIRST — ALL은 모든 조건 체크, FIRST는 첫 매칭 조건만
  • 7. NULL 값 INSERT — 명시적으로 NULL 또는 ''(빈 문자열, Oracle에서는 NULL 취급)
  • 8. FK 참조 중인 부모 행 DELETE — ON DELETE 옵션에 따라 동작이 달라짐

개념을 확인했다면 문제로 실력을 검증해보세요