CS/SQL

[SQLD] Join 연산 정리

2021. 3. 18. 14:09
목차
  1. 1. JOIN이란?
  2.  
  3. 2. EQUI JOIN vs Non EQUI JOIN
  4.  
  5. 3. INNER JOIN
  6. 4. OUTER JOIN
  7.  
  8. 5. 벤 다이어그램으로 표현한 SQL JOIN

1. JOIN이란?

  • 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것을 의미한다.
  • 일반 적인 경우 행들은 PK나 FK 값의 연관에 의해 JOIN이 성립되지만, 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로도 JOIN이 성립 가능하다.

 

2. EQUI JOIN vs Non EQUI JOIN

  • EQUI JOIN(등가 조인)은 두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법으로 대부분 PK ↔ FK의 관계를 기반으로 한다.
  • 하지만, 반드시 PK ↔ FK의 관계로만 EQUI JOIN이 성립하는 것은 아니다.
  • Non EQUI JOIN(비등가 조인)은 두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에 사용된다.
  • Non EQUI JOIN의 경우에는 "=" 연산자가 아닌 다른(Between, >, >=, <, <= 등) 연산자들을 사용하여 JOIN을 수행한다.

 

3. INNER JOIN

1) INNER JOIN이란?

  • INNER JOIN은 OUTER JOIN과 대비된 개념, 내부 JOIN이라고 불린다.
  • JOIN 조건에서 동일한 값이 있는 행만 반환한다.
  • INNER JOIN 표시는 JOIN 조건을 FROM 절에서 정의하겠다는 표시이므로 USING 조건절이나 ON 조건절을 필수적으로 사용해야 하며, INNER는 SQL문 내에서 생략 가능하다.

2) NATURAL JOIN

  • 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN을 수행한다.
  • NATURAL JOIN이 명시되면, 추가로 USING 조건절, ON 조건절, WHERE 절에서 JOIN 조건을 정의할 수 없다.
  • JOIN에 사용된 칼럼들은 같은 데이터 유형이어야 하며, ALIAS나 테이블 명과 같은 접두사를 붙일 수 없다.
  • JOIN이 되는 테이블의 데이터 성격(도메인)과 칼럼명 등이 동일해야 하는 제약 조건이 있다.

3) USING 조건절

  • FROM 절의 USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로  EQUI JOIN을 할 수가 있다.
  • JOIN + USING 조건절 또한 NATURAL JOIN과 마찬가지로 JOIN 칼럼에 대해서는 ALIAS나 테이블 이름과 같은 접두사를 붙일 수 없다.

4) ON 조건절

  • JOIN 서술부(ON 조건절)와  비 JOIN 서술부(WHERE 조건절)를 분리하여 이해가 쉽고, 칼럼명이 다르더라도 JOIN 조건을 사용할 수 있는 장점이 있다.
  • 임의의 JOIN 조건 지정, 이름이 다른 칼럼명을 JOIN 조건으로 사용, JOIN 칼럼을 명시하기 위해 사용한다.
  • JOIN+USING조건절과 달리, ON 조건절을 사용한 JOIN의 경우는 ALIAS나 테이블 명과 같은 접두사를 사용하여 SELECT에 사용되는 칼럼을 논리적으로 명확하게 지정해줘야 한다.

5) CROSS JOIN

  • 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 출력한다.
  • CARTESIAN PRODUCT와 같은 의미이다.

 

4. OUTER JOIN

1) OUTER JOIN이란?

  • INNER(내부) JOIN과 대비하여  외부 JOIN이라고 불린다.
  • JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용할 수 있다.
  • OUTER JOIN 또한 JOIN 조건을 FROM 절에서 정의하겠다는 표시이므로 USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다.

2) LEFT OUTER JOIN

  • 조인 수행시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어 온다.
  • LEFT JOIN으로 OUTER 키워드를 생략해서 사용할 수 있다.

