2과목: SQL 기본 및 활용 요약

SQLD 시험 배점의 80%를 차지하는 핵심 과목 — 10개 챕터 개념 정리

1장. SQL 기본

DDL (Data Definition Language)

명령어설명
CREATE테이블/뷰/인덱스 등 객체 생성
ALTER컬럼 추가(ADD), 수정(MODIFY/ALTER), 삭제(DROP COLUMN), 이름 변경
DROP객체 삭제 (CASCADE 옵션으로 참조 객체도 함께 삭제 가능)
TRUNCATE전체 데이터 삭제 (구조 유지, 롤백 불가, DDL이므로 자동커밋)
RENAME테이블 이름 변경

DDL은 자동 커밋(Auto Commit)됨 — 실행 즉시 반영, ROLLBACK 불가 (Oracle 기준)

DML (Data Manipulation Language)

명령어설명
SELECT데이터 조회 (FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY)
INSERT데이터 삽입 (컬럼 생략 시 전체 컬럼 순서대로 값 입력)
UPDATE데이터 수정 (SET절 + WHERE절, WHERE 생략 시 전체 수정)
DELETE데이터 삭제 (로그 기록, 롤백 가능, WHERE 생략 시 전체 삭제)
MERGE조건에 따라 INSERT/UPDATE/DELETE를 한 문장으로 수행

DCL / TCL

분류명령어설명
DCLGRANT권한 부여 (WITH GRANT OPTION: 재부여 가능)
REVOKE권한 회수 (CASCADE: 재부여된 권한까지 회수)
TCLCOMMIT트랜잭션 확정 (변경사항 영구 반영)
ROLLBACK트랜잭션 취소 (마지막 COMMIT 시점으로 복구)
SAVEPOINT중간 저장점 설정 (ROLLBACK TO로 해당 지점까지만 복구)

2장. WHERE절

비교 / 논리 연산자

연산자설명
=, <>, <, >기본 비교 연산자 (<> 는 != 와 동일)
BETWEEN A AND BA 이상 B 이하 (경계값 포함)
IN (값1, 값2, ...)목록 중 하나와 일치 (OR 조건의 축약)
LIKE패턴 매칭 (%: 0개 이상, _: 정확히 1개)
IS NULL / IS NOT NULLNULL 비교는 반드시 IS NULL 사용 (= NULL은 항상 FALSE)

AND/OR 우선순위와 NULL 주의

  • AND가 OR보다 우선 — 괄호로 명확히 구분할 것
  • • NULL과의 모든 비교 연산 결과는 UNKNOWN (TRUE도 FALSE도 아님)
  • • NOT IN 안에 NULL이 포함되면 결과가 항상 공집합
  • • NULL + 숫자 = NULL, NULL과의 연산 결과는 항상 NULL

3장. 함수

문자열 함수

함수설명
SUBSTR(s, m, n)문자열 s의 m번째부터 n개 추출 (1부터 시작)
LPAD / RPAD왼쪽/오른쪽으로 지정 문자 채워서 길이 맞춤
TRIM양쪽 공백 제거 (LEADING/TRAILING/BOTH 옵션)
REPLACE(s, a, b)문자열 s에서 a를 b로 치환
LENGTH / LEN문자열 길이 (Oracle: LENGTH, SQL Server: LEN)

숫자 함수

함수설명
ROUND(n, d)소수점 d+1자리에서 반올림
TRUNC(n, d)소수점 d+1자리에서 버림 (SQL Server: 없음, ROUND 3번째 인자 사용)
CEIL / FLOOR올림(큰 정수) / 내림(작은 정수) (CEIL(-1.5) = -1)
MOD(a, b)a를 b로 나눈 나머지

날짜 함수

함수설명
SYSDATE / GETDATE()현재 날짜/시간 (Oracle / SQL Server)
ADD_MONTHS(d, n)날짜 d에 n개월 더하기
MONTHS_BETWEEN(d1, d2)두 날짜 사이의 개월 수 (d1 - d2)
EXTRACT(YEAR FROM d)날짜에서 년/월/일 추출

변환 함수

함수설명
TO_CHAR숫자/날짜를 문자열로 변환 (포맷 지정 가능)
TO_NUMBER문자열을 숫자로 변환 (Oracle)
TO_DATE문자열을 날짜로 변환 (포맷 지정 필수)

암시적 형변환보다 명시적 형변환을 권장 — 성능과 안정성 모두 향상

NULL 관련 함수

