컴활 1급 필기 3과목 네 번째 단원, SQL(Structured Query Language) 기초임. DDL · DML · DCL · TCL 분류와 SELECT 6절 + JOIN 4종 매칭이 핵심. 매회 2~3문제 단골이고, 특히 "SELECT가 DDL인가 DML인가" / "WHERE vs HAVING 차이" / "INNER vs OUTER JOIN" 함정이 매년 빠지지 않음.
SQL 명령 4 분류 -- DDL · DML · DCL · TCL ★★
SQL 명령은 목적에 따라 4가지 그룹으로 나뉨.
CREATE, ALTER, DROP, TRUNCATESELECT, INSERT, UPDATE, DELETEGRANT, REVOKECOMMIT, ROLLBACK, SAVEPOINTDDL 예시
CREATE TABLE 학생 (
학번 INT PRIMARY KEY,
이름 VARCHAR(20) NOT NULL,
학과 VARCHAR(30)
);
ALTER TABLE 학생 ADD COLUMN 입학년도 INT;
DROP TABLE 학생;
DML 예시
INSERT INTO 학생 VALUES (101, '홍길동', '컴퓨터');
SELECT 이름, 학과 FROM 학생 WHERE 학번 = 101;
UPDATE 학생 SET 학과 = '경영' WHERE 학번 = 101;
DELETE FROM 학생 WHERE 학번 = 101;
DCL 예시
GRANT SELECT, INSERT ON 학생 TO 사용자A;
REVOKE INSERT ON 학생 FROM 사용자A;
함정 1: SELECT는 DML — 조회도 데이터 조작에 포함됨. DDL이 아님. 매년 단골 함정.
함정 2: TRUNCATE vs DELETE 차이 — TRUNCATE는 DDL (전체 삭제·구조 초기화·롤백 X), DELETE는 DML (조건 삭제·롤백 O). DELETE 후 AUTO_INCREMENT는 유지, TRUNCATE 후 리셋.
함정 3: DROP vs DELETE — DROP은 테이블 자체 삭제 (DDL), DELETE는 데이터만 삭제 (DML, 구조 유지).
SELECT 6절 -- 작성 순서와 처리 순서 ★★★
SELECT 문은 6개 절로 구성됨. 작성 순서와 DBMS 처리 순서가 다름. 매년 출제.
예시 — 학과별 학생 수 (10명 초과만, 인원 내림차순)
SELECT 학과, COUNT(*) AS 인원
FROM 학생
WHERE 입학년도 >= 2024
GROUP BY 학과
HAVING COUNT(*) > 10
ORDER BY 인원 DESC;
처리 흐름 (DBMS 내부)
FROM 학생— 테이블 가져옴WHERE 입학년도 >= 2024— 행 필터링GROUP BY 학과— 학과별 그룹HAVING COUNT(*) > 10— 그룹 필터링SELECT 학과, COUNT(*)— 최종 출력 열ORDER BY 인원 DESC— 정렬
WHERE vs HAVING ★
- WHERE = 행 단위 조건 (GROUP BY 전)
- HAVING = 그룹 단위 조건 (GROUP BY 후)
- 집계함수 (
COUNT,SUM,AVG등) 는 HAVING에만 쓸 수 있음
함정 1: WHERE에 집계함수 사용 → 오류 — WHERE COUNT(*) > 5 는 문법 오류. 집계는 HAVING에서.
함정 2: GROUP BY 없이 HAVING 사용 — 일부 DBMS는 허용하지만, 원칙적으로는 GROUP BY와 짝. 시험에선 짝으로 출제됨.
함정 3: ORDER BY 기본은 오름차순(ASC) — 내림차순은 DESC 명시. 매년 기본 정렬 방향 단골 출제.
함정 4: * (애스터리스크) — 전체 열을 의미. SELECT * FROM 학생 은 모든 열 조회.
JOIN 4종 -- INNER · LEFT · RIGHT · FULL OUTER ★
두 테이블을 공통 키로 연결하는 명령. 4종이 매년 출제됨.
예시 — 학생과 학과 JOIN
-- INNER JOIN (학과가 지정된 학생만)
SELECT 학생.이름, 학과.학과명
FROM 학생
INNER JOIN 학과 ON 학생.학과코드 = 학과.코드;
-- LEFT JOIN (모든 학생, 학과 없으면 NULL)
SELECT 학생.이름, 학과.학과명
FROM 학생
LEFT JOIN 학과 ON 학생.학과코드 = 학과.코드;
함정 1: OUTER 키워드 생략 가능 — LEFT JOIN = LEFT OUTER JOIN. 시험에선 둘 다 같은 것으로 나옴.
함정 2: Access는 FULL OUTER JOIN 미지원 — Access는 LEFT·RIGHT·INNER만. FULL OUTER는 UNION 으로 우회. 단, 시험 개념상 4종 모두 출제.
함정 3: CROSS JOIN (카티시안 곱) — 조건 없이 모든 조합을 만들어냄. 학생 × 학과 모든 쌍. 실무 X, 시험에 가끔 등장.
트랜잭션 -- COMMIT · ROLLBACK · SAVEPOINT
여러 SQL 문을 하나의 단위로 처리. 원자성(All or Nothing) 보장.
예시
BEGIN TRANSACTION;
UPDATE 계좌 SET 잔액 = 잔액 - 10000 WHERE 계좌번호 = 'A';
UPDATE 계좌 SET 잔액 = 잔액 + 10000 WHERE 계좌번호 = 'B';
COMMIT; -- 둘 다 성공해야 확정
-- 중간 실패 시 ROLLBACK
함정 1: TRUNCATE 후 ROLLBACK 불가능 — TRUNCATE는 DDL 이므로 자동 COMMIT되어 롤백할 수 없음. DELETE는 롤백 가능.
함정 2: DDL 자동 COMMIT — CREATE·ALTER·DROP 같은 DDL은 실행 즉시 자동 COMMIT. 트랜잭션에 영향 받지 않음.
함정 3: 트랜잭션 ACID — Atomicity(원자성)·Consistency(일관성)·Isolation(고립성)·Durability(지속성). 4가지 다 묻는 보기 단골.
⚠️ 이 챕터 함정 BEST 7
- SELECT = DML — DDL 아님 (CREATE·ALTER·DROP이 DDL)
- TRUNCATE = DDL — 롤백 불가, AUTO_INCREMENT 리셋
- WHERE = 행 / HAVING = 그룹 — 집계함수는 HAVING에만
- SELECT 처리 순서 — FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
- ORDER BY 기본 = ASC — DESC는 명시
- OUTER 생략 가능 — LEFT JOIN = LEFT OUTER JOIN
- DDL 자동 COMMIT — DDL 실행 시 트랜잭션 자동 확정
✅ 셀프 체크 7
- [ ] DDL·DML·DCL·TCL 4 분류와 대표 명령을 즉답?
- [ ] SELECT 6절의 작성 순서와 처리 순서를 그릴 수 있나?
- [ ] WHERE와 HAVING의 차이를 1줄로 설명?
- [ ] INNER·LEFT·RIGHT·FULL OUTER JOIN 결과 매칭?
- [ ] TRUNCATE와 DELETE의 차이 3가지?
- [ ] ORDER BY 기본 정렬 방향과 DESC 명시 방법?
- [ ] COMMIT·ROLLBACK·SAVEPOINT 동작?
한눈에 정리
📝 기출 변형 5선
5개년 컴활 1급 필기 기출 패턴 기반. 각 문제 카드 아래 정답 확인 펼쳐 보기.
문 1. SQL 명령 분류
1번 정답 확인
정답: ④
CREATE는 DDL (Data Definition Language). 테이블·인덱스 구조 정의 명령. DML은 데이터 조작 으로 SELECT·INSERT·UPDATE·DELETE 4종. 매년 단골 — SELECT가 DML이라는 점도 함께 출제됨.
문 2. WHERE vs HAVING
2번 정답 확인
정답: ③
집계함수는 WHERE에 쓸 수 없음. WHERE는 행 필터링 단계라 아직 그룹이 만들어지지 않아 집계가 불가능. 집계함수는 HAVING에서만 사용 가능 (GROUP BY 이후). ①②④ 모두 옳음. 매년 단골 함정.
문 3. SELECT 처리 순서
3번 정답 확인
정답: ②
DBMS 처리 순서는 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. 작성 순서와 다름 (작성은 SELECT부터). 테이블 가져온 후 행 필터 → 그룹화 → 그룹 필터 → 출력 열 선택 → 정렬. 매년 출제.
문 4. JOIN 종류
4번 정답 확인
정답: ②
LEFT OUTER JOIN = 왼쪽 전체 + 오른쪽 매칭. 매칭되는 행이 없으면 오른쪽 컬럼이 NULL로 채워짐. ① INNER JOIN, ③ RIGHT OUTER 비슷하지만 왼쪽 무시는 X, ④ CROSS JOIN. OUTER 키워드는 생략 가능 (LEFT JOIN = LEFT OUTER JOIN).
문 5. TRUNCATE vs DELETE
5번 정답 확인
정답: ②
정반대로 옳음. TRUNCATE는 DDL이라 자동 COMMIT 되어 롤백 불가, DELETE는 DML이라 ROLLBACK 가능. 보기는 둘을 바꿔서 함정. ①③④ 모두 옳음. TRUNCATE 후 AUTO_INCREMENT 리셋, DELETE 후 유지가 또 다른 차이.
🔗 시리즈 링크
- [Ch3-2편] 관계형 DB·키 5종·관계 3종 → 02-8-2-관계형DB키/
- [Ch3-3편] 정규화·이상 현상 → 02-8-3-정규화/
- [Ch3-4편] SQL 기초 — 현재 글
- [Ch3-5편] Access 객체·테이블·데이터 형식 → 02-8-5-Access객체테이블/
🔥 jit.camp · 컴활 1급 합격 가이드 · 2026 최신 출제 반영