SQL 문장은 하는 일에 따라 네 종류로 나뉩니다. 틀을 정의하는 DDL, 행을 다루는 DML, 권한을 주고 거두는 DCL, 바꾼 것을 확정하거나 되돌리는 TCL입니다.
SQLD를 먼저 공부했다면 이 단원 끝의 모의 문제부터 풀어 보고, 틀린 문제가 나온 레슨만 골라 봐도 됩니다.
학사 데이터베이스에서 하는 일을 떠올려 봅시다. 학생 표를 만들고, 학생을 넣고 조회하고, 조교에게 학생 표를 볼 권한을 주고, 고친 학년을 확정합니다. 일이 다르면 쓰는 SQL 문장의 종류도 다릅니다. 종류마다 바꾸는 대상이 다릅니다. 표의 틀을 바꾸는 문장이 있고, 표 안의 행을 바꾸는 문장이 있습니다. 필기는 명령어를 주고 어느 종류인지 고르게 하고, 실기는 종류의 이름을 쓰게 합니다.
그림은 첫 칸에 가르는 기준 '무엇을 하나'를 둔 표입니다. 명령어 카드를 골라 알맞은 칸에 직접 담아 보세요.
1틀을 정의하는 DDL과 행을 다루는 DML
틀을 정의하는 문장은 DDL(Data Definition Language, 데이터 정의어)입니다. 테이블 같은 구조를 만들고(CREATE), 바꾸고(ALTER), 없앱니다(DROP). 행을 다루는 문장은 DML(Data Manipulation Language, 데이터 조작어)입니다. 행을 조회하고(SELECT), 넣고(INSERT), 고치고(UPDATE), 지웁니다(DELETE). SELECT는 행을 바꾸지 않지만 DML입니다.
2권한을 다루는 DCL과 확정·취소의 TCL
권한을 주고 거두는 문장은 DCL(Data Control Language, 데이터 제어어)입니다. 권한을 주는 GRANT와 거두는 REVOKE가 있습니다. DML로 바꾼 것을 확정하거나 되돌리는 문장은 TCL(Transaction Control Language, 트랜잭션 제어어)입니다. COMMIT은 확정하고, ROLLBACK은 되돌립니다.
3자료에 따라 갈리는 COMMIT·ROLLBACK
자료에 따라 COMMIT과 ROLLBACK을 DCL에 넣기도 합니다. GRANT와 REVOKE는 어느 자료에서나 DCL입니다.
예제
어느 종류일까요
다음 네 가지 일에 쓰는 문장은 각각 어느 종류일까요? 아래 표를 보기 전에 먼저 골라 보세요.
(가) 학생 표에 전화 열을 더합니다.
(나) 105번 학생의 학년을 4로 고칩니다.
(다) 조교가 학생 표를 조회할 수 있게 합니다.
(라) 고친 학년을 확정합니다.
| 무엇을 하나 | 종류 | 명령어 | 사례 |
|---|---|---|---|
| 틀을 정의한다 | DDL | CREATE · ALTER · DROP | (가) |
| 행을 다룬다 | DML | SELECT · INSERT · UPDATE · DELETE | (나) |
| 권한을 주고 거둔다 | DCL | GRANT · REVOKE | (다) |
| 바꾼 것을 확정하거나 되돌린다 | TCL | COMMIT · ROLLBACK | (라) |
(다)는 다음 문장입니다. 조교라는 사용자에게 학생 표를 조회(SELECT)할 권한을 줍니다.
GRANT SELECT ON 학생
TO 조교;
ROLLBACK은 무엇을 되돌리나
(가)와 (나)를 실행한 뒤 (라)의 COMMIT 대신 ROLLBACK을 하고 105번 학생을 조회합니다.
아래 ALTER TABLE은 Oracle 꼴입니다. VARCHAR2(20)은 길이가 20까지 바뀌는 Oracle의 문자열 자료형이고, 표준 꼴인 VARCHAR(20)과 괄호 없이 쓰는 꼴은 DDL: CREATE·ALTER·DROP에서 봅니다.
ALTER TABLE 학생
ADD (전화 VARCHAR2(20));
UPDATE 학생
SET 학년 = 4
WHERE 학번 = 105;
ROLLBACK;
SELECT 학번,
학년,
전화
FROM 학생
WHERE 학번 = 105;
| 학번 | 학년 | 전화 |
|---|---|---|
| 105 | 3 | NULL |
- 학년은 3으로 돌아왔습니다. UPDATE는 DML이라 ROLLBACK이 되돌립니다.
- 전화 열은 남았습니다. Oracle은 DDL을 실행할 때 저절로 COMMIT하므로, ALTER TABLE로 더한 열은 ROLLBACK으로 사라지지 않습니다. 새로 더한 열이라 값은 NULL입니다.
시험 포인트
- 필기: 명령어를 주고 종류를 고르게 합니다. 무엇을 하는지로 가릅니다 — 틀은 DDL, 행은 DML, 권한은 DCL, 확정·취소는 TCL입니다. SELECT는 행을 바꾸지 않아도 DML입니다. 자료에 따라 COMMIT·ROLLBACK을 DCL에 넣기도 합니다.
- 실기: 종류의 이름을 영문 약어와 원어로 씁니다 — DDL(Data Definition Language), DML(Data Manipulation Language), DCL(Data Control Language), TCL(Transaction Control Language).
확인 문제
1. 다음 가운데 DDL로 하는 일을 고르세요.
- ① 과목 표에서 학점이 2인 행을 지운다
- ② 과목 표의 학점 열 자료형을 바꾼다
- ③ 과목 표를 읽을 권한을 교직원에게 준다
- ④ 과목 표에서 방금 지운 행을 되살린다
정답
②입니다. 표의 틀을 다루는 종류가 DDL입니다. 열의 자료형을 바꾸는 일은 ALTER TABLE로 하니 DDL입니다.
- ① '지운다'는 말만 보고
DROP과 같은 종류로 봤습니다. 행을 지우는DELETE는 DML이고, 표 자체를 없애는DROP만 DDL입니다. - ③ 문장이 표를 가리켜 DDL로 봤습니다. 주는 것이 권한이면 DCL입니다.
- ④ 지운 행을 되살리는
ROLLBACK은 TCL입니다. 틀은 그대로 두고 DML로 바꾼 것만 되돌립니다.
2. 장학금 신청을 데이터베이스로 관리합니다. (가)~(라)에서 한 일에 쓰는 명령어 묶음의 이름을 영문 약어와 원어, 한글 이름까지 함께 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- (가) 신청을 담을 표를 새로 만들고, 뒤늦게 신청 날짜 열을 하나 더 붙였습니다.
- (나) 그 표에 신청 열 건을 넣고, 한 건의 금액을 고치고, 취소된 한 건을 지웠습니다.
- (다) 새로 온 연구원이 그 표를 읽을 수 있게 했다가, 계약이 끝나자 읽지 못하게 했습니다.
- (라) 금액을 고친 뒤 잘못을 알아차려, 고치기 전 값으로 되돌렸습니다.
정답
받는 답: (가) DDL(Data Definition Language, 데이터 정의어) · (나) DML(Data Manipulation Language, 데이터 조작어) · (다) DCL(Data Control Language, 데이터 제어어) · (라) TCL(Transaction Control Language, 트랜잭션 제어어)
(가)의 실마리는 '표를 만들고 열을 붙였다', (나)는 '행을 넣고 고치고 지웠다', (다)는 '남이 읽을 수 있게 했다가 못 하게 했다', (라)는 '고친 값을 고치기 전으로 되돌렸다'입니다.
- 같은 이름의 다른 꼴: 약어만 쓴 꼴 — 문제가 원어와 한글 이름까지 함께 쓰라고 했습니다.
- 같은 이름의 다른 꼴 (라) DCL(Data Control Language, 데이터 제어어): 자료에 따라 COMMIT·ROLLBACK을 DCL에 넣기도 하니 (라)에는 TCL과 DCL을 모두 받습니다.
- 틀리는 꼴 Data Management Language: DML의 M은 Manipulation입니다. Management는 DBMS의 M입니다.
- 틀리는 꼴 DML — (가)에: 표 안의 행을 다루는 묶음입니다. (가)는 행이 아니라 표의 틀을 만들고 바꿨습니다.
3. 명령어 카드 여섯을 바구니 셋에 나눠 담으세요. 바구니마다 그 바구니에 담을 카드 기호를 쓰세요. 답을 끝까지 쓴 뒤 정답을 펼치세요.
- 카드: (가)
DELETE· (나)ALTER· (다)REVOKE· (라)SELECT· (마)DROP· (바)GRANT - 바구니: DDL · DML · DCL
정답
받는 답: DDL — (나)·(마) · DML — (가)·(라) · DCL — (다)·(바)
바구니를 가르는 기준은 '무엇을 바꾸나'입니다. 표의 틀을 바꾸면 DDL, 표 안의 행을 다루면 DML, 사람의 권한을 다루면 DCL입니다.
- (가)
DELETE는 행을 지웁니다. 표의 틀은 그대로 남습니다. - (나)
ALTER는 표의 열과 제약 조건을 바꿉니다. - (다)
REVOKE는 준 권한을 거둡니다. - (라)
SELECT는 행을 바꾸지 않지만 행을 꺼내 오는 문장이라 DML입니다. - (마)
DROP은 표를 틀까지 통째로 없앱니다. 행만 지우는 (가)와 바구니가 다릅니다. - (바)
GRANT는 권한을 줍니다.
더 자세히: SQLD의 관계형 데이터베이스 개요