정처기 감자정처기 감자
SQLSQL 문법

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

SQL DDL과 DCL - 테이블 정의와 권한 관리

DBSQLDDLDCL
읽는데 18분 소요
처음 쓰인 날: 2026-03-30
마지막 수정일: 2026-09-25
조회수: —
선수학습(1개)
  • SQL 첫걸음 - 데이터베이스·테이블·SQL 이해하기

요약

SQL의 3대 분류(DDL, DML, DCL)를 알아보고, 테이블을 생성/수정/삭제하고 도메인을 정의해 컬럼에 적용하는 DDL과 권한을 부여/회수하는 DCL을 정보처리기사 실기 기출문제와 함께 학습합니다.

DDL과 DCL은 SQL 작성 문제보다 빈칸 채우기로 출제되는 경우가 많습니다

DDL / DCL 학습 흐름

이 페이지는 SQL의 구조 관리 명령과 권한 관리 명령을 두 영역으로 나누어 봅니다.

영역먼저 볼 내용대표 문제
DDL - 데이터 정의어CREATE TABLE, CREATE DOMAIN, ALTER TABLE, DROP, TRUNCATE, CREATE INDEX, DROP INDEX테이블 생성·수정·삭제, 제약조건·도메인 작성, 인덱스 생성·삭제
DCL - 데이터 제어어GRANT, WITH GRANT OPTION, REVOKE권한 부여·회수 SQL 작성

DDL은 테이블 구조를 만드는 쪽, DCL은 사용자 권한을 다루는 쪽입니다. 시험에서는 두 영역이 같은 SQL 분류 문제로 묶여 나오지만, 실제 풀이에서는 "구조를 바꾸는가, 권한을 바꾸는가"를 먼저 나누면 문법을 훨씬 빠르게 고를 수 있습니다.

SQL 분류 핵심 정리

SQL(Structured Query Language)은 데이터베이스1를 다루기 위한 언어입니다. 크게 3가지로 분류됩니다.

분류이름주요 명령어설명
DDL데이터 정의어CREATE, ALTER, DROP, TRUNCATE테이블 구조를 정의/수정/삭제하거나 데이터를 전체 비움
DML데이터 조작어SELECT, INSERT, UPDATE, DELETE데이터를 조회/추가/수정/삭제
DCL데이터 제어어GRANT, REVOKE사용자 권한2을 부여/회수

DDL - 데이터 정의어

DDL(Data Definition Language)은 테이블, 뷰3 등 데이터베이스 구조(스키마)를 만들고, 바꾸고, 없애는 명령어입니다.

아래는 DDL에서 사용 가능한 명령어입니다. 테이블을 다루는 CREATE TABLE·ALTER TABLE·DROP·TRUNCATE를 먼저 보고, 마지막으로 조회 성능을 위한 CREATE INDEX·DROP INDEX를 살펴봅니다. 각 명령어의 역할과 문법을 순서대로 다룹니다.

CREATE TABLE - 테이블 생성

sql
코드 하이라이팅 중…

여기서 컬럼명4은 테이블의 각 열 이름, 데이터타입5은 그 열에 저장할 값의 형식, [제약조건]6은 입력 값에 적용할 규칙입니다. [ ]로 감싸진 항목은 생략 가능한 선택 요소입니다.

자주 사용되는 제약조건:

제약조건설명
PRIMARY KEY기본키 (NULL 불가, 중복 불가, 테이블당 1개)
FOREIGN KEY외래키 (다른 테이블의 기본키를 참조)
NOT NULLNULL7 값 입력 불가
UNIQUE중복 값 입력 불가 (NULL은 허용, 테이블에 여러 개 가능)
CHECK입력 값의 조건 제한
DEFAULT값 미입력 시 자동으로 채울 기본값 설정

예시:

sql
코드 하이라이팅 중…

제약조건에 이름 붙이기:

위 예시처럼 컬럼 옆에 바로 적는 대신, 컬럼을 모두 정의한 뒤 줄을 따로 만들어 제약조건을 선언할 수도 있습니다. 이때 맨 앞에 CONSTRAINT 제약조건명을 붙이면 그 제약조건에 이름을 줄 수 있는데, 이렇게 이름을 가진 제약조건을 named constraint라고 합니다.

sql
코드 하이라이팅 중…
  • CONSTRAINT PK_회원 PRIMARY KEY (회원ID) : 회원ID를 기본키로 지정하고, 그 제약조건에 PK_회원이라는 이름을 붙입니다.
  • CONSTRAINT UQ_이메일 UNIQUE (이메일) : 이메일이 중복되지 않도록 하는 UNIQUE 제약조건에 UQ_이메일이라는 이름을 붙입니다.
  • CONSTRAINT CHK_등급 CHECK (등급 IN ('일반', 'VIP', 'VVIP')) : 등급이 세 값 중 하나여야 한다는 CHECK 제약조건에 CHK_등급이라는 이름을 붙입니다.

