공든탑앱 열기

관계와 조인의 이해

SQLD (SQL 개발자) · 데이터 모델과 SQL · 약 8분

쉽게 말하면

모델에서 두 엔터티를 관계로 이으면, 부모 쪽 번호가 자식 쪽 표에 함께 적혀요. 사원 표에 부서 번호가 적혀 있는 식이에요. 나중에 SQL로 사원과 부서 이름을 같이 보고 싶을 때, 이 부서 번호를 다리 삼아 두 표를 이어 읽어요. 이게 조인이에요.

시험용 정의

모델의 관계는 SQL에서 조인이 된다. 관계를 맺으면 부모 엔터티의 식별자가 자식 엔터티로 상속(외래키)되고, 이 상속된 속성을 조인 조건으로 써서 두 테이블을 이어 읽는다. 관계를 어떻게 설계했느냐에 따라 조인 모양이 정해진다.

비유로 이해하기

주민센터 서류에 적힌 '세대주 주민번호'가 다리 역할을 한다. 그 번호로 세대주 서류를 찾아가면(조인) 세대주 이름을 알 수 있다.

자세히

먼저 알아 둘 말

말뜻
조인두 테이블의 행을 조건에 맞게 이어 붙여 하나의 결과로 읽는 SQL 연산
상속관계를 통해 부모의 기본키가 자식 테이블의 열(외래키)로 들어가는 것
셀프 조인같은 테이블을 별칭을 달리해 두 번 읽고 서로 조인하는 것
아크(Arc)ERD에서 여러 관계 중 하나만 성립함을 표시하는 호 모양 선

관계가 조인이 되는 과정

  1. 부서(부서번호 PK) ― 사원 관계를 맺는다
  2. 부서번호가 사원 테이블로 상속된다 (사원.부서번호 = FK)
  3. 사원과 부서를 함께 볼 때 사원.부서번호 = 부서.부서번호를 조인 조건으로 쓴다

관계가 없는 두 엔터티를 억지로 조인하려면 공통 속성이 없어 조인 조건을 세울 수 없다. 조인 경로는 모델의 관계를 따라간다.

계층형 데이터 모델

한 엔터티가 자기 자신과 관계를 맺는 모델이다(순환·재귀 관계). 사원-관리자, 부서-상위부서, 메뉴-상위메뉴처럼 트리 구조의 데이터를 표현한다. SQL에서는 같은 테이블을 두 번 읽는 셀프 조인이나, 트리 전체를 따라가는 계층형 질의(START WITH ... CONNECT BY)로 다룬다.

상호배타적(Exclusive OR) 관계

한 엔터티가 여러 엔터티 중 하나와만 관계를 맺는 경우다. 예: 주문은 개인고객 또는 법인고객 중 하나에게서만 온다. ERD에서는 관계선을 호(아크)로 묶어 표시한다. SQL에서는 주문의 고객구분 값에 따라 조인할 테이블이 달라지므로 OUTER JOIN 두 개나 UNION을 쓰게 된다.

시험에 이렇게 나와요

출제 범위·공식 안내 기반

확인 문제

Q1. 사원 엔터티에 '관리자사번' 속성이 있고, 관리자도 사원이다. 사원과 그 관리자 이름을 함께 보려면 어떤 조인이 필요할까요?

  1. CROSS JOIN
  2. 조인이 필요 없다
  3. 셀프 조인
  4. NATURAL JOIN
정답 보기

3번 셀프 조인

같은 사원 테이블을 두 번(사원 역할, 관리자 역할) 읽어 연결하는 셀프 조인이다. 자기 자신과 관계를 맺는 계층형 모델은 SQL에서 셀프 조인이나 계층형 질의가 된다.

Q2. 관계를 맺으면 부모 엔터티의 주식별자는 자식 엔터티에서 무엇이 되나?

  1. 외래키(FK)
  2. 인덱스
  3. 뷰
  4. 파생 속성
정답 보기

1번 외래키(FK)

자식으로 상속되어 외래키가 되고, 이것이 조인 조건이 된다.

Q3. 부서 엔터티가 '상위부서번호'로 자기 자신을 참조하는 모델은?

  1. 슈퍼타입 모델
  2. M:N 관계
  3. 계층형 데이터 모델
  4. 상호배타적 관계
정답 보기

3번 계층형 데이터 모델

자기 참조 관계로 트리를 표현하는 계층형 데이터 모델이다.

Q4. 주문이 개인고객 또는 법인고객 중 하나와만 관계를 맺는 것은?

  1. 식별 관계
  2. 상호배타적 관계
  3. 필수 관계
  4. M:N 관계
정답 보기

2번 상호배타적 관계

Exclusive OR 관계. 아크로 표시한다.

Q5. 부서–사원 1:M 관계에서 사원 테이블의 부서번호는?

  1. 기본키
  2. 외래키
  3. 후보키
  4. 대체키
정답 보기

2번 외래키

부모(부서)의 식별자가 상속되어 외래키가 된다.

Q6. 사원과 부서를 함께 조회할 때 쓰는 조인 조건은?

  1. 사원.부서번호 = 부서.부서번호
  2. 사원.이름 = 부서.이름
  3. 조인 조건이 필요 없다
  4. 사원.사원번호 = 부서.부서번호
정답 보기

1번 사원.부서번호 = 부서.부서번호

관계로 상속된 속성이 조인 조건이 된다.

헷갈리기 쉬운 O·X

셀프 조인을 하려면 같은 테이블에 서로 다른 별칭을 붙여야 한다.

정답 보기

O 별칭이 없으면 어느 쪽 열인지 구별할 수 없다.

계층형 데이터 모델은 SQL로 조회할 수 없다.

정답 보기

X 셀프 조인이나 계층형 질의로 조회한다.

관계가 없는 엔터티끼리도 언제나 의미 있는 조인 조건을 만들 수 있다.

정답 보기

X 조인 조건은 관계로 상속된 공통 속성에서 나온다.

함께 보면 좋은 개념