•
계층 관계 · 순환 관계 · 상호배타적 관계를 ERD에서 구분할 수 있다.
•
관계의 차수와 선택사양이 조인 결과 건수를 어떻게 바꾸는지 설명할 수 있다.
•
트랜잭션의 원자성을 설명할 수 있다.
•
ERD의 관계선만 보고 "어디까지가 하나의 트랜잭션인지" 읽어낼 수 있다.
1. 관계의 종류
1) 세 가지 특수한 관계
관계 | 정의 | 실습 스키마/실무 예시 | 특징 |
계층 관계 | 같은 성격의 엔터티가 여러 단계로 이어짐 | 부서 → 하위부서, 상품분류 | 깊이가 정해지지 않음 |
순환 관계 | 엔터티가 자기 자신과 맺는 관계 | EMP.MGR → EMP.EMPNO | 셀프 조인 필요 |
상호배타적 관계 | 여러 부모 중 하나와만 관계를 맺음 | 결제수단: 카드 or 계좌 | 한쪽 FK만 값이 있고 나머지는 NULL |
2) 순환 관계 — 사원과 관리자 
EMP 테이블의 MGR(관리자)는 같은 EMP 테이블의 EMPNO 를 가리킵니다.
사원번호 | 사원명 | 직무 | MGR (관리자 사원번호) | 관리자명 |
7839 | KING | PRESIDENT | (NULL) | — (최상위) |
7566 | JONES | MANAGER | 7839 | KING |
7788 | SCOTT | ANALYST | 7566 | JONES |
7876 | ADAMS | CLERK | 7788 | SCOTT |
순환 관계의 두 가지 특징1.
최상위 인스턴스는 FK가 NULL 이다 (KING) → 반드시 선택적 관계
2.
조회하려면 같은 테이블을 두 번 사용해야 한다 = 셀프 조인
3) 상호배타적 관계 (Arc) 
"둘 중 하나만" — 한 자식이 여러 부모 중 오직 하나와만 관계를 맺는 구조
주문번호 | 개인고객번호 | 법인고객번호 | 판정 |
O001 | C10 | (NULL) | 개인고객 주문 |
O002 | (NULL) | B20 | 법인고객 주문 |
O003 | C11 | B21 | 둘 다 있으면 안 됨 |
O004 | (NULL) | (NULL) | 둘 다 없으면 안 됨 |
상호배타적 관계에서는 FK 중 정확히 하나만 값을 가져야 하므로,
나머지 FK는 반드시 NULL 허용(선택적 관계) 으로 설계됩니다.2. 관계가 조인 결과를 결정한다 


핵심입니다. "조인했더니 왜 행이 늘었지?"의 답이 전부 여기 있습니다.1) 차수(Cardinality)별 조인 결과 건수
관계 차수 | 조인 결과 건수 | 이유 |
1 : 1 | 매칭되는 건수만큼 (늘어나지 않음) | 짝이 하나씩만 있음 |
1 : M | M쪽 건수만큼 | 1쪽 데이터가 M번 반복됨 ![]() |
M : N | 교차 엔터티 건수만큼 | 양쪽 모두 반복됨 |
2) 1:M 조인 — 1쪽 데이터가 반복된다 
[DEPT] 4건
부서번호 | 부서명 |
10 | ACCOUNTING |
20 | RESEARCH |
30 | SALES |
40 | OPERATIONS |
[EMP] 14건 (일부)
사원번호 | 사원명 | 부서번호 |
7782 | CLARK | 10 |
7369 | SMITH | 20 |
7566 | JONES | 20 |
7499 | ALLEN | 30 |
조인 결과 — 부서명이 사원 수만큼 반복된다
사원명 | 부서번호 | 부서명 |
CLARK | 10 | ACCOUNTING |
SMITH | 20 | RESEARCH |
JONES | 20 | RESEARCH |
ALLEN | 30 | SALES |
결과 건수 = 14건 (EMP 건수), DEPT 건수(4)가 아닙니다.
1:M 조인의 결과 건수는 항상 M쪽 건수입니다.select *
from DEPT d join EMP e
on d.deptno = e.deptno # 결과는 14건
SQL
복사
3) 선택사양이 결과 건수를 바꾼다 