함수설명
NVL(a, b)a가 NULL이면 b 반환 (SQL Server: ISNULL)
NVL2(a, b, c)a가 NULL이 아니면 b, NULL이면 c 반환
NULLIF(a, b)a = b이면 NULL, 다르면 a 반환
COALESCE(a, b, ...)인자 중 첫 번째 NULL이 아닌 값 반환 (표준 SQL)

CASE / DECODE

  • CASE — 표준 SQL, 모든 DBMS 사용 가능 (Simple / Searched 두 형태)
  • DECODE — Oracle 전용, 간단한 등치 비교에 적합
  • • CASE WHEN 조건 THEN 결과 [ELSE 기본값] END — ELSE 생략 시 NULL 반환

4장. GROUP BY와 집계함수

집계함수와 NULL

함수NULL 처리
COUNT(*)NULL 포함 전체 행 수
COUNT(col)NULL 제외한 행 수
SUM / AVGNULL 제외하고 계산 (AVG 분모에서도 제외됨)
MAX / MINNULL 제외하고 최대/최소 반환

GROUP BY / HAVING

  • • GROUP BY 절에 없는 컬럼은 SELECT에서 집계함수로만 사용 가능
  • • HAVING은 그룹에 대한 조건 (WHERE는 행에 대한 조건)
  • • WHERE → GROUP BY → HAVING → SELECT → ORDER BY 순서로 실행

ROLLUP / CUBE / GROUPING SETS

함수설명
ROLLUP(A, B)(A,B) → (A) → () 단계적 소계 + 총계 (n+1개 그룹)
CUBE(A, B)가능한 모든 조합의 소계 (2^n개 그룹)
GROUPING SETS원하는 그룹 조합만 명시적으로 지정

GROUPING(col) 함수: 소계/총계로 만들어진 NULL이면 1, 원래 데이터면 0 반환

5장. JOIN

JOIN 유형 비교

유형설명
INNER JOIN양쪽 테이블 모두 일치하는 행만 반환
LEFT OUTER JOIN왼쪽 테이블 전체 + 오른쪽 일치 행 (불일치 시 NULL)
RIGHT OUTER JOIN오른쪽 테이블 전체 + 왼쪽 일치 행 (불일치 시 NULL)
FULL OUTER JOIN양쪽 모두 보존 (불일치 시 NULL로 채움)
CROSS JOIN카테시안 곱 (M x N 행 생성, 조건 없음)
NATURAL JOIN같은 이름의 컬럼으로 자동 조인 (ON절 불필요, 중복 컬럼 하나만 표시)
SELF JOIN같은 테이블을 별칭으로 구분하여 자기 자신과 조인

ON절 vs WHERE절 차이

  • INNER JOIN: ON절과 WHERE절에 조건을 넣는 결과가 동일
  • OUTER JOIN: ON절 조건은 조인 전 필터, WHERE절 조건은 조인 후 필터 → 결과가 달라짐
  • • OUTER JOIN에서 보존 테이블의 조건을 WHERE에 넣으면 INNER JOIN과 같아질 수 있음

6장. 서브쿼리

서브쿼리 유형

유형위치특징
스칼라 서브쿼리SELECT절반드시 1행 1열 반환 (아니면 에러)
인라인 뷰FROM절서브쿼리 결과를 임시 테이블처럼 사용
중첩 서브쿼리WHERE절조건 비교에 사용 (단일행/다중행/다중컬럼)

상관 vs 비상관 서브쿼리

  • 비상관 서브쿼리 — 메인 쿼리와 독립적, 서브쿼리 먼저 실행 후 결과를 메인에 전달
  • 상관 서브쿼리 — 메인 쿼리의 컬럼을 참조, 메인 쿼리의 각 행마다 반복 실행

EXISTS / IN / ANY / ALL

연산자설명
EXISTS서브쿼리에 결과가 1건이라도 있으면 TRUE (상관 서브쿼리와 함께 사용)
IN서브쿼리 결과 목록 중 하나와 일치하면 TRUE
ANY (= SOME)서브쿼리 결과 중 하나라도 조건을 만족하면 TRUE
ALL서브쿼리 결과 전부 조건을 만족해야 TRUE

7장. 집합연산자

연산자설명
UNION합집합 (중복 제거, 정렬 발생)
UNION ALL합집합 (중복 포함, 정렬 없음, 성능 우수)
INTERSECT교집합 (양쪽 모두 존재하는 행)
MINUS / EXCEPT차집합 (Oracle: MINUS, SQL Server: EXCEPT)