CONSTRAINT 이름을 적는 위치만 다를 뿐, 제약조건의 의미는 컬럼 옆에 적는 것과 같습니다. 이름을 붙여두면 나중에 ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명으로 특정 제약조건만 골라 삭제·관리하기 좋습니다. 외래키도 같은 방식으로 CONSTRAINT 이름 FOREIGN KEY (컬럼) REFERENCES 부모테이블 (컬럼)처럼 이름을 붙입니다.

CREATE DOMAIN - 도메인 생성과 컬럼 적용

도메인(Domain)은 하나의 속성(컬럼)이 가질 수 있는 값들의 집합입니다. 예를 들어 계절 컬럼의 도메인은 {'spring', 'summer', 'autumn', 'winter'}, 학년 컬럼의 도메인은 {1, 2, 3, 4}입니다.

SQL에서는 CREATE DOMAIN으로 이 값의 범위를 이름이 붙은 사용자 정의 타입으로 만들 수 있습니다. 자료형과 CHECK 조건을 도메인 하나로 묶어 두면, 여러 테이블의 컬럼에서 데이터타입 자리에 도메인명만 적어 같은 규칙을 재사용할 수 있습니다. 이렇게 컬럼 값이 도메인 범위를 벗어나지 않도록 보장하는 것을 도메인 무결성이라고 합니다.

사용 순서는 도메인 생성 → 테이블 컬럼에 적용입니다.

1단계 - 도메인 생성:

sql
코드 하이라이팅 중…
  • SEASON : 새로 만드는 도메인의 이름입니다.
  • VARCHAR(6) : 도메인의 기본 자료형으로, 최대 6자 문자열을 저장합니다.
  • VALUE : 도메인에 입력되는 값 자체를 가리키는 키워드입니다.
  • CHECK (VALUE IN (...)) : 네 계절 값 중 하나만 허용하는 조건입니다.

2단계 - 테이블 컬럼에 도메인 적용:

sql
코드 하이라이팅 중…
  • season : weather 테이블의 컬럼명입니다.
  • SEASON : 앞서 정의한 도메인명으로, 데이터타입 자리에 적습니다.

weather.season에는 SEASON 도메인의 자료형 VARCHAR(6)과 CHECK 조건이 그대로 적용됩니다. 따라서 'spring', 'summer', 'autumn', 'winter' 외의 값은 입력할 수 없습니다.

ALTER TABLE - 테이블 수정

테이블의 구조(컬럼)를 변경할 때 사용합니다. ADD는 새 컬럼을 추가, MODIFY는 기존 컬럼의 데이터타입이나 제약조건을 변경, DROP COLUMN은 컬럼을 삭제합니다.

컬럼을 삭제할 때는 DROP COLUMN을 사용합니다. 여기서 COLUMN은 SQL 표준(ISO/IEC 9075)과 PostgreSQL·MySQL에서는 생략 가능한 선택 키워드라, ALTER TABLE 학생 DROP 과목;처럼 COLUMN을 빼도 동작합니다. 다만 SQL Server 등 일부 DBMS8에서는 COLUMN이 필수입니다. 표준에서는 둘 다 허용하므로 기호에 맞게 쓰면 됩니다.

sql
코드 하이라이팅 중…

DROP - 테이블/뷰 삭제

테이블이나 뷰를 구조째로 삭제합니다. 테이블에 저장된 데이터도 모두 함께 사라집니다.

sql
코드 하이라이팅 중…

CASCADE vs RESTRICT:

CASCADE와 RESTRICT는 삭제 대상 테이블이나 뷰를 다른 테이블(또는 뷰)이 참조하고 있을 때 어떻게 처리할지를 지정합니다. 옵션을 생략하면 RESTRICT가 적용됩니다.

옵션설명
CASCADE해당 테이블이나 뷰를 참조하는 다른 테이블·뷰도 함께 삭제
RESTRICT다른 테이블·뷰가 참조하고 있으면 삭제 거부 (옵션 생략 시 기본 적용)

시나리오 예시:

직원 테이블의 회사코드 컬럼이 회사 테이블의 기본키를 외래키로 참조하고 있는 상황을 가정합니다.

sql
코드 하이라이팅 중…
CASCADE는 '연쇄적 삭제'를 의미합니다
문제에서 '참조하는 데이터도 함께 제거' 같은 표현이 나오면 CASCADE입니다.

TRUNCATE - 테이블 데이터 전체 삭제

테이블 구조는 유지하면서 모든 데이터(행)만 삭제합니다.

sql
코드 하이라이팅 중…

TRUNCATE 전/후 비교:

TRUNCATE 전 학생 테이블:

학번이름학년
20241001김철수1
20241002이영희2

TRUNCATE 후 학생 테이블:

학번이름학년
(행 없음)

컬럼 구조(학번, 이름, 학년)는 그대로 남아 있고, 저장된 데이터만 모두 사라집니다.

DROP vs TRUNCATE vs DELETE 차이
DROP은 테이블 구조째 삭제(복구 불가), TRUNCATE는 데이터 전체 삭제(구조 유지), DELETE는 WHERE 조건에 맞는 행만 삭제합니다.

CREATE INDEX - 인덱스 생성

인덱스(index, 색인)는 책 뒤의 '찾아보기'와 같습니다. 찾아보기가 본문과 따로 붙어 있듯, 인덱스도 테이블과는 별도로 저장되어 특정 컬럼 값이 어느 행에 있는지를 빠르게 알려줍니다.

인덱스가 컬럼 값으로 테이블의 행 위치를 찾는 구조
부서인덱스는 부서명을 정렬해 두고 각 값이 회사 테이블의 몇 번 행에 있는지를 가리킵니다. 인덱스에서 부서명을 빠르게 찾아 행 위치를 얻은 뒤, 실제 행으로 바로 이동합니다.

데이터를 찾아 읽는 조회(SELECT) 속도를 높이려고 만들며, 인덱스를 추가하거나 지워도 테이블의 실제 데이터는 바뀌지 않습니다. 인덱스가 내부적으로 어떤 자료구조(B-트리·해싱 등)로 동작하는지는 인덱스 접근 구조에서 다룹니다. 여기서는 인덱스를 만들고 없애는 DDL 문법만 봅니다.

sql
코드 하이라이팅 중…

[UNIQUE]는 생략 가능한 선택 요소입니다. 붙이면 해당 컬럼에 같은 값을 두 번 넣을 수 없게 막는데(이미 있는 값을 또 넣으면 오류로 거부됩니다), 앞서 본 UNIQUE 제약조건과 효과가 비슷하면서 검색 속도까지 빨라집니다. 컬럼을 하나만 적으면 그 컬럼에 대한 인덱스가, 여러 개 적으면 그 컬럼들을 한 묶음으로 본 복합 인덱스가 만들어집니다. 복합 인덱스는 여러 컬럼을 함께 조건으로 자주 검색할 때 유용합니다.

예시:

sql
코드 하이라이팅 중…

DROP INDEX - 인덱스 삭제

만들어 둔 인덱스를 삭제할 때는 DROP INDEX를 사용합니다. 인덱스 이름만 적으면 되고(테이블명은 쓰지 않습니다), 인덱스만 사라질 뿐 테이블과 그 안의 데이터는 그대로 유지됩니다.

sql
코드 하이라이팅 중…
sql
코드 하이라이팅 중…

CREATE VIEW - 뷰 생성

뷰(View)는 하나의 SELECT 문에 이름을 붙여 저장한 가상 테이블입니다. 데이터를 따로 복사해 두는 것이 아니라, 뷰를 조회할 때마다 저장해 둔 SELECT 문이 다시 실행되어 기반 테이블(뷰의 FROM 절에 적은 원본 테이블)의 최신 데이터를 보여줍니다. 자주 쓰는 복잡한 조회를 간단한 이름으로 재사용하거나, 특정 컬럼·행만 노출해 보안을 높일 때 사용합니다.

sql
코드 하이라이팅 중…

AS 뒤에 뷰의 정의가 될 SELECT 문을 씁니다.

예시:

sql
코드 하이라이팅 중…

이후 SELECT * FROM 고액사원;처럼 뷰를 일반 테이블처럼 조회할 수 있습니다. 또한 이 예처럼 한 테이블에서 컬럼만 골라낸 단순한 뷰는, 뷰를 통해 INSERT·UPDATE로 기반 테이블의 데이터를 바꿀 수도 있습니다. 만든 뷰를 없앨 때는 DROP VIEW 뷰이름;으로 삭제합니다.

WITH CHECK OPTION - 조건 위반 입력 차단

조건(WHERE 절)이 붙은 뷰라도, 기본적으로는 그 조건에 맞지 않는 데이터가 뷰를 통해 기반 테이블에 들어올 수 있습니다. 뷰 정의 끝에 WITH CHECK OPTION을 붙이면, 뷰를 통한 INSERT·UPDATE가 뷰의 조건을 만족할 때만 허용되고 조건을 어기는 입력은 거부됩니다.

sql
코드 하이라이팅 중…

예시:

sql
코드 하이라이팅 중…
WITH CHECK OPTION은 뷰 조건을 어기는 입력을 막습니다
이 옵션이 없으면 급여 2000인 행도 기반 테이블에 들어가 뷰에는 안 보이는 채로 남습니다. 붙이면 뷰 조건(급여 3000 이상)을 어기는 INSERT·UPDATE가 거부됩니다.