3) RIGHT OUTER JOIN

  • 조인 수행시 먼저 표기된 우측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중 표기된 좌측 테이블에서 JOIN 대상 데이터를 읽어 온다.
  • RIGHT JOIN으로 OUTER 키워드를 생략해서 사용할 수 있다.

4) FULL OUTER JOIN

  • 조인 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성한다.
  • FULL JOIN으로 OUTER 키워드를 생략해서 사용할 수 있다.

 

5. 벤 다이어그램으로 표현한 SQL JOIN

 

https://stackoverflow.com/questions/13997365/sql-joins-as-venn-diagram

 

 


참고

한국데이터산업진흥원, SQL 전문가 가이드 

저작자표시 비영리 (새창열림)

'CS > SQL' 카테고리의 다른 글

[MySQL] 하나의 글과 연관된 여러 개의 이미지 추출하는 쿼리 작성하기 (feat. GROUP_CONCAT)  (0) 2021.06.10
[SQLD] SQLD 합격 후기 및 공부 방법  (6) 2021.04.18
[MySQL] Connection Pool을 사용하는 이유  (0) 2021.04.16
[MySQL] MySQL에서 CSV파일 Import하기  (5) 2021.02.10
[MySQL] DB 생성 및 접속  (0) 2021.01.02
  1. 1. JOIN이란?
  2.  
  3. 2. EQUI JOIN vs Non EQUI JOIN
  4.  
  5. 3. INNER JOIN
  6. 4. OUTER JOIN
  7.  
  8. 5. 벤 다이어그램으로 표현한 SQL JOIN
'CS/SQL' 카테고리의 다른 글
  • [SQLD] SQLD 합격 후기 및 공부 방법
  • [MySQL] Connection Pool을 사용하는 이유
  • [MySQL] MySQL에서 CSV파일 Import하기
  • [MySQL] DB 생성 및 접속
코택
코택
TaxFree코택 님의 블로그입니다.
코택
TaxFree
코택
전체
오늘
어제
  • 분류 전체보기 (369)
    • Spring (29)
      • Spring (18)
      • 스프링 핵심 원리 - 고급편 (11)
    • Spring Batch (4)
    • JPA (4)
    • CS (89)
      • 자료구조 (2)
      • 네트워크 (5)
      • 운영체제 (1)
      • 데이터베이스 (4)
      • SQL (7)
      • 알고리즘 이론 (4)
      • 알고리즘 문제 풀이 (66)
    • 웹 (28)
      • React.js (4)
      • Next.js (1)
      • Node.js (14)
      • FastAPI (4)
      • Django (5)
    • 프로그래밍 언어 (45)
      • Python (5)
      • Java + Kotlin (29)
      • JavaScript + TypeScript (11)
    • 테스트코드 (26)
      • ATDD, 클린 코드 with Spring (4)
      • 이규원의 현실 세상의 TDD: 안정감을 주는 코드.. (20)
    • 인프라 (6)
      • AWS (2)
      • Kubernetes (4)
    • 트러블슈팅 (25)
    • 책 (89)
      • Effective Java (54)
      • Effective Kotlin (14)
      • 도메인 주도 개발 시작하기: DDD 핵심 개념 정.. (11)
      • 웹 프로그래머를 위한 데이터베이스를 지탱하는 기술 (6)
      • 도메인 주도 설계 첫걸음 (4)
    • Git (10)
    • 회고 (5)
    • etc (8)

블로그 메뉴

  • 홈
  • 방명록
  • 관리
  • GitHub
  • LinkedIn

공지사항

  • 스킨 관련

인기 글

태그

  • mysql
  • 장고
  • Git
  • 그래프
  • 파이썬
  • BOJ
  • 브루트포스
  • dp
  • 그래프 탐색
  • atdd
  • 백준
  • 깊이 우선 탐색
  • Shortest Path
  • http
  • fastapi

최근 댓글

최근 글

hELLO · Designed By 정상우.
코택
[SQLD] Join 연산 정리
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.