컬럼 수와 데이터 타입이 일치해야 함. ORDER BY는 마지막 쿼리에서만 사용 가능.

8장. 윈도우 함수

순위 함수

함수동일 값 처리예시
RANK동순위 허용, 다음 순위 건너뜀1, 2, 2, 4
DENSE_RANK동순위 허용, 다음 순위 연속1, 2, 2, 3
ROW_NUMBER동순위 없이 고유 번호 부여1, 2, 3, 4

행 순서 / 비율 함수

함수설명
LAG(col, n)현재 행 기준 n행 이전 값 (기본 1)
LEAD(col, n)현재 행 기준 n행 이후 값 (기본 1)
FIRST_VALUE파티션 내 첫 번째 값
LAST_VALUE파티션 내 마지막 값 (RANGE 기본 프레임 주의)
NTILE(n)파티션을 n개 그룹으로 균등 분할
RATIO_TO_REPORT파티션 내 해당 값의 비율 (합계 대비)

ROWS vs RANGE

  • ROWS — 물리적 행 수 기준으로 프레임 지정
  • RANGE — 논리적 값 범위 기준 (동일 값은 같은 프레임에 포함)
  • • 기본값: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  • • LAST_VALUE 사용 시 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING 지정 필요

9장. 계층형 쿼리

Oracle 계층형 쿼리 구문

키워드설명
START WITH루트(시작) 노드 조건 지정
CONNECT BY PRIOR부모-자식 관계 정의 (PRIOR 위치에 따라 순방향/역방향)
LEVEL현재 노드의 깊이 (루트 = 1)
SYS_CONNECT_BY_PATH루트부터 현재 노드까지의 경로를 문자열로 반환

순방향 vs 역방향

  • 순방향 (Top-Down) — CONNECT BY PRIOR 자식ID = 부모ID (부모 → 자식으로 탐색)
  • 역방향 (Bottom-Up) — CONNECT BY PRIOR 부모ID = 자식ID (자식 → 부모로 탐색)
  • • PRIOR는 이미 읽은 행(부모)을 가리킨다고 이해하면 쉬움

10장. 기타

뷰(View) / 인덱스

  • — 논리적 테이블 (데이터 저장 X), 보안/편의를 위해 사용
  • • 단순 뷰는 DML 가능, 복합 뷰(JOIN, GROUP BY, DISTINCT)는 DML 제한
  • 인덱스 — 검색 속도 향상 (B-Tree가 기본), DML 성능은 저하될 수 있음
  • • 인덱스 스캔 유형: Range Scan, Unique Scan, Full Scan, Skip Scan

제약조건 (Constraints)

제약조건설명
PRIMARY KEYUNIQUE + NOT NULL (테이블당 1개, 자동 인덱스 생성)
FOREIGN KEY다른 테이블의 PK/UK 참조 (참조 무결성)
UNIQUE중복 불가 (NULL은 허용, 여러 개 가능)
CHECK값의 범위/조건 제한 (예: salary > 0)
NOT NULLNULL 입력 불가 (Oracle에서 ALTER 시 MODIFY로 변경)

트랜잭션과 ACID

특성설명
Atomicity원자성 — 전부 성공하거나 전부 실패
Consistency일관성 — 트랜잭션 전후 데이터 무결성 유지
Isolation격리성 — 다른 트랜잭션과 독립적 수행
Durability영속성 — 커밋된 결과는 영구 보존

Oracle vs SQL Server DDL 차이

  • • Oracle: DDL 실행 시 자동 COMMIT (ROLLBACK 불가)
  • • SQL Server: DDL도 트랜잭션 내에서 ROLLBACK 가능

PIVOT / UNPIVOT

  • PIVOT — 행 → 열 변환 (집계함수 필수: SUM, COUNT 등)
  • UNPIVOT — 열 → 행 변환 (PIVOT의 반대 연산)

Top-N 쿼리

방법설명
ROWNUM (Oracle)WHERE ROWNUM <= N (ORDER BY 전에 부여되므로 인라인 뷰 필요)
FETCH FIRST (표준 SQL)ORDER BY 후 FETCH FIRST N ROWS ONLY (OFFSET 지원)

ROWNUM = 1은 가능하지만 ROWNUM = 2는 불가 (1번 행이 먼저 할당되어야 하므로)

개념을 익혔다면 모의고사로 실력을 확인해보세요