관계와 조인의 이해
쉽게 말하면
모델에서 두 엔터티를 관계로 이으면, 부모 쪽 번호가 자식 쪽 표에 함께 적혀요. 사원 표에 부서 번호가 적혀 있는 식이에요. 나중에 SQL로 사원과 부서 이름을 같이 보고 싶을 때, 이 부서 번호를 다리 삼아 두 표를 이어 읽어요. 이게 조인이에요.
시험용 정의
모델의 관계는 SQL에서 조인이 된다. 관계를 맺으면 부모 엔터티의 식별자가 자식 엔터티로 상속(외래키)되고, 이 상속된 속성을 조인 조건으로 써서 두 테이블을 이어 읽는다. 관계를 어떻게 설계했느냐에 따라 조인 모양이 정해진다.
비유로 이해하기
주민센터 서류에 적힌 '세대주 주민번호'가 다리 역할을 한다. 그 번호로 세대주 서류를 찾아가면(조인) 세대주 이름을 알 수 있다.
자세히
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 조인 | 두 테이블의 행을 조건에 맞게 이어 붙여 하나의 결과로 읽는 SQL 연산 |
| 상속 | 관계를 통해 부모의 기본키가 자식 테이블의 열(외래키)로 들어가는 것 |
| 셀프 조인 | 같은 테이블을 별칭을 달리해 두 번 읽고 서로 조인하는 것 |
| 아크(Arc) | ERD에서 여러 관계 중 하나만 성립함을 표시하는 호 모양 선 |
관계가 조인이 되는 과정
- 부서(부서번호 PK) ― 사원 관계를 맺는다
- 부서번호가 사원 테이블로 상속된다 (사원.부서번호 = FK)
- 사원과 부서를 함께 볼 때
사원.부서번호 = 부서.부서번호를 조인 조건으로 쓴다
관계가 없는 두 엔터티를 억지로 조인하려면 공통 속성이 없어 조인 조건을 세울 수 없다. 조인 경로는 모델의 관계를 따라간다.
계층형 데이터 모델
한 엔터티가 자기 자신과 관계를 맺는 모델이다(순환·재귀 관계). 사원-관리자, 부서-상위부서, 메뉴-상위메뉴처럼 트리 구조의 데이터를 표현한다. SQL에서는 같은 테이블을 두 번 읽는 셀프 조인이나, 트리 전체를 따라가는 계층형 질의(START WITH ... CONNECT BY)로 다룬다.
상호배타적(Exclusive OR) 관계
한 엔터티가 여러 엔터티 중 하나와만 관계를 맺는 경우다. 예: 주문은 개인고객 또는 법인고객 중 하나에게서만 온다. ERD에서는 관계선을 호(아크)로 묶어 표시한다. SQL에서는 주문의 고객구분 값에 따라 조인할 테이블이 달라지므로 OUTER JOIN 두 개나 UNION을 쓰게 된다.
시험에 이렇게 나와요
- 관계 → 부모 식별자 상속(FK) → 조인 조건이 된다
- 계층형 데이터 모델(자기 참조) = 셀프 조인·계층형 질의
- 상호배타적 관계(아크): 여러 관계 중 하나만 성립
- ERD를 보고 어떤 조인 조건이 필요한지 고르기
출제 범위·공식 안내 기반
확인 문제
Q1. 사원 엔터티에 '관리자사번' 속성이 있고, 관리자도 사원이다. 사원과 그 관리자 이름을 함께 보려면 어떤 조인이 필요할까요?
- CROSS JOIN
- 조인이 필요 없다
- 셀프 조인
- NATURAL JOIN
정답 보기
3번 셀프 조인
같은 사원 테이블을 두 번(사원 역할, 관리자 역할) 읽어 연결하는 셀프 조인이다. 자기 자신과 관계를 맺는 계층형 모델은 SQL에서 셀프 조인이나 계층형 질의가 된다.
Q2. 관계를 맺으면 부모 엔터티의 주식별자는 자식 엔터티에서 무엇이 되나?
- 외래키(FK)
- 인덱스
- 뷰
- 파생 속성
정답 보기
1번 외래키(FK)
자식으로 상속되어 외래키가 되고, 이것이 조인 조건이 된다.
Q3. 부서 엔터티가 '상위부서번호'로 자기 자신을 참조하는 모델은?
- 슈퍼타입 모델
- M:N 관계
- 계층형 데이터 모델
- 상호배타적 관계
정답 보기
3번 계층형 데이터 모델
자기 참조 관계로 트리를 표현하는 계층형 데이터 모델이다.
Q4. 주문이 개인고객 또는 법인고객 중 하나와만 관계를 맺는 것은?
- 식별 관계
- 상호배타적 관계
- 필수 관계
- M:N 관계
정답 보기
2번 상호배타적 관계
Exclusive OR 관계. 아크로 표시한다.
Q5. 부서–사원 1:M 관계에서 사원 테이블의 부서번호는?
- 기본키
- 외래키
- 후보키
- 대체키
정답 보기
2번 외래키
부모(부서)의 식별자가 상속되어 외래키가 된다.
Q6. 사원과 부서를 함께 조회할 때 쓰는 조인 조건은?
- 사원.부서번호 = 부서.부서번호
- 사원.이름 = 부서.이름
- 조인 조건이 필요 없다
- 사원.사원번호 = 부서.부서번호
정답 보기
1번 사원.부서번호 = 부서.부서번호
관계로 상속된 속성이 조인 조건이 된다.
헷갈리기 쉬운 O·X
셀프 조인을 하려면 같은 테이블에 서로 다른 별칭을 붙여야 한다.
정답 보기
O 별칭이 없으면 어느 쪽 열인지 구별할 수 없다.
계층형 데이터 모델은 SQL로 조회할 수 없다.
정답 보기
X 셀프 조인이나 계층형 질의로 조회한다.
관계가 없는 엔터티끼리도 언제나 의미 있는 조인 조건을 만들 수 있다.
정답 보기
X 조인 조건은 관계로 상속된 공통 속성에서 나온다.