DCL - 데이터 제어어

데이터베이스에는 여러 사용자(DBA9, 일반 사용자, 애플리케이션 계정 등)가 접근합니다. 사용자마다 허용할 작업 범위가 다르므로, 권한을 세밀하게 제어할 필요가 있습니다. DCL(Data Control Language)은 이러한 사용자 권한을 부여하거나 회수하는 명령어입니다.

GRANT - 권한 부여

sql
코드 하이라이팅 중…

권한 종류:

권한설명
SELECT조회 권한
INSERT삽입 권한
UPDATE수정 권한
DELETE삭제 권한
ALL모든 권한

예시:

sql
코드 하이라이팅 중…

WITH GRANT OPTION - 권한 재부여 허용

GRANT 구문 끝에 WITH GRANT OPTION을 붙이면, 권한을 받은 사용자가 다른 사용자에게도 같은 권한을 부여할 수 있게 됩니다.

sql
코드 하이라이팅 중…

예시:

sql
코드 하이라이팅 중…

WITH GRANT OPTION 없이 부여한 경우, USER1은 자신만 SELECT를 수행할 수 있고 다른 사용자에게 권한을 넘길 수 없습니다.

REVOKE - 권한 회수

sql
코드 하이라이팅 중…

예시:

sql
코드 하이라이팅 중…
GRANT는 TO, REVOKE는 FROM
권한을 '줄 때'는 TO(~에게), '빼앗을 때'는 FROM(~으로부터)을 사용합니다.

REVOKE ... CASCADE - 권한 연쇄 회수

WITH GRANT OPTION으로 권한이 여러 사용자에게 퍼진 상황에서, 중간 사용자의 권한을 회수할 때 사용하는 옵션입니다. DROP의 CASCADE와 의미가 비슷합니다 — 이 사용자가 재부여한 권한도 모두 함께 회수됩니다.

옵션설명
CASCADE해당 사용자가 재부여한 다른 사용자의 권한도 함께 연쇄 회수
RESTRICT재부여한 사용자가 있으면 회수 거부 (옵션 생략 시 기본)

시나리오 예시:

DBA가 USER1에게 WITH GRANT OPTION으로 SELECT 권한을 주고, USER1이 USER2에게 SELECT 권한을 재부여한 상태입니다.

sql
코드 하이라이팅 중…

REVOKE GRANT OPTION FOR - 재부여 권한만 회수

사용자 본인의 권한은 유지하고, 다른 사용자에게 재부여할 수 있는 권한만 회수하려면 GRANT OPTION FOR를 사용합니다.

sql
코드 하이라이팅 중…

이 구문 실행 후 USER1은 여전히 학생 테이블을 SELECT할 수 있지만, 다른 사용자에게 SELECT 권한을 넘길 수는 없게 됩니다.


정보처리기사 실기 대비 문제

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.

Footnotes

  1. 데이터를 체계적으로 저장하고 관리하는 저장소. 여러 사람이 동시에 접근할 수 있으며, 데이터 중복과 불일치를 줄이는 것을 목표로 합니다. ↩

  2. 어떤 사용자가 어떤 테이블에 대해 SELECT(조회), INSERT(삽입), UPDATE(수정), DELETE(삭제) 등을 수행할 수 있는지를 결정하는 접근 허가 단위입니다. ↩

  3. 하나 이상의 테이블을 기반으로 만든 가상 테이블입니다. 실제 데이터를 저장하지 않고, 조회 쿼리를 저장해 두었다가 필요할 때 테이블처럼 사용합니다. ↩

  4. 테이블의 각 열(세로 방향)을 나타내는 이름입니다. 예: 학번, 이름, 학년. ↩

  5. 컬럼에 저장할 값의 종류와 형식을 지정합니다. INT는 정수, VARCHAR(n)은 최대 n자의 가변 문자열입니다. ↩

  6. 컬럼에 입력 가능한 값을 제한하는 규칙입니다. PRIMARY KEY, NOT NULL, UNIQUE, CHECK, DEFAULT 등이 있습니다. ↩

  7. 아직 값이 입력되지 않았음을 나타내는 특수한 상태입니다. 0이나 빈 문자열("")과 다르며, "모른다" 또는 "해당 없음"을 의미합니다. ↩

  8. DBMS(Database Management System): 데이터베이스를 저장·조회·관리하는 소프트웨어입니다. Oracle, MySQL, PostgreSQL, SQL Server 등이 대표적입니다. ↩

  9. DBA(Database Administrator): 데이터베이스를 운영·관리하는 담당자입니다. 사용자 권한 부여, 백업, 성능 관리 등을 책임집니다. ↩


메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(1개)
  • SQL DML - INSERT, UPDATE, DELETE로 데이터 조작하기
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999