공기업/공공기관 통계직렬 DB 전공시험 대비
1. 통계직렬 DB 출제 비중 분석
| 영역 | 출제 비중 | 중요도 | 비고 |
| SQL 응용 | 매우 높음 (50%+) | ★★★ | Join, Subquery, 집계함수(Group By) |
| 데이터 모델링 | 높음 | ★★★ | ERD 해석, 식별/비식별 관계, 엔티티 |
| 정규화 | 보통 | ★★ | 이상 현상, 1~3NF, BCNF 개념 |
| 트랜잭션 | 낮음 | ★ | ACID 개념 위주 (상세 기법은 드묾) |
| 빅데이터/DW | 보통 | ★★ | 데이터 웨어하우스, OLAP, 데이터 마이닝 |
2. 통계직렬이라면 반드시 잡아야 할 핵심 (Priority)
① SQL - 통계 쿼리의 핵심
통계직은 데이터를 추출하고 가공하는 능력이 본질이다.
- Window Function (순위 함수): RANK(), DENSE_RANK(), ROW_NUMBER()는 통계 쿼리 단골이다.
- JOIN: Self Join, Outer Join의 결과 행(Row) 수를 계산하는 문제.
- NULL 처리: NVL, COALESCE 등 통계 연산 시 NULL이 미치는 영향.
② 데이터 모델링과 ERD ★★★
통계 분석을 위해 데이터를 어떻게 설계했는지 읽어낼 줄 알아야 한다.
- ERD(Entity-Relationship Diagram) 기호: 1:1, 1:N, N:M 관계 해석.
- 식별 관계 vs 비식별 관계: 부모 키를 자식이 PK로 쓰는지, 일반 속성으로 쓰는지 구분.
③ 데이터 웨어하우스(DW) 및 OLAP ★★
일반 CS 직렬보다 통계직에서 더 자주 묻는 이론이다.
- OLAP 연산: Roll-up(요약), Drill-down(상세), Pivoting(축 변경), Slicing/Dicing.
- 스키마 구조: Star Schema(중심에 Fact Table), Snowflake Schema.
3. 트랜잭션/정규화는 어디까지 공부하나?
- 트랜잭션: 계산 문제나 병행 제어의 상세 알고리즘(2PL 등)보다는 ACID의 정의와 Commit/Rollback의 의미 정도만 챙겨라.
- 정규화: 통계 DB는 성능을 위해 **반정규화(De-normalization)**를 하기도 한다. 정규화의 기본 개념과 반정규화를 왜 하는지(조인 감소, 조회 성능 향상)를 연결해서 이해해라.
통계직은 "데이터를 어떻게 잘 뽑아내고(SQL), 어떤 구조로 저장되어 있는가(Modeling)"가 핵심이다. 트랜잭션의 깊은 이론에 매몰되어 시간을 낭비하지 마라.
DB 핵심요약
- 관계 데이터 모델(관계대수)
- 정규화(Normalization)
- SQL
- 트랜잭션
1. 관계 데이
Ⅰ. SQL 응용: 데이터 추출의 마법 ★★★
통계직 시험의 50% 이상은 SQL이다. 단순 문법을 넘어 함정을 파악해야 한다.
1. 집계 함수와 NULL의 역설
- COUNT(*) vs COUNT(col): COUNT(*)는 모든 행을 세지만, COUNT(col)는 해당 컬럼이 NULL인 행을 제외한다.
- AVG의 함정: AVG(col)는 SUM(col) / COUNT(col)이다. 즉, NULL 값은 분모에서도 제외된다. 0으로 치환해서 평균을 내야 한다면 AVG(NVL(col, 0))를 써야 한다.
2. 고급 윈도우 함수 (통계직 변별력 문제)
- PARTITION BY: 전체 테이블이 아닌 특정 그룹 내에서 순위나 집계를 계산할 때 사용 (통계적 그룹핑의 핵심).
- LEAD / LAG: 현재 행을 기준으로 이전(LAG) 또는 다음(LEAD) 행의 값을 가져옴. 전년 대비 증감률 계산 등 통계 분석 쿼리에 빈출.
3. JOIN의 행(Row) 수 계산
- Cartesian Product (Cross Join): 조건 없이 조인할 경우 결과 행 수는 $N \times M$.
- Outer Join: 매칭되는 데이터가 없는 쪽도 결과에 포함되며, 빈자리는 NULL로 채워짐을 잊지 마라.
Ⅱ. 데이터 모델링 및 설계 심화 ★★★
1. 관계의 종류와 특징
- 1:1 관계: 실제 DB에서는 드물며, 주로 보안상 이유로 테이블을 분리할 때 사용.
- N:M 관계: 관계형 DB에서 직접 구현 불가. 반드시 **교차 엔티티(Associative Entity)**를 생성하여 1:N 관계로 해소해야 함.
- 식별 vs 비식별: * 식별: 부모가 없으면 자식이 존재할 수 없는 강한 종속성 (실선).
- 비식별: 부모 없이도 자식이 존재 가능하거나, 약한 종속성 (점선).
2. 정규화(Normalization) 상세 가이드
- 1NF: 원자값(Atomic Value)이 아닌 '다중값' 혹은 '복합값'을 제거.
- 2NF: 부분 함수 종속 제거. (기본키가 복합키[A+B]일 때, B에만 종속되는 속성을 분리).
- 3NF: 이행 함수 종속 제거 ($A \rightarrow B$ 이고 $B \rightarrow C$ 일 때 $A \rightarrow C$ 가 성립하는 관계 분리).
- BCNF: 모든 결정자가 후보키가 되도록 분리 (함수 종속성 $X \rightarrow Y$ 에서 $X$ 가 후보키가 아닌 경우).
3. 통계직의 필살기: 반정규화(Denormalization)
- 목적: 데이터 조회(SELECT) 성능 극대화.
- 기법: 테이블 통합, 테이블 분할(수직/수평), 중복 컬럼 추가, 파생 컬럼 추가(미리 계산된 합계/평균 저장).
Ⅲ. 트랜잭션 및 회복/병행 제어 ★★
통계직에서는 상세 알고리즘보다 '상태 변화'와 '이상 현상' 위주로 출제된다.
1. 트랜잭션의 4특성(ACID) 심화
- Consistency(일관성): '무결성 제약조건'을 유지하는 것이 핵심
- Isolation(고립성): 연산 중인 데이터에 다른 트랜잭션이 접근하지 못하게 하는 'Locking'의 근거.
트랜잭션은 데이터베이스의 상태를 변화시키는 하나의 논리적 작업 단위다.
| 특징 | 설명 | 비고 |
| 원자성 (Atomicity) | 트랜잭션의 연산은 모두 반영되거나, 전혀 반영되지 않아야 함 (All or Nothing) | 회복(Recovery) 관련 |
| 일관성 (Consistency) | 실행 완료 후 DB는 언제나 일관된 상태를 유지해야 함 | 무결성 제약 조건 등 |
| 고립성 (Isolation) | 실행 중인 트랜잭션에 다른 트랜잭션이 끼어들 수 없음 | 병행 제어 관련 |
| 영속성 (Durability) | 성공 완료된 결과는 시스템 장애가 발생해도 영구적으로 보존됨 | 회복 관련 |
2. 병행 제어 미비 시의 4대 문제 (암기 필수)
- Dirty Read: 커밋되지 않은 데이터를 읽음.
- Non-Repeatable Read: 한 트랜잭션 내에서 같은 쿼리를 두 번 보냈는데 결과가 다름 (중간에 누가 수정).
- Phantom Read: 한 트랜잭션 내에서 같은 쿼리를 두 번 보냈는데 없던 행이 나타남 (중간에 누가 삽입).
- Lost Update: 두 트랜잭션이 동시에 수정하여 한쪽의 결과가 사라짐.
3. 고립 수준(Isolation Level)과 이상 현상
| Level | Dirty Read | Non-Repeatable | Phantom Read |
| Read Uncommitted | 발생 | 발생 | 발생 |
| Read Committed | 방지 | 발생 | 발생 |
| Repeatable Read | 방지 | 방지 | 발생 |
| Serializable | 방지 | 방지 | 방지 |
Ⅳ. 데이터 웨어하우스(DW) 및 데이터 마이닝 ★★
1. DW의 특징
- 주제 지향성: 특정 기능이 아닌 주제(매출, 고객 등) 위주로 구성.
- 통합성: 여러 소스에서 온 데이터의 형식을 일치시킴.
- 시계열성: 과거부터 현재까지의 데이터를 보유 (Update보다는 Insert 위주).
- 비휘발성: 일단 적재되면 거의 변하지 않음.
2. 데이터 마이닝 기법
- 연관 분석(Association): "맥주를 사는 사람은 기저귀도 산다" (장바구니 분석).
- 분류(Classification): 기존 데이터를 바탕으로 새 데이터의 그룹 결정.
- 군집화(Clustering): 유사한 특성을 가진 데이터끼리 묶음 (정답지 없음).
Ⅴ. 관계대수 요약 (계산 문제 대비) ★★
- 일반 집합 연산자: 합집합($\cup$), 교집합($\cap$), 차집합($-$), 카디션 프로덕트($\times$).
- 순수 관계 연산자:
- Select($\sigma$): 행 추출 (WHERE 절).
- Project($\pi$): 열 추출 (SELECT 절).
- Join($\bowtie$): 테이블 결합.
- Division($\div$): 모든 조건을 충족하는 행 추출.
1. 정규화는 '도부이결' 순서와 각 단계에서 무엇을 제거하는지(부분/이행/결정자)를 매칭해라.
2. SQL 문제는 반드시 NULL이 포함된 집계 결과와 Outer Join의 행 개수를 꼼꼼히 계산해라.
3. 통계직은 **OLAP 연산(Roll-up/Drill-down)**의 개념 차이를 묻는 문제가 매년 나온다.
Ⅰ. 관계대수 (Relational Algebra) 완벽 정리 ★★★
관계대수는 원하는 데이터를 얻기 위해 **절차(How)**를 기술하는 언어다. 기호 자체가 문제로 나오니 반드시 숙지해라.
1. 순수 관계 연산자
| 연산자 | 기호 | 의미 | SQL 대응 | 특이사항 |
| Select | $\sigma$ | 조건에 맞는 튜플(행) 추출 | WHERE | 수평적 연산 |
| Project | $\pi$ | 선택한 속성(열) 추출 | SELECT | 수직적 연산, 중복 제거됨 |
| Join | $\bowtie$ | 공통 속성 기준 두 테이블 합병 | JOIN | 결과 차수 = $deg(A) + deg(B)$ |
| Division | $\div$ | 관련 튜플을 모두 가진 것 추출 | 없음 | "모든 ~에 대해" 조건 시 사용 |
2. 일반 집합 연산자
집합 연산(합, 교, 차)을 수행하려면 두 릴레이션이 **합병 가능(Union Compatible)**해야 한다. 즉, 차수(속성 수)가 같고 대응하는 속성의 도메인이 같아야 함을 의미한다.
- 합집합 ($\cup$): $R \cup S$. 중복된 튜플은 제거됨. 카디널리티 $ \le |R| + |S|$.
- 교집합 ($\cap$): $R \cap S$. 공통된 튜플만 추출.
- 차집합 ($-$): $R - S$. $R$에만 있고 $S$에는 없는 튜플 추출.
- 교차곱 ($\times$): $R \times S$. 모든 조합 생성(Cartesian Product). 결과 차수는 합, 카디널리티는 곱.
Ⅱ. 통계직 필수: 데이터 모델링 심화 보강 ★★★
단순 용어를 넘어 실무적인 설계 원칙을 묻는 문제가 통계직의 변별력을 가른다.
1. 키(Key)의 계층 구조
- 슈퍼키 (Super Key): 유일성 OK, 최소성 NO (예: 학번+이름+주소).
- 후보키 (Candidate Key): 유일성 OK, 최소성 OK. 기본키가 될 수 있는 후보들.
- 기본키 (Primary Key): 후보키 중 선정된 키. Null 불가, 중복 불가 (개체 무결성).
- 대체키 (Alternate Key): 후보키 중 기본키를 제외한 나머지.
- 외래키 (Foreign Key): 타 테이블의 기본키 참조. 참조 무결성과 직결.
2. 무결성 제약조건 (Integrity Constraints) ★★
- 개체 무결성: 기본키는 Null일 수 없고 중복될 수 없다.
- 참조 무결성: 외래키 값은 참조하는 테이블의 기본키 값과 같거나 Null이어야 한다.
- 도메인 무결성: 특정 속성 값은 정의된 범위(Domain) 내의 값이어야 한다.
Ⅲ. 통계직 특화: SQL 및 고급 집계 ★★★
통계직 시험의 백미는 데이터 가공이다. 아래 3가지는 무조건 나온다.
1. NULL 연산의 법칙
- $NULL + 100 = NULL$: NULL과의 산술 연산은 무조건 NULL이다.
- 비교 연산 시 col = NULL은 항상 False다. 반드시 IS NULL을 사용해야 한다.
- 통계 함수: AVG, SUM, MIN, MAX 등은 NULL을 무시하고 계산한다. 단, COUNT(*)만 행 개수를 모두 센다.
2. 윈도우 함수 (순위 부여 방식)
- ROW_NUMBER(): 1, 2, 3, 4 (동점자 무관 고유 번호)
- RANK(): 1, 2, 2, 4 (동점자 수만큼 건너뜀)
- DENSE_RANK(): 1, 2, 2, 3 (동점자 있어도 순위 유지)
3. 집합 연산자 (Set Operator)
- UNION: 합집합 (중복 제거, 내부 소트 발생).
- UNION ALL: 합집합 (중복 포함, 가장 빠름).
- INTERSECT: 교집합.
- MINUS / EXCEPT: 차집합.
Ⅳ. 데이터 웨어하우스(DW)와 분석 환경 ★★
통계직렬은 데이터를 어떻게 쌓고 보느냐가 중요하다.
- OLAP vs OLTP: * OLTP: 실시간 트랜잭션 처리 (은행 입출금).
- OLAP: 의사결정 지원을 위한 데이터 분석 (매출 추이).
- Star Schema: 중앙 Fact 테이블(수치)과 주변 Dimension 테이블(속성)로 구성. 조인이 단순하여 분석 속도가 빠름.
- Data Mart: DW로부터 특정 주제나 부서 중심으로 구축된 소규모 데이터 웨어하우스.
Ⅴ. 정규화(Normalization) 핵심 요약 (도-부-이-결) ★★★
- 1NF: 원자값이 아닌 것(반복 그룹) 제거.
- 2NF: 부분 함수 종속 제거 (기본키의 일부분에만 종속되는 속성 분리).
- 3NF: 이행 함수 종속 제거 ($A \rightarrow B, B \rightarrow C$ 관계에서 $C$ 분리).
- BCNF: 모든 결정자가 후보키가 되도록 설정 (강한 제3정규형).
시험지에 $\sigma_{성적 \ge 90}(학생)$ 같은 수식이 나오면 당황하지 마라. SELECT * FROM 학생 WHERE 성적 >= 90과 같은 의미다. 특히 Join의 결과 행 수 계산 문제는 Cartesian Product($N \times M$)를 먼저 떠올리고 조건을 적용하는 연습을 해라.
'Data Science > SQL' 카테고리의 다른 글
| 데이터베이스 시스템 아키텍처 | 구동 방식 비교(터미널,신/제로 클라이언트) (0) | 2026.03.29 |
|---|---|
| [SQL] 트랜잭션과 동시성 제어, 핵심 요약 (0) | 2026.02.28 |
| [SQL/오답] 학습 경로 분석: LEAD 함수를 이용한 연속 과목 쌍 찾기 (Leetcode3764 Hard) (0) | 2026.02.20 |
| [SQL/오답] 연속 행동 패턴 분석: 그룹화 기법(DATE_SUB)을 활용한 스트릭 계산 (Leetcode3832 Hard) (0) | 2026.02.20 |
| [SQL/오답] 유저별 지배적 반응과 비율 계산 (Leetcode3808 Medium) (0) | 2026.02.20 |