DEPT 40번(OPERATIONS)에는 소속 사원이 하나도 없습니다.
조인 방식 | 결과 건수 | 40번 부서 | 언제 쓰나 |
INNER JOIN | 14건 | 사라짐 | 양쪽 다 있는 것만 필요할 때 |
OUTER JOIN (DEPT 기준) | 15건 | 사원명 NULL로 표시 | "사원이 없는 부서도 보여줘" 일 때 |
-- INNER JOIN : 짝이 있는 것만 → 14건
SELECT D.DNAME, E.ENAME FROM DEPT D, EMP E WHERE D.DEPTNO = E.DEPTNO;
-- OUTER JOIN : 짝이 없어도 DEPT는 전부 → 15건
SELECT D.DNAME, E.ENAME FROM DEPT D, EMP E WHERE D.DEPTNO = E.DEPTNO(+);
-- (+) 는 '부족한 쪽'인 EMP 에 붙인다
SQL
복사
OUTER JOIN 결과의 마지막 행
부서명 | 사원명 |
ACCOUNTING | CLARK |
… | … |
OPERATIONS | (NULL) ← 사원이 없어도 부서는 나온다 ![]() |
4) 모델의 관계선 → 조인 종류 매핑표 

1과목의 관계 표기가 곧 2과목의 조인 선택으로 이어집니다.
모델(ERD)에서 | 물리적으로는 | SQL에서는 |
필수 관계 (●) | FK가 NOT NULL | INNER JOIN으로 충분 |
선택 관계 (○) | FK가 NULL 허용 | OUTER JOIN 필요 ![]() |
1:M 관계 | M쪽에 FK | 결과 건수 = M쪽 건수 |
M:N 관계 | 교차 엔터티 경유 | 테이블 3개 조인 (조인 조건 2개) |
순환 관계 | 자기 테이블 참조 | 셀프 조인 (별칭 2개) |
상호배타적 관계 | FK 여러 개 중 하나만 값 | 조건 분기 필요 (CASE, UNION) |
가장 흔한 실수
"조인했더니 원래 데이터보다 행이 많아졌다" → 1:M 조인에서 1쪽이 반복된 것입니다. 정상입니다.
"조인했더니 행이 줄었다" → 선택적 관계인데 INNER JOIN 을 쓴 것입니다. 이건 버그입니다.3. 계층 관계와 셀프 조인
1) 순환 관계를 조회하려면 같은 테이블을 두 번 쓴다
SELECT E.ENAME AS 사원, M.ENAME AS 관리자
FROM EMP E, -- 별칭 E = 사원 역할
EMP M -- 별칭 M = 관리자 역할 (같은 테이블!)
WHERE E.MGR = M.EMPNO(+); -- 최상위(KING)도 보이도록 OUTER JOIN
SQL
복사
사원 | 관리자 | 비고 |
SMITH | FORD | |
JONES | KING | |
KING | (NULL) | 최상위 — OUTER JOIN 이라 살아남음 ![]() |
02강 「같은 테이블이라도 역할이 다르면 다른 별칭으로 여러 번 조인」 과 같은 원리입니다.
SCHEDULE 에서 TEAM 을 홈팀/원정팀으로 두 번 조인한 것과 똑같습니다.2) 셀프 조인의 한계 — 깊이가 정해져야 한다
알고 싶은 것 | 셀프 조인으로 가능? |
사원의 직속 관리자 | 조인 1번 |
사원의 관리자의 관리자 | 조인 2번 |
사원의 최상위까지 전체 경로 | 깊이를 모르면 불가능 |
깊이를 모르는 계층 구조는 계층형 질의(CONNECT BY) 로 풀어야 합니다.
→ 2과목 계층형 질의(쿼리)에서 다룹니다.4. 트랜잭션이란
1) 정의와 원자성
•
트랜잭션(Transaction): 업무적으로 하나의 단위로 처리되어야 하는 작업의 묶음
•
핵심 성질 = 원자성(Atomicity) — 전부 성공하거나, 전부 취소되거나. 중간은 없다.
상황 | 처리 | 이유 |
①②가 모두 성공 | COMMIT (확정) | 정상 이체 완료 |
①은 성공, ②가 실패 | ROLLBACK (전체 취소) | ①만 남으면 돈이 사라진다 ![]() |
만약 ①만 저장되고 끝난다면 A계좌에서는 돈이 빠졌는데 B계좌에는 안 들어옵니다.
"부분 성공"이 허용되지 않는 것이 트랜잭션의 본질입니다.5. 모델이 표현하는 트랜잭션의 이해 


