표를 만들고, 행을 넣고 고치고 지우고, 권한을 주는 문장이다. 결과를 세는 장이 아니라 문장을 정확히 적는 장이다
왜 이걸 하나 — 조회보다 적게 나오지만 외우면 확실한 5점이다. 계산도 함정도 없다.
11회분 220문항 중 이 장의 기출은 6문항이다. DELETE 작성(2023-1회), INSERT 작성과 DROP 옵션(2023-2회), INSERT · SELECT · UPDATE 빈칸(2024-2회), 외래키 제약 빈칸(2026-1회), CHECK 제약(2026-2회). 회차로 보면 11회 중 5회에 나왔고, 2026년에는 두 회 연속으로 제약 조건이 나왔다.
| 꼴 | 몇 문항 | 무엇을 적나 | 보기 |
|---|---|---|---|
| 문장 작성 | 2 | DELETE · INSERT 한 문장 전부 | 2023-1회 13번 · 2023-2회 1번 |
| 키워드 빈칸 | 3 | VALUES · SET · CONSTRAINT · FOREIGN · REFERENCES · CHECK | 2024-2회 3번 · 2026-1회 18번 · 2026-2회 19번 |
| 옵션 용어 | 1 | CASCADE | 2023-2회 2번 |
→ 여섯 문항의 정답에 나온 키워드를 다 모아도 12개다. VALUES · SELECT · FROM · SET · DELETE · INSERT · CONSTRAINT · FOREIGN · KEY · REFERENCES · CHECK · CASCADE. 이 장은 그 12개에 아직 안 나온 짝(GRANT · REVOKE · ALTER · CREATE VIEW · INDEX · COMMIT · ROLLBACK)을 더해 한 벌로 만든다.
2회에서 SQL 이 약했다면 이 장은 가장 빨리 메워지는 자리다. 문장의 꼴이 정해져 있어 여섯 문장을 백지에 적을 수 있으면 끝나고, 03절이 그 여섯을 한 줄씩 세운다.
문항 수는 이 노트의 문제 데이터에서 ch=E09 인 것을 센 값이다(2026-09-14). 2026-1회 18번의 제약 이름과 참조 열은 복원본마다 달라 그랜드라이프 복원(TEAM_TF · TEAM_ID2)을 따랐다.
왜 이걸 하나 — 시험 전날 이 절의 문장 6개를 백지에 적어 본다.
INSERT INTO 표(열1, 열2) VALUES (값1, 값2); 열 목록을 빼면 표의 열 순서대로 전부 준다. 문자열은 작은따옴표, 숫자는 그대로.UPDATE 표 SET 열 = 값 WHERE 조건; SET 이 키워드다. INTO 나 FROM 을 쓰면 틀린다. WHERE 를 빼면 전부 바뀐다.DELETE FROM 표 WHERE 조건; 열 이름을 적지 않는다. WHERE 를 빼면 전부 지워지고 표는 남는다.CREATE TABLE 표 (열 자료형 [NOT NULL | PRIMARY KEY | UNIQUE | CHECK(조건) | DEFAULT 값], …, FOREIGN KEY (열) REFERENCES 부모표(열)); 제약에 이름을 붙이려면 앞에 CONSTRAINT 이름.ALTER TABLE 표 ADD 열 자료형; · ALTER TABLE 표 DROP COLUMN 열; · DROP TABLE 표; · DROP VIEW 뷰 CASCADE;(의존 객체까지) · RESTRICT(의존 객체 있으면 거부).CREATE VIEW 뷰 AS SELECT …; · CREATE INDEX 이름 ON 표(열); · CREATE DOMAIN 이름 AS 자료형 CHECK(VALUE IN (…));GRANT SELECT ON 표 TO 사용자 [WITH GRANT OPTION]; · REVOKE SELECT ON 표 FROM 사용자; TO 와 FROM 이 짝이다. GRANT ALL, TO PUBLIC 도 있다.ROLLBACK TO 이름 으로 부분 취소.왜 이걸 하나 — 키워드를 외우는 게 아니라 왜 그 자리에 그 말이 오는지를 알면 빈칸이 어디 뚫려도 채운다.
SQL 문장은 전부 같은 뼈대다. 맨 앞에 동사(무엇을 하나), 그 다음에 대상(어느 표), 마지막에 세부(어느 행 · 어떤 값)가 온다. 동사마다 대상을 받는 전치사가 정해져 있다는 것이 빈칸 문제의 전부다.
| 동사 | 대상을 받는 말 | 세부를 받는 말 | 문장 |
|---|---|---|---|
| INSERT | INTO 표 | VALUES (값) | INSERT INTO 학생 VALUES (…); |
| UPDATE | 표 (전치사 없음) | SET 열 = 값 · WHERE | UPDATE 학생 SET 학년 = 4 WHERE …; |
| DELETE | FROM 표 | WHERE | DELETE FROM 학생 WHERE …; |
| SELECT | 열 … FROM 표 | WHERE · GROUP BY · ORDER BY | SELECT 이름 FROM 학생; |
| GRANT | 권한 ON 표 | TO 사용자 | GRANT SELECT ON 학생 TO 김기사; |
| REVOKE | 권한 ON 표 | FROM 사용자 | REVOKE SELECT ON 학생 FROM 김기사; |
| CREATE · DROP · ALTER | TABLE · VIEW · INDEX · DOMAIN 이름 | 괄호 안 정의 · ADD · CASCADE | DROP VIEW 성적요약 CASCADE; |
→ 2024년 2회 3번의 빈칸 넷(VALUES · SELECT · FROM · SET)은 전부 이 표의 둘째 · 셋째 칸이다. INSERT 는 INTO 와 VALUES, UPDATE 는 SET, DELETE 는 FROM — 동사가 정해지면 나머지 칸이 정해진다.
CREATE TABLE 안의 제약은 다섯이고, 각각 막는 것이 다르다. PRIMARY KEY 는 중복과 NULL 을, UNIQUE 는 중복을, NOT NULL 은 NULL 을, CHECK 는 조건 밖의 값을, FOREIGN KEY 는 부모 표에 없는 값을 막는다. 문제가 「값의 범위」「조건」을 말하면 CHECK, 「다른 표를 참조」를 말하면 FOREIGN KEY 다.
외래키 한 줄은 여섯 토막이 정해진 순서로 온다. CONSTRAINT 이름 FOREIGN KEY (내 열) REFERENCES 부모표 (부모 열). 2026년 1회 18번은 이 여섯 토막 중 다섯을 빈칸으로 뚫었다. 괄호 두 개 중 앞은 자식, 뒤는 부모다.
CHECK 는 열 정의에 붙을 수도 있고 도메인에 붙을 수도 있다. 2026년 2회 19번의 CREATE DOMAIN SEASON AS VARCHAR(6) CHECK (VALUE IN (…)) 에서 VALUE 는 그 도메인에 들어올 값을 가리키는 예약어다. 훈련 1번은 같은 CHECK 를 열에 붙인 꼴이라 급여 INT CHECK (급여 >= 0) 처럼 열 이름을 쓴다.
지우는 말은 셋이다. DELETE 는 행을 지우고 표는 남기며, TRUNCATE 는 행 전부를 비우되 되돌릴 수 없는 DDL 이고, DROP 은 표 자체를 없앤다. 「어느 행」이 있으면 DELETE, 「표를」이면 DROP 이다.
DROP 뒤의 CASCADE 와 RESTRICT 는 의존하는 객체가 있을 때의 태도다. CASCADE 는 뷰 · 제약처럼 그 표에 매달린 것까지 같이 지우고, RESTRICT 는 매달린 것이 있으면 지우기를 거부한다. 2023년 2회 2번이 「연쇄적으로 함께 제거」라고 했으니 CASCADE 다.
되돌리는 말은 COMMIT 과 ROLLBACK 이다. ROLLBACK 은 마지막 COMMIT 이후만 취소하므로, 훈련 5번처럼 COMMIT 을 사이에 두면 그 앞의 INSERT 는 살아남는다. GRANT 로 준 권한을 거두는 것은 ROLLBACK 이 아니라 REVOKE 다.
왜 이걸 하나 — 문장을 끝까지 적는 연습이다. 세미콜론과 따옴표까지 답 칸에 적는다.
작성 문제는 답 칸에 문장을 끝까지 쓴 뒤 정답을 연다. 키워드 · 따옴표 · 괄호 · 세미콜론 중 하나라도 다르면 틀렸다를 누른다. 시험장 채점이 그렇다.
학생 테이블에서 이름이 '민수'인 튜플을 삭제하는 SQL문을 작성하시오. (구문 끝에 세미콜론 포함)
DELETE FROM 학생 WHERE 이름 = '민수';학생 테이블(학번, 이름, 학년, 과목, 전화번호)에 학번 98170823, 이름 '한국산', 3학년, '경영학개론', '050-1234-1234'인 학생을 삽입하는 SQL을 작성하시오.
INSERT INTO 학생 VALUES(98170823, '한국산', 3, '경영학개론', '050-1234-1234');뷰(VIEW)를 제거할 때, 그 뷰를 참조하는 다른 뷰나 제약조건까지 연쇄적으로 함께 제거하는 DROP 옵션은?
다음 SQL문의 괄호 ①부터 ④에 들어갈 키워드를 순서대로 쓰시오.
다음 조건을 만족하도록 PLAYER 테이블의 외래키 제약 조건을 완성하시오.
외래키 제약 조건의 이름은 TEAM_TF이다.
PLAYER 테이블의 TEAM_ID가 외래키다.
TEAM 테이블의 TEAM_ID2를 참조한다.
다음 SQL문의 빈칸 ①에 들어갈 키워드를 쓰시오.
사용자 '김기사'에게 학생 테이블의 SELECT 권한을 부여하되, 김기사가 그 권한을 다른 사용자에게도 부여할 수 있도록 하는 SQL문을 작성하시오.
GRANT SELECT ON 학생 TO 김기사 WITH GRANT OPTION;REVOKE SELECT ON 학생 FROM 김기사; (연쇄 회수는 CASCADE). GRANT는 TO, REVOKE는 FROM — 짝이 바뀌면 오답.학생 테이블에서 이름이 '홍길동'인 학생의 학년을 4로 변경하는 SQL문을 작성하시오.
UPDATE 학생 SET 학년 = 4 WHERE 이름 = '홍길동';왜 이걸 하나 — 문장 문제는 아는데 깎이는 자리가 정해져 있다.
| 자리 | 새는 꼴 | 적는 법 | 기출 |
|---|---|---|---|
| 전치사 | UPDATE … FROM, DELETE … INTO, GRANT … FROM | INSERT INTO · DELETE FROM · UPDATE 표 SET · GRANT TO · REVOKE FROM | 2024-2회 3번 · 예상 2회 11번 |
| 따옴표 | 문자열을 큰따옴표로, 숫자를 따옴표로 | 문자열만 작은따옴표. 숫자는 그대로 | 2023-2회 1번 · 2023-1회 13번 |
| 세미콜론 | 문장 끝을 비운다 | 문제가 「세미콜론 포함」이라 하면 반드시, 아니어도 붙이는 쪽이 안전 | 2023-1회 13번 |
| 열 목록과 값 순서 | INSERT 의 값 순서를 표 순서와 다르게 | 열 목록을 적었으면 그 순서로, 안 적었으면 표의 열 순서로 | 2023-2회 1번 |
| 키워드 짝 | FOREIGN 만 쓰고 KEY 를 빼거나, REFERENCES 를 REFERENCE 로 | FOREIGN KEY · PRIMARY KEY 는 두 낱말, REFERENCES 는 s 까지 | 2026-1회 18번 |
| 괄호 안팎 | 외래키의 자식 열과 부모 열을 바꾼다 | 앞 괄호 = 내 열, 뒤 괄호 = 부모 열 | 2026-1회 18번 |
| 옵션 낱말 | CASCADE 를 CASCADING 으로, WITH GRANT OPTION 을 빼먹는다 | 문제가 「다른 사용자에게도 부여」라고 하면 WITH GRANT OPTION 까지 | 2023-2회 2번 · 예상 1회 11번 |
작성 문제는 한 문장이 곧 답이라 부분 점수가 없다고 보고 쓴다. 빈칸 문제는 칸마다 점수가 갈리므로 모르는 칸도 비우지 않는다.
왜 이걸 하나 — 기출에 아직 안 나온 짝을 미리 풀어 둔다. 제약 다섯 · REVOKE · ALTER · COMMIT 이다.
5문항은 02절 카드의 문장 중 기출에 없던 것들이다. 정답은 전부 sqlite 로 실행해 확인했고, GRANT · REVOKE 만 sqlite 에 없어 표준 문법으로 대조했다.
다음 SQL문의 괄호 ①부터 ④에 들어갈 키워드를 순서대로 쓰시오. 사번은 기본키, 부서코드는 부서 테이블의 부서코드를 참조하며, 급여는 0 이상이어야 한다.
학생 테이블에서 학년이 4인 학생을 모두 삭제하는 SQL문과, 학생 테이블 자체를 삭제하는 SQL문을 각각 쓰시오.
사용자 김기사에게 부여했던 학생 테이블의 SELECT 권한을 회수하는 SQL문을 쓰시오.
다음 SQL문의 괄호 ①과 ②에 들어갈 키워드를 쓰시오. 학생 테이블에 이메일 열을 추가하고, 이름 열에 대해 인덱스 idx_name 을 만든다.
다음 문장을 순서대로 실행한 뒤 학생 테이블의 행 수를 쓰시오. 처음 학생 테이블에는 3행이 있다.
왜 이걸 하나 — 아래를 안 보고 적을 수 있어야 문장 문제가 끝난다.