공든탑앱 열기

DML(INSERT·UPDATE·DELETE·MERGE)

SQLD (SQL 개발자) · 관리 구문 · 약 14분

쉽게 말하면

DML은 표 안의 데이터를 바꾸는 명령이에요. 새 줄을 넣고(INSERT), 값을 고치고(UPDATE), 줄을 지우고(DELETE), 있으면 고치고 없으면 넣어요(MERGE). 바꾼 내용은 COMMIT을 해야 확정되고, 그 전에는 ROLLBACK으로 되돌릴 수 있어요.

시험용 정의

DML(Data Manipulation Language)은 테이블의 데이터를 바꾸는 명령이다. INSERT(행 넣기), UPDATE(값 고치기), DELETE(행 지우기), MERGE(있으면 UPDATE, 없으면 INSERT). DML로 바꾼 내용은 COMMIT해야 확정되고, 그 전에는 ROLLBACK으로 되돌릴 수 있다(Oracle 기본).

비유로 이해하기

장부에 연필로 적는 것이다. INSERT는 새 줄 쓰기, UPDATE는 지우고 고쳐 쓰기, DELETE는 줄 지우기. 연필 자국은 COMMIT(볼펜으로 덧쓰기) 전까지 지우개(ROLLBACK)로 지울 수 있다.

자세히

먼저 알아 둘 말

말뜻
COMMIT지금까지의 변경을 확정해 다른 사용자도 볼 수 있게 한다
ROLLBACK확정하지 않은 변경을 모두 되돌린다
제약조건PK 중복, NOT NULL 같은 규칙. 어기는 DML은 오류로 거부된다
소스 / 타깃MERGE에서 읽어 오는 쪽(USING) / 바뀌는 쪽(INTO)

네 가지 DML

명령모양메모
INSERTINSERT INTO dept (deptno, dname) VALUES (50, 'QA')열 목록을 생략하면 모든 열 값을 테이블 순서대로 다 줘야 한다(모자라면 '값의 수가 충분하지 않습니다' 오류). 열 목록을 쓰면 빠진 열은 NULL(또는 DEFAULT)
INSERT … SELECTINSERT INTO emp_bak SELECT * FROM emp WHERE deptno = 20조회 결과를 한꺼번에 넣는다
UPDATEUPDATE emp SET sal = sal * 1.1, comm = 0 WHERE deptno = 30WHERE 없으면 모든 행
DELETEDELETE FROM emp WHERE ename = 'OH'FROM은 생략 가능. WHERE 없으면 모든 행 삭제(구조는 남음)
MERGEMERGE INTO 타깃 USING 소스 ON (조건) WHEN MATCHED THEN UPDATE … WHEN NOT MATCHED THEN INSERT …조건에 맞으면 UPDATE, 없으면 INSERT. 한쪽만 써도 된다

DELETE vs TRUNCATE vs DROP

구분DELETETRUNCATEDROP
종류DMLDDLDDL
지우는 것조건에 맞는 행 (WHERE 가능)모든 행 (구조는 남음)테이블 자체(구조까지)
ROLLBACK가능 (COMMIT 전)불가 (자동 커밋)불가 (자동 커밋)
저장 공간그대로처음 상태로 돌려줌모두 돌려줌
속도행마다 기록을 남겨 느림빠름빠름

시험에 이렇게 나와요

출제 범위·공식 안내 기반

확인 문제

Q1. UPDATE emp SET sal = sal * 1.1을 WHERE 없이 실행하면?

  1. 오류가 난다
  2. 아무것도 바뀌지 않는다
  3. 모든 행의 급여가 10% 오른다
  4. 첫 번째 행만 바뀐다
정답 보기

3번 모든 행의 급여가 10% 오른다

UPDATE와 DELETE는 WHERE가 없으면 테이블의 모든 행에 적용된다. 실수하면 COMMIT 전에 ROLLBACK으로 되돌려야 한다.

Q2. DEPT(DEPTNO, DNAME, LOC)에 INSERT INTO dept VALUES (50, 'QA')를 실행하면?

  1. DNAME에 NULL이 들어간다
  2. 오류: 값의 수가 충분하지 않다
  3. LOC에 빈 문자열이 들어간다
  4. LOC에 NULL이 들어간다
정답 보기

2번 오류: 값의 수가 충분하지 않다

열 목록을 생략하면 모든 열 값을 줘야 한다. 일부만 넣으려면 열 목록을 쓴다.

Q3. 테이블 구조는 남기고 모든 행을 지우되, ROLLBACK으로 되돌릴 수 있는 명령은?

  1. TRUNCATE TABLE
  2. DELETE FROM 테이블
  3. ALTER TABLE
  4. DROP TABLE
정답 보기

2번 DELETE FROM 테이블

DELETE는 DML이라 COMMIT 전이면 ROLLBACK된다. TRUNCATE·DROP은 DDL이라 자동 커밋.

Q4. MERGE 문에 대한 설명으로 틀린 것은?

  1. WHEN MATCHED 절과 WHEN NOT MATCHED 절은 반드시 둘 다 써야 한다
  2. USING 뒤에는 테이블이나 서브쿼리가 온다
  3. WHEN NOT MATCHED에서는 INSERT를 한다
  4. ON 조건에 맞는 행은 WHEN MATCHED 절이 처리한다
정답 보기

1번 WHEN MATCHED 절과 WHEN NOT MATCHED 절은 반드시 둘 다 써야 한다

'WHEN MATCHED와 WHEN NOT MATCHED를 반드시 둘 다 써야 한다'가 틀리다. 한쪽만 써도 된다. 맞으면 UPDATE(또는 DELETE), 안 맞으면 INSERT를 한다.

Q5. UPDATE emp SET sal = sal * 1.1 을 실행하면?

  1. 첫 행만 바뀐다
  2. WHERE가 없어 오류가 난다
  3. 모든 사원의 급여가 10% 오른다
  4. 아무 행도 바뀌지 않는다
정답 보기

3번 모든 사원의 급여가 10% 오른다

WHERE가 없으면 모든 행이 바뀐다.

Q6. MERGE INTO t USING s ON (t.id = s.id) WHEN MATCHED THEN UPDATE … WHEN NOT MATCHED THEN INSERT … 에서 s에만 있는 행은?

  1. 무시된다
  2. t에서 지워진다
  3. INSERT된다
  4. UPDATE된다
정답 보기

3번 INSERT된다

짝이 없는(NOT MATCHED) 행은 INSERT, 짝이 있는 행은 UPDATE.

헷갈리기 쉬운 O·X

DELETE 문에서 FROM은 생략할 수 있다.

정답 보기

O DELETE emp WHERE …도 된다(Oracle).

TRUNCATE는 WHERE 절로 일부 행만 지울 수 있다.

정답 보기

X TRUNCATE는 항상 모든 행이다. 일부는 DELETE.

UPDATE 문 하나로 여러 열을 함께 바꿀 수 있다.

정답 보기

O SET sal = …, comm = … 처럼 쉼표로.

함께 보면 좋은 개념