1) 핵심 원리
ERD의 관계선(필수 / 선택)이 곧 트랜잭션의 범위를 알려준다.
관계 | 트랜잭션 범위 | 이유 |
필수 관계 (양쪽 다 ●) | 반드시 하나의 트랜잭션 | 한쪽만 저장되면 모델 규칙 위반 |
선택 관계 (한쪽 ○) | 분리 가능 | 상대가 없어도 존재할 수 있음 |
2) 필수 관계 = 하나의 트랜잭션 
시도 | 허용? | 이유 |
주문 + 주문상세를 함께 입력 | ![]() | 정상 |
주문만 입력하고 상세는 나중에 | ![]() | 상품 없는 주문이 존재하게 됨 |
주문상세만 입력 | ![]() | 주문 없는 상세는 존재할 수 없음 |
주문 삭제 시 상세도 함께 삭제 | ![]() | 필수 관계이므로 당연 |
03강에서 배운 식별관계(주문상세 PK = 주문번호 + 순번)가 곧 "필수 관계" 이고,
필수 관계는 곧 "하나의 트랜잭션" 입니다. 세 개념이 연결됩니다.3) 선택 관계 = 분리 가능한 트랜잭션
시도 | 허용? | 이유 |
사원만 등록 | ![]() | 교육을 안 받은 사원도 있을 수 있음 |
나중에 교육이력만 추가 | ![]() | 별개의 업무 행위 |
교육이력만 등록 (사원 없이) | ![]() | 사원 쪽은 필수이므로 |
4) 모델을 보고 트랜잭션 범위를 읽는 연습 
관계 | 선택사양 | 트랜잭션 판정 |
주문 ─ 주문상세 | 필수 ─ 필수 | 하나의 트랜잭션 |
사원 ─ 부서 | 필수 ─ 선택 | 부서 등록과 사원 등록은 별개 |
회원 ─ 회원상세정보 (1:1 필수) | 필수 ─ 필수 | 하나의 트랜잭션 |
고객 ─ 주문 | 선택 ─ 필수 | 고객만 가입해도 됨 |
경기장 ─ 팀 | 필수 ─ 선택 | 경기장만 등록 가능 |
시험 함정"1:1 관계면 항상 하나의 트랜잭션" → 오답입니다.
1:1이어도 한쪽이 선택이면 분리할 수 있습니다. 차수가 아니라 선택사양이 기준입니다.5) 트랜잭션을 잘못 잡으면 생기는 일
잘못된 처리 | 결과 |
필수 관계를 분리해서 처리 | 주문만 있고 상세가 없는 불완전 데이터 발생 |
선택 관계를 묶어서 처리 | 교육이력이 없으면 사원 등록 자체가 실패 → 불필요한 제약 |
6. 출제 포인트 한눈에 정리
# | 꼭 외울 것 | 핵심 |
1 | 관계의 특수 형태 | 계층 / 순환 / 상호배타적(Arc) |
2 | 순환 관계 | 자기 테이블 참조 → 셀프 조인, 최상위는 FK가 NULL |
3 | 상호배타적 관계 | FK 여러 개 중 정확히 하나만 값을 가짐 |
4 | 1:M 조인 결과 건수 | M쪽 건수 (1쪽이 반복됨) |
5 | 필수 관계 | FK NOT NULL → INNER JOIN으로 충분 |
6 | 선택 관계 | FK NULL 허용 → OUTER JOIN 필요 |
7 | 조인 후 행이 줄었다 | 선택적 관계인데 INNER JOIN 을 쓴 것 = 버그 |
8 | 트랜잭션의 원자성 | 전부 성공 or 전부 취소 (부분 성공 없음) |
9 | 필수 ─ 필수 관계 | 하나의 트랜잭션 |
10 | 트랜잭션 판정 기준 | 차수(1:1, 1:M)가 아니라 선택사양(필수/선택) ![]() |
7. 확인 문제
Q1. 1:M 관계인 TEAM(15건)과 PLAYER(480건)를 조인하면 결과는 몇 건인가?
정답 보기
Q2. 순환(자기참조) 관계의 특징으로 옳지 않은 것은?
① 같은 테이블을 두 번 사용하는 셀프 조인이 필요하다
② 최상위 인스턴스는 외래키가 NULL이다
③ 반드시 필수 관계로 설계해야 한다
④ EMP의 MGR 컬럼이 대표적인 예다
정답 보기







개인고객 주문




부서 등록과 사원 등록은