조인 완전 정복

PostgreSQL에서 쿼리 성능 개선하기

Amy McCarty

Instructor

과정 개요

  • 조인, 서브쿼리, 임시 테이블을 포함한 쿼리 구조
  • 데이터 제한 및 집계
  • 데이터베이스 저장 특성 및 최적화 도구
  • 쿼리 계획 수립과 실행
PostgreSQL에서 쿼리 성능 개선하기

쿼리 플래너

쿼리

  • SQL 지시문

식당 종업원

쿼리(실행) 계획

  • 실제 단계

여러 요리사가 큰 냄비 주변에 모여 있음

PostgreSQL에서 쿼리 성능 개선하기

쿼리 플래너

음식을 나르는 종업원

음료를 나르는 종업원

PostgreSQL에서 쿼리 성능 개선하기

 

조인이란?

  • 여러 테이블 결합
PostgreSQL에서 쿼리 성능 개선하기

 

조인이란?

  • 여러 테이블 결합

왜 조인을 쓰나요?

  • 조회 테이블 사용
  • 데이터 결합

방법은?

  • 내부 조인과 외부 조인

 

Sales ID Order Dt Amt Cust No
01 2019-02-02 145.30 911

 

ID Name Customer Since
911 Jim Smith 2019-01-01

 

Sales ID Order Dt Amt Name
01 2019-02-02 145.30 Jim Smith
PostgreSQL에서 쿼리 성능 개선하기

내부 조인 (INNER JOIN)

선수 테이블: Athlete, Country 항목에 Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX. 국가 테이블: Country, Name, Pop (mil) 항목에 AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
PostgreSQL에서 쿼리 성능 개선하기

내부 조인 (INNER JOIN)

선수 테이블: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX(마지막 강조). 국가 테이블: AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209(마지막 강조).

SELECT *
FROM athletes a
INNER JOIN countries c
ON a.country = c.country

 

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
PostgreSQL에서 쿼리 성능 개선하기

USING을 통한 내부 조인

선수 테이블: Athlete, Country 항목에 Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX. 국가 테이블: Country, Name, Pop (mil) 항목에 AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlete Country Name Pop (mil)
Jack AUT Austria 9
Aditya IND India 1,339
Mikhail RUS Russia 145
PostgreSQL에서 쿼리 성능 개선하기

USING을 통한 내부 조인

선수 테이블: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX(마지막 강조). 국가 테이블: AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209(마지막 강조).

SELECT *
FROM athletes
INNER JOIN countries
USING (country)

 

 

 

Athlete Country Name Pop (mil)
Jack AUT Austria 9
Aditya IND India 1,339
Mikhail RUS Russia 145
PostgreSQL에서 쿼리 성능 개선하기

왼쪽 외부 조인 (LEFT OUTER JOIN)

선수 테이블: Athlete, Country 항목에 Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX. 국가 테이블: Country, Name, Pop (mil) 항목에 AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
PostgreSQL에서 쿼리 성능 개선하기

왼쪽 외부 조인 (LEFT OUTER JOIN)

선수 테이블: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX. 국가 테이블: AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209(마지막 강조).

SELECT *
FROM athletes a
LEFT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
PostgreSQL에서 쿼리 성능 개선하기

오른쪽 외부 조인 (RIGHT OUTER JOIN)

선수 테이블: Athlete, Country 항목에 Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX. 국가 테이블: Country, Name, Pop (mil) 항목에 AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
BRA Brazil 209
PostgreSQL에서 쿼리 성능 개선하기

오른쪽 외부 조인 (RIGHT OUTER JOIN)

선수 테이블: Jack - AUT, Aditya - IND, Mikhail - RUS, Javier - MEX(마지막 강조). 국가 테이블: AUT - Austria - 9, IND - India - 1,339, RUS - Russia - 145, BRA - Brazil - 209.

SELECT *
FROM athletes a
RIGHT JOIN countries c
ON a.country = c.country

 

 

Athlete Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
BRA Brazil 209
PostgreSQL에서 쿼리 성능 개선하기

전체 외부 조인 (FULL OUTER JOIN)

SELECT *
FROM athletes a
FULL OUTER JOIN countries c
ON a.country = c.country
  • 쿼리(실행) 계획

여러 요리사가 큰 냄비 주변에 모여 있음

  • 쿼리 플래너 제약
Athlete Nme Country Country1 Name Pop (mil)
Jack AUT AUT Austria 9
Aditya IND IND India 1,339
Mikhail RUS RUS Russia 145
Javier MEX
BRA Brazil 209
PostgreSQL에서 쿼리 성능 개선하기

연습해 봅시다!

PostgreSQL에서 쿼리 성능 개선하기

Preparing Video For Download...