[SQL] DDL / DML / DCL / TCL 총정리 (Oracle 기준)

[SQL] DDL / DML / DCL / TCL 총정리 (Oracle 기준)

이 글은 Oracle DB 기준으로 SQL을 분류 체계(DDL, DML, DCL, TCL)에 따라 정리한 글이다. 단순 문법 나열이 아니라, 각 분류가 왜 필요한지와 언제 사용하는지를 함께 설명한다.


1. SQL 분류 개요

SQL은 역할에 따라 네 가지로 분류된다. 이 분류는 Oracle 시험, 실무, 면접에서 모두 기본 전제로 사용된다.

분류 이름 역할
DDL Data Definition Language 데이터 구조 정의
DML Data Manipulation Language 데이터 조회/조작
DCL Data Control Language 권한 제어
TCL Transaction Control Language 트랜잭션 제어

2. DDL (Data Definition Language)

2-1. DDL이란?

DDL은 데이터베이스의 구조 자체를 정의하는 SQL이다.

테이블, 컬럼, 제약조건 같은 뼈대를 만드는 역할을 하며, 데이터가 아니라 구조를 다룬다.

DDL은 실행 즉시 반영되며, ROLLBACK이 불가능하다는 특징이 있다.

2-2. 주요 DDL 문법

CREATE TABLE

CREATE TABLE USERS (
  ID NUMBER PRIMARY KEY,
  NAME VARCHAR2(50) NOT NULL,
  EMAIL VARCHAR2(100) UNIQUE,
  CREATED_AT DATE
);

ALTER TABLE

ALTER TABLE USERS
ADD PHONE VARCHAR2(30);

DROP TABLE

DROP TABLE USERS;

TRUNCATE TABLE

TRUNCATE TABLE USERS;

TRUNCATE는 테이블 구조는 유지하고 데이터만 즉시 삭제한다. DELETE와 달리 ROLLBACK이 불가능하다.


3. DML (Data Manipulation Language)

3-1. DML이란?

DML은 테이블에 저장된 데이터를 조회하거나 변경하는 SQL이다.

실제 서비스에서 가장 많이 사용되는 SQL이며, 트랜잭션의 영향을 받는다.

3-2. SELECT (조회)

SELECT ID, NAME, EMAIL
FROM USERS
WHERE EMAIL IS NOT NULL;

3-3. INSERT (삽입)

INSERT INTO USERS (ID, NAME, EMAIL, CREATED_AT)
VALUES (1, '홍길동', 'hong@test.com', SYSDATE);

3-4. UPDATE (수정)

UPDATE USERS
SET EMAIL = 'new@test.com'
WHERE ID = 1;

3-5. DELETE (삭제)

DELETE FROM USERS
WHERE ID = 1;

DML은 COMMIT을 해야 실제로 반영되며, ROLLBACK으로 취소할 수 있다.


4. TCL (Transaction Control Language)

4-1. TCL이란?

TCL은 트랜잭션의 흐름을 제어하는 SQL이다.

트랜잭션은 여러 DML 작업을 하나의 작업 단위로 묶는 개념이다.

4-2. 주요 TCL 문법

COMMIT

COMMIT;

현재 트랜잭션에서 수행한 모든 DML을 확정한다.

ROLLBACK

ROLLBACK;

마지막 COMMIT 이후의 모든 작업을 취소한다.

SAVEPOINT

SAVEPOINT A;
UPDATE USERS SET NAME = '임꺽정' WHERE ID = 1;
ROLLBACK TO A;

SAVEPOINT는 트랜잭션 중간 지점을 만들어 부분 롤백을 가능하게 한다.


5. DCL (Data Control Language)

5-1. DCL이란?

DCL은 사용자의 권한을 제어하는 SQL이다.

누가 어떤 테이블을 조회/수정할 수 있는지를 결정하며, 보안과 직결된다.

5-2. GRANT (권한 부여)

GRANT SELECT, INSERT
ON USERS
TO USER_A;

USER_A에게 USERS 테이블에 대한 조회와 삽입 권한을 부여한다.

5-3. REVOKE (권한 회수)

REVOKE INSERT
ON USERS
FROM USER_A;

부여했던 권한을 회수한다.

5-4. ROLE

CREATE ROLE READ_ONLY;
GRANT SELECT ON USERS TO READ_ONLY;
GRANT READ_ONLY TO USER_A;

ROLE은 여러 권한을 묶어 관리하기 위한 단위다.


6. DDL / DML / DCL / TCL 차이 정리

구분 대상 ROLLBACK 주 용도
DDL 구조 불가 테이블/스키마 정의
DML 데이터 가능 조회/삽입/수정/삭제
TCL 트랜잭션 - COMMIT/ROLLBACK
DCL 권한 불가 보안/접근 제어

7. 마무리

SQL은 단순히 문법을 외우는 것이 아니라, 어떤 상황에서 어떤 분류의 SQL을 쓰는지를 이해하는 것이 중요하다.

Oracle 기준으로 DDL, DML, DCL, TCL을 구분해서 이해하면 실무와 시험 모두에서 혼동이 줄어든다.