BEFORE THE EXAM

시험 직전 총정리

출제기준 30개 세부항목의 30초 정리와 자주 틀리는 함정만 모았습니다. 막히는 항목은 개념 페이지로 돌아가 확인하세요.

30세부항목

1과목 · 데이터 모델링의 이해

1.1.1

데이터모델의 이해

  1. 개념 → 논리 → 물리 (추상화 높음 → 구체적)
  2. 외부·개념·내부 / 논리적 독립성은 외부-개념, 물리적 독립성은 개념-내부
  3. 유의점 3가지: 중복·비유연성·비일관성
  • 개념 스키마는 사용자마다 하나씩 있다→ 개념 스키마는 조직 전체에 하나. 사용자마다 있는 것은 외부 스키마
  • 논리적 모델링은 특정 DBMS에 맞게 설계하는 단계다→ DBMS 종속적인 단계는 물리적 모델링. 논리적 모델링은 DBMS에 독립적
데이터 모델의 이해 개념으로 ↗
1.1.2

엔터티

  1. 특징: 관리 대상·식별자·2개 이상 인스턴스·프로세스 이용·속성·관계
  2. 기본(사원·부서·고객) → 중심(주문·계약) → 행위(주문내역·이력)
  3. 이름은 현업 용어·단수·약어 금지·유일
  • 인스턴스가 하나뿐이어도 엔터티가 될 수 있다→ 영속적으로 존재하는 인스턴스가 2개 이상이어야 한다
  • 주문은 기본 엔터티다→ 주문은 고객·상품 같은 기본 엔터티로부터 발생하는 중심 엔터티
엔터티 개념으로 ↗
1.1.3

속성

  1. 기본(업무 본래) / 설계(코드·일련번호) / 파생(계산값, 최소화)
  2. 속성은 한 인스턴스에 값 하나 — 다중값은 엔터티로 분리
  3. 도메인 = 값의 범위·타입·제약
  • 파생 속성은 되도록 많이 두어 조회 성능을 높인다→ 파생 속성은 원본이 바뀌면 다시 계산해야 하므로 최소화가 원칙
  • 하나의 속성은 여러 개의 값을 가질 수 있다→ 한 인스턴스에서 속성은 하나의 값만 가진다. 여러 값이면 다중값 속성 → 분리
속성 개념으로 ↗
1.1.4

관계

  1. 관계명 · 차수(1:1, 1:M, M:N) · 선택사양(필수/선택)
  2. O = 선택(0 가능), | = 필수, 까마귀발 = 다수
  3. M:N은 교차 엔터티로 1:M 두 개로
  • ERD에서는 존재 관계와 행위 관계를 다른 기호로 표기한다→ ERD는 구분하지 않는다. 구분하는 것은 UML(연관·의존)
  • 관계선에 O가 붙은 쪽은 반드시 하나 이상 가져야 한다→ O(Optional)는 0개도 가능하다는 선택 관계 표시
관계 개념으로 ↗
1.1.5

식별자

  1. 유일성·최소성·불변성·존재성
  2. 식별 관계 = 부모 PK가 자식 PK에 (실선) / 비식별 = 자식 일반 속성 (점선)
  3. 비식별 선택: 생명주기 다름, 자식 먼저 생성, PK 과다
  • 식별자 관계를 계속 이어 가면 자식의 PK가 간결해진다→ 식별자 상속이 이어질수록 자식의 PK 속성 수가 늘어난다 — 비식별 관계로 끊는 이유
  • 보조식별자는 인스턴스를 유일하게 구분하지 못한다→ 보조식별자도 유일하게 구분할 수 있지만 대표성이 없을 뿐
식별자 개념으로 ↗

1과목 · 데이터 모델과 SQL

1.2.1

정규화

  1. 1NF 원자값 / 2NF 부분 종속 / 3NF 이행 종속 / BCNF 결정자=후보키
  2. 정규화 ↑ → 조인 ↑ 조회 느려질 수 있음, 입력·수정·삭제 이상 ↓
  3. 수직 분할 = 컬럼 단위 1:1, 수평 분할 = 행 단위
  • 3정규화는 주식별자에 종속되지 않는 속성을 제거한다→ 3NF는 주식별자가 아닌 일반 속성끼리의 이행 종속을 제거
  • 반정규화는 데이터 무결성을 높인다→ 반정규화는 조회 성능을 위해 중복을 허용하므로 무결성 관리 부담이 늘어난다
정규화 개념으로 ↗
1.2.2

관계와 조인의 이해

  1. 관계 → FK → JOIN
  2. 상호배타(Arc): 어느 한 시점에 하나의 부모
  3. N개 테이블 조인 = 최소 N-1개 조건
  • 상호배타적 관계에서는 자식이 두 부모와 동시에 연결된다→ 동시에 하나의 부모와만 연결된다
  • N개 테이블 조인에는 조인 조건이 N개 필요하다→ 최소 N-1개. 식별 관계로 상속된 복합 키는 키 전체를 조건으로 써야 한다
관계와 조인의 이해 개념으로 ↗
1.2.3

모델이 표현하는 트랜잭션의 이해

  1. 원자성 All or Nothing / 일관성 / 고립성 중간 결과 차단 / 지속성 영구 반영
  2. 필수 관계로 모델링된 것은 한 트랜잭션에
  3. 보안성·동시성은 ACID가 아님
  • 고립성은 성공한 트랜잭션의 결과가 영구히 반영되는 것이다→ 그것은 지속성. 고립성은 다른 트랜잭션이 중간 결과를 보지 못하는 것
  • ACID의 C는 동시성(Concurrency)이다→ C는 일관성(Consistency)
모델이 표현하는 트랜잭션의 이해 개념으로 ↗
1.2.4

Null 속성의 이해

  1. NULL 비교는 IS NULL만, 산술 연산 결과는 NULL
  2. 집계 함수는 NULL 제외 (COUNT(*)만 포함)
  3. NVL2(a, 널아님, 널) / COALESCE 첫 non-NULL / NULLIF 같으면 NULL
  • AVG는 NULL을 0으로 취급해 계산한다→ NULL은 제외하고 나머지 값의 평균을 낸다. 0으로 넣으려면 NVL(컬럼, 0)
  • NOT IN 서브쿼리에 NULL이 있어도 결과에 영향이 없다→ 서브쿼리 결과에 NULL이 하나라도 있으면 NOT IN은 공집합
Null 속성의 이해 개념으로 ↗
1.2.5

본질식별자 vs. 인조식별자

  1. 본질 = 업무에서 자연 발생 / 인조 = 일련번호·시퀀스
  2. 인조 장점: 단순한 PK / 단점: 중복 가능·인덱스 추가·의미 없음
  3. 인조를 쓰면 본질식별자에 UNIQUE
  • 인조식별자를 쓰면 중복 데이터가 자동으로 방지된다→ 오히려 본질적으로 같은 데이터가 다른 인조키로 중복 입력될 수 있다 — UNIQUE 제약으로 보완
  • 인조식별자는 업무에서 자연스럽게 도출된다→ 업무에서 도출되는 것은 본질식별자
본질식별자 vs 인조식별자 개념으로 ↗

2과목 · SQL 기본

2.1.1

관계형 데이터베이스 개요

  1. DML SELECT·INSERT·UPDATE·DELETE / DDL CREATE·ALTER·DROP·TRUNCATE / DCL GRANT·REVOKE / TCL COMMIT·ROLLBACK
  2. SQL = 비절차적, 대소문자 무관
  3. TRUNCATE·DROP은 롤백 불가, DELETE는 가능
  • SQL은 절차적 언어다→ SQL은 비절차적 — 원하는 결과를 기술하면 DBMS가 처리 절차를 정한다 (PL/SQL, T-SQL은 절차적)
  • TRUNCATE는 DML이라 ROLLBACK할 수 있다→ TRUNCATE는 DDL이며 자동 커밋되어 롤백 불가
관계형 데이터베이스 개요 개념으로 ↗
2.1.2

SELECT 문

  1. FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
  2. 별명은 ORDER BY에서만, 인라인 뷰로 감싸면 WHERE에서도
  3. 따옴표 두 번 = 따옴표 한 글자
  • WHERE 절에서 SELECT의 별명(ALIAS)을 사용할 수 있다→ WHERE는 SELECT보다 먼저 실행되어 별명을 모른다. ORDER BY에서만 가능
  • DISTINCT는 NULL 행을 제외한다→ NULL도 하나의 값으로 한 행 남긴다
SELECT 문 개념으로 ↗
2.1.3

함수

  1. ROUND 반올림 / TRUNC 버림 / 음수 자릿수는 10의 자리
  2. 날짜 ± 숫자 = 일 단위, TRUNC(날짜)로 시각 제거
  3. CASE ELSE 없으면 NULL, DECODE는 NULL끼리 같다고 봄
  • TRIM('xxSQLxx', 'x')는 'SQL'을 반환한다→ Oracle TRIM 문법은 TRIM('x' FROM 'xxSQLxx'). 두 인자 형태는 오류(LTRIM/RTRIM은 두 인자 가능)
  • DECODE에서 NULL은 어떤 값과도 같지 않다→ DECODE는 예외적으로 NULL = NULL을 같다고 판단한다. CASE WHEN 식 = NULL은 항상 거짓
함수 개념으로 ↗
2.1.4

WHERE 절

  1. 우선순위: 괄호 > NOT > 비교 > AND > OR
  2. % 여러 글자, _ 한 글자, 와일드카드 자체는 ESCAPE
  3. NULL은 IS NULL로만, NOT IN에 NULL 있으면 공집합
  • WHERE A OR B AND C는 (A OR B) AND C로 평가된다→ AND가 먼저이므로 A OR (B AND C)
  • COL <> 'X' 조건은 COL이 NULL인 행도 반환한다→ NULL과의 비교는 UNKNOWN이라 제외된다
WHERE 절 개념으로 ↗
2.1.5

GROUP BY, HAVING 절

  1. WHERE는 행 조건(집계 불가) / HAVING은 그룹 조건
  2. SELECT에는 GROUP BY 컬럼 + 집계 함수만
  3. 빈 그룹: COUNT 0, 나머지 NULL
  • WHERE 절에서 집계 함수를 쓸 수 있다→ WHERE는 그룹화 전이라 집계 함수를 쓸 수 없다 → HAVING
  • 대상 행이 없으면 SUM은 0을 반환한다→ SUM·AVG·MAX·MIN은 NULL, COUNT만 0
GROUP BY · HAVING 절 개념으로 ↗
2.1.6

ORDER BY 절

  1. ASC 기본 / Oracle NULL은 큰 값(ASC 마지막) / NULLS FIRST·LAST
  2. 별명·순번·SELECT에 없는 컬럼도 정렬 가능
  3. ROWNUM은 정렬 전 적용 → 인라인 뷰 필요
  • Oracle에서 ASC 정렬 시 NULL이 가장 먼저 나온다→ Oracle은 NULL을 가장 큰 값으로 보아 ASC에서 마지막. SQL Server가 처음
  • GROUP BY가 있어도 ORDER BY에 아무 컬럼이나 쓸 수 있다→ GROUP BY가 있으면 ORDER BY에도 그룹 컬럼이나 집계 함수만
ORDER BY 절 개념으로 ↗
2.1.7

조인

  1. EQUI = / NON-EQUI BETWEEN / SELF 별명 2개 / CROSS 조건 없음
  2. (+)는 데이터가 없는 쪽에, LEFT 기준 반대편
  3. N개 테이블 → N-1개 조건, 없으면 카티션 곱
  • (+)를 양쪽에 붙이면 FULL OUTER JOIN이 된다→ (+)는 한쪽에만 붙일 수 있고 FULL OUTER JOIN은 ANSI 구문으로만
  • 조인 순서를 바꾸면 결과가 달라진다→ INNER JOIN의 결과는 순서와 무관. 성능만 달라질 수 있다
조인 개념으로 ↗
2.1.8

표준 조인

  1. INNER 교집합 / LEFT 왼쪽 보존 / FULL 양쪽 보존 / CROSS 곱
  2. OUTER + 오른쪽 조건: ON은 보존, WHERE는 INNER화
  3. NATURAL·USING: 공통 컬럼 한 번만, 접두어 금지, ON 병용 금지
  • LEFT OUTER JOIN 뒤 WHERE에 오른쪽 테이블 조건을 두어도 왼쪽 행은 모두 보존된다→ WHERE에서 오른쪽이 NULL인 행이 걸러져 INNER JOIN처럼 된다. 보존하려면 조건을 ON에
  • NATURAL JOIN의 공통 컬럼은 양쪽에서 두 번 출력된다→ 공통 컬럼은 한 번만 출력되고 접두어를 붙이면 오류
표준 조인 개념으로 ↗

2과목 · SQL 활용

2.2.1

서브 쿼리

  1. 단일행 = / 다중행 IN·ANY·ALL·EXISTS / 스칼라 1행1열 / 인라인 뷰 FROM
  2. > ANY = 최소값보다 큼, > ALL = 최대값보다 큼
  3. NOT IN에 NULL → 공집합, NOT EXISTS는 안전
  • EXISTS는 서브쿼리가 반환하는 행 수만큼 메인 행을 복제한다→ EXISTS는 존재 여부만 검사한다. 행이 늘어나지 않는다
  • 서브쿼리에서 정의한 컬럼을 메인쿼리 SELECT에서 사용할 수 있다→ WHERE 절 서브쿼리의 컬럼은 메인에서 사용 불가. 필요하면 인라인 뷰나 조인
서브쿼리 개념으로 ↗
2.2.2

집합 연산자

  1. UNION 중복 제거 / UNION ALL 유지 / INTERSECT 교집합 / MINUS 차집합
  2. 컬럼 수·타입 동일, 이름은 첫 SELECT 기준
  3. ORDER BY는 맨 끝에 한 번
  • UNION은 중복을 유지한 채 두 결과를 합친다→ 중복을 제거하는 것은 UNION, 유지하는 것은 UNION ALL
  • 집합 연산 시 결과 컬럼명은 두 번째 SELECT를 따른다→ 첫 번째 SELECT의 컬럼명(별명)을 따른다
집합 연산자 개념으로 ↗
2.2.3

그룹 함수

  1. ROLLUP 계층(n+1) / CUBE 전체 조합(2^n) / GROUPING SETS 선택
  2. GROUPING()=1 → 소계·합계 행
  3. ROLLUP은 인자 순서가 중요, CUBE는 무관
  • ROLLUP(a, b)와 ROLLUP(b, a)의 결과는 같다→ ROLLUP은 순서에 따라 소계 조합이 달라진다. 순서 무관은 CUBE
  • GROUPING 함수는 데이터 자체의 NULL에 대해 1을 반환한다→ 집계로 생성된 NULL에 1. 데이터의 NULL은 0
그룹 함수 개념으로 ↗
2.2.4

윈도우 함수

  1. RANK 1,1,3 / DENSE_RANK 1,1,2 / ROW_NUMBER 1,2,3
  2. ORDER BY 있는 집계 OVER = 누적(RANGE 기본)
  3. ROWS 행 단위 / RANGE 값 단위 — 동일 값 누적 차이
  • RANK는 동순위 뒤에 바로 다음 순위를 이어 붙인다→ RANK는 동순위 수만큼 건너뛴다(1,1,3). 건너뛰지 않는 것은 DENSE_RANK
  • 윈도우 함수를 쓰면 GROUP BY처럼 행이 그룹별로 합쳐진다→ 윈도우 함수는 행 수를 유지한다
윈도우 함수 개념으로 ↗
2.2.5

Top N 쿼리

  1. ROWNUM은 정렬 전 부여 → 인라인 뷰 정렬 후 ROWNUM
  2. ROWNUM = 1, <= N만 정상 / = 2, > 1 은 0건
  3. TOP n WITH TIES / FETCH FIRST n ROWS ONLY | WITH TIES
  • SELECT * FROM 사원 WHERE ROWNUM <= 5 ORDER BY 급여는 급여 하위 5명을 준다→ ROWNUM이 정렬 전에 적용되어 임의 5건을 정렬한 결과. 인라인 뷰에서 정렬 후 ROWNUM
  • WHERE ROWNUM = 2는 두 번째 행을 반환한다→ 첫 행의 ROWNUM 1이 조건에 맞지 않아 버려지고 다음 행이 다시 1이 되므로 0건
Top N 쿼리 개념으로 ↗
2.2.6

계층형 질의와 셀프 조인

  1. START WITH 루트 / CONNECT BY PRIOR 자식=부모 / ORDER SIBLINGS BY
  2. 순방향: PRIOR 사원번호 = 관리자번호 (위→아래)
  3. LEVEL 루트=1, ISLEAF 리프=1, NOCYCLE 순환 방지
  • LEVEL은 리프 노드에서 1이고 위로 갈수록 커진다→ LEVEL은 루트가 1, 아래로 내려갈수록 커진다
  • WHERE 조건은 CONNECT BY 전개 전에 적용되어 하위 노드까지 잘라낸다→ WHERE는 전개 후 필터. 전개를 제한하려면 CONNECT BY 조건에 넣는다
계층형 질의와 셀프 조인 개념으로 ↗
2.2.7

PIVOT 절과 UNPIVOT 절

  1. PIVOT: 집계(값) FOR 기준 IN (값 AS 별명) — 행→열
  2. UNPIVOT: (값 FOR 구분 IN (열, 열)) — 열→행, NULL 제외
  3. 서브쿼리에 남은 컬럼은 모두 그룹 기준
  • PIVOT의 IN 목록은 생략하면 모든 값이 자동으로 열이 된다→ IN 목록은 명시 필수. 생략·동적 지정은 불가
  • UNPIVOT은 NULL 값이 있는 셀도 기본적으로 행으로 만든다→ 기본은 NULL 제외. INCLUDE NULLS를 붙여야 포함
PIVOT / UNPIVOT 절 개념으로 ↗
2.2.8

정규 표현식

  1. . 한 글자 / * 0+ / + 1+ / ? 0~1 / ^ 시작 $ 끝
  2. \d 숫자 \w 영숫자_ \s 공백 / [^...] 제외
  3. LIKE·REPLACE·SUBSTR·INSTR·COUNT 다섯 함수
  • \w는 하이픈(-)도 포함한다→ \w는 영문자·숫자·밑줄만. 하이픈은 포함되지 않는다
  • *는 1회 이상 반복이다→ *는 0회 이상, +가 1회 이상
정규 표현식 개념으로 ↗

2과목 · 관리 구문

2.3.1

DML

  1. INSERT 컬럼 생략 = 전체 컬럼 / 생략 컬럼 = DEFAULT or NULL
  2. MERGE: MATCHED → UPDATE, NOT MATCHED → INSERT
  3. INSERT ALL 모든 WHEN / INSERT FIRST 첫 WHEN만
  • INSERT에서 컬럼 목록을 생략하면 일부 컬럼만 값을 줘도 된다→ 생략하면 테이블의 모든 컬럼을 정의 순서대로 채워야 한다
  • DEFAULT가 설정된 컬럼에 NULL을 명시하면 DEFAULT 값이 들어간다→ 명시적 NULL은 NULL이 들어간다(NOT NULL이면 오류). DEFAULT는 컬럼을 생략했을 때
DML 개념으로 ↗
2.3.2

TCL

  1. COMMIT 전: 본인만 보임, 행 잠금 / 후: 모두 보임, 복구 불가
  2. DDL·정상 종료 = 자동 커밋, 비정상 종료 = 자동 롤백
  3. ROLLBACK TO sp = 그 이후만 취소, 트랜잭션 유지
  • ROLLBACK TO 저장점을 실행하면 트랜잭션이 종료된다→ 저장점 이후만 취소되고 트랜잭션은 계속. 종료는 COMMIT/ROLLBACK
  • DDL을 실행해도 앞의 DML은 ROLLBACK으로 되돌릴 수 있다→ DDL은 묵시적 COMMIT을 발생시켜 앞의 DML이 확정된다
TCL 개념으로 ↗
2.3.3

DDL

  1. PK = UNIQUE + NOT NULL, 테이블당 1개 / UNIQUE·FK는 NULL 허용
  2. CTAS: 타입·NOT NULL만 / 인덱스·PK·FK·DEFAULT 없음
  3. ALTER ADD 맨 뒤·MODIFY 괄호·DROP COLUMN 하나씩, 순서 변경 불가
  • CTAS로 만든 테이블에는 원본의 PK가 그대로 복사된다→ PK·FK·UNIQUE·CHECK는 복사되지 않고 NOT NULL만 복사
  • UNIQUE 제약조건이 있는 컬럼에는 NULL을 넣을 수 없다→ UNIQUE는 NULL 허용(여러 NULL 가능). NULL 불가는 PK와 NOT NULL
DDL 개념으로 ↗
2.3.4

DCL

  1. GRANT 권한 ON 객체 TO 사용자 [WITH GRANT OPTION] / REVOKE ... FROM
  2. 오브젝트 권한은 연쇄 회수, 시스템 권한은 아님
  3. 롤 = 권한 묶음, 직접 권한과 별개
  • COMMIT, ROLLBACK은 DCL이다→ 둘은 TCL. DCL은 GRANT·REVOKE
  • 롤에서 권한을 회수하면 사용자에게 직접 부여한 같은 권한도 사라진다→ 직접 부여 권한과 롤 권한은 별개. 각각 회수해야 한다
DCL 개념으로 ↗