2-3-1. DML

박은서's avatar
Mar 02, 2026
2-3-1. DML
💡
DML (데이터 조작어 : Data Manipulation Language)

1. INSERT

1️⃣ 단일행 INSERT 문

1) INSERT 문

  • 데이터베이스 테이블에 새로운 데이터를 추가할 때 사용하는 SQL 명령어
  • 데이터 삽입 시 테이블의 모든 칼럼에 값을 지정하거나 특정 칼럼에만 값을 지정할 수 있음

2) INSERT 문 형식

  • 기본 형식
    • INSERT INTO 테이블명 (칼럼1, 칼럼2, ...) VALUES (값1, 값2, ...);
  • 모든 칼럼에 값을 삽입할 경우 칼럼 이름 생략 가능
    • INSERT INTO 테이블명 VALUES (값1, 값2, ...);

3) INSERT 문 예

  • EMP 테이블에 새로운 직원 데이터 추가
    • INSERT INTO EMP (EMPNO, ENAME, JOB, HIREDATE) VALUES (101, 'YONGMOON', 'MANAGER', '2023-08-01');
  • 모든 칼럼을 지정하지 않고 삽입
    • INSERT INTO EMP VALUES (102, 'YONGMOON2', 'CLERK', '7902', '2023-08-03', 2000, NULL, 20);

2️⃣ 서브 쿼리를 이용한 다중행 INSERT 문

1) 다중행 INSERT 문

  • 다른 테이블에서 데이터를 추출해 새로운 테이블에 삽입해야 할 경우, INSERT INTO 다음에 서브쿼리 구문을 사용하면 됨
  • 많은 데이터를 일괄 삽입할 때 유용
  • 서브쿼리를 이용하여 다른 테이블의 데이터를 통째로 옮기는 개념

2) 서브 쿼리를 이용한 다중행 INSERT 문 예

  • EMP_MNG 테이블 생성
    • CREATE TABLE EMP_MNG ( EMPNO NUMBER(4,0), ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4,0), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2,0) ); SELECT * FROM EMP_MNG;
  • 서브쿼리
    • SELECT EMPNO, ENAME, JOB, HIREDATE, DEPTNO FROM EMP WHERE DEPTNO = 20;
  • 서브 쿼리를 이용한 다중행 INSERT 문
    • INSERT INTO EMP_MNG (EMPNO, ENAME, JOB, HIREDATE, DEPTNO) SELECT EMPNO, ENAME, JOB, HIREDATE, DEPTNO FROM EMP WHERE DEPTNO = 20;

2. UPDATE

1️⃣ UPDATE 기초 개념

1) UPDATE 문

  • SQL에서 테이블에 이미 존재하는 데이터를 수정하는 데 사용되는 명령어
  • 특정 조건을 만족하는 행의 데이터를 변경할 수 있음
  • 조건을 지정하지 않으면 테이블의 모든 행이 업데이트됨

2) UPDATE 문 기본 형식

UPDATE 테이블명 SET 칼럼1 =1, 칼럼2 =2, ... WHERE 조건;

3) UPDATE 문 예

  • 여러 칼럼을 동시에 UPDATE
    • UPDATE EMP SET SAL = 200, COMM = 300 WHERE ENAME = 'YONGMOON';
  • 서브쿼리를 이용한 UPDATE
    • ‘YONGMOON’의 SAL 값을 DEPTNO가 10인 부서의 SAL 평균값으로 UPDATE
    • UPDATE EMP SET SAL = (SELECT AVG(SAL) FROM EMP WHERE DEPTNO = 10) WHERE ENAME = 'YONGMOON';

3. DELETE

1️⃣ DELETE 기초 개념

1) DELETE 문

  • SQL에서 테이블의 특정 행을 삭제할 때 사용하는 명령어
  • 특정 조건에 맞는 행을 삭제
  • WHERE 절을 사용하지 않으면 테이블의 모든 행 삭제됨
  • DELETE 문을 사용할 때는 주의가 필요
  • 자동 커밋이 발생하지 않는 경우, 삭제된 데이터를 ROLLBACK을 사용해 복구 가능

2) DELETE 문 기본 형식

DELETE FROM 테이블명 WHERE 조건;

3) DELETE 문 예

  • 여러 칼럼을 동시에 DELETE
    • DELETE FROM EMP WHERE ENAME = 'YONGMOON2';

※ DELETE vs TRUNCATE

DELETE
TRUNCATE
작동 방식
행 단위로 데이터 삭제
테이블 구조 유지, 모든 데이터 한 번에 제거
속도
각 행을 개별적으로 삭제 → 느림
전체 테이블 삭제 → 빠름
트랜잭션 로그
각 삭제 작업을 트랜잭션 로그에 기록
최소한의 트랜잭션 로그만 생성
롤백 가능성
트랜잭션 내에서 롤백 가능
일반적으로 롤백 불가능 (일부 DBMS에서 제한적으로 가능)
WHERE절 사용
WHERE절 사용 → 특정 조건 데이터만 삭제 가능
WHERE절 사용 불가
자동 커밋
X
대부분 DMBS에서 자동 커밋
인덱스 영향
인덱스 유지
인덱스 재설정
외래 키 제약 조건
외래 키 제약 조건 준수
일반적으로 외래 키 제약 조건이 있는 테이블에서는 사용 불가
트리거
삭제 트리거 발생
일반적으로 트리거 발생시키지 않음
권한
테이블에 대한 DELETE 권한 필요
일반적으로 더 높은 수준의 권한 필요

4. MERGE

1️⃣ MERGE 기초 개념

1) MERGE 문

  • SQL에서 데이터의 삽입, 업데이트, 삭제 작업을 하나의 명령문으로 처리할 수 있도록 도와주는 명령어
  • 주로 소스 테이블의 데이터를 타깃 테이블에 반영할 때 사용됨
  • MERGE문을 사용하면 특정 조건에 따라 데이터가 이미 존재하는지 확인
    • → 존재하면 업데이트, 존재하지 않으면 삽입 수행

2) MERGE 문 기본 형식

MERGE INTO 타깃_테이블 타깃(별칭) USING 소스_테이블 소스(별칭) ON (타깃.조건_칼럼 = 소스.조건_칼럼) WHEN MATCHED THEN UPDATE SET 타깃.칼럼1 = 소스.칼럼1, ... WHEN NOT MATCHED THEN INSERT (칼럼1, 칼럼2, ...) VALUES (소스.칼럼1, 소스.칼럼2, ...);

3) MERGE 문 예

  • 기본적인 MERGE 예시
    • MERGE INTO EMP_MNG M USING EMP E ON (M.EMPNO = E.EMPNO) WHEN MATCHED THEN UPDATE SET M.SAL = E.SAL, M.COMM = E.SAL WHEN NOT MATCHED THEN INSERT (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, E.DEPTNO);
 
Share article