조인하며 필터링

PostgreSQL에서 쿼리 성능 개선하기

Amy McCarty

Instructor

조인 다시 보기

 

조인(Join)

  • 최소 1개의 공통 필드로 테이블 연결
SELECT * 
FROM TABLE_A AS A
INNER JOIN TABLE_B AS B 
  ON A.NAME = B.NAME

 

데이터 결합용 조인

  • 여러 테이블에서
  • 내부/외부 조인

데이터 필터용 조인

  • 내부 조인
  • 비연결 조건을 포함한 외부 조인
PostgreSQL에서 쿼리 성능 개선하기

환자 및 예약 데이터

Appointments
visit_id reason patient_id
01 checkup 999
02 infection 888
Patients
patient_id name sex
999 Lotte Smith F
888 Zhang Wei M
777 Amelia Hernandez F
PostgreSQL에서 쿼리 성능 개선하기

내부 조인으로 필터링

SELECT *
FROM appointments a
INNER JOIN patients p
ON a.patient_id = p.patient_id

Visits 테이블의 999 patient_id가 Patients 테이블의 999 patient_id와 연결됩니다. Visits의 888 patient_id도 Patients의 888과 연결됩니다. Patients의 777은 연결이 없습니다.

PostgreSQL에서 쿼리 성능 개선하기

내부 조인으로 필터링

SELECT *
FROM appointments a
INNER JOIN patients p
ON a.patient_id = p.patient_id
출력
visit_id reason patient_id name sex
01 checkup 999 Lotte Smith F
02 infection 888 Zhang Wei M
PostgreSQL에서 쿼리 성능 개선하기

외부 조인으로 필터링

SELECT *
FROM appointments a
LEFT JOIN patients p
  ON a.patient_id = p.patient_id
  AND p.sex = 'M'

Patients 테이블을 남성으로 필터링하여 888 Zhang Wei M이 원으로 표시됩니다. 유일한 남성 기록이므로 Visits 테이블의 patient_id와 조인되는 유일한 레코드입니다.

PostgreSQL에서 쿼리 성능 개선하기

외부 조인으로 필터링

SELECT *
FROM appointments a
LEFT JOIN patients p
  ON a.patient_id = p.patient_id
  AND p.sex = 'M'
출력
visit_id reason patient_id name sex
01 checkup 999
02 infection 888 Zhang Wei M
PostgreSQL에서 쿼리 성능 개선하기

필터의 함정

SELECT * 
FROM appointments a
LEFT JOIN patients p 
  ON a.patient_id = p.patient_id
WHERE p.sex = 'M'

1) FROM Visits 테이블의 999 patient_id가 Patients 테이블의 999 patient_id와 연결됩니다. Visits의 888 patient_id도 Patients의 888과 연결됩니다. Patients의 777은 연결이 없습니다.

 

 

 

 

2) WHERE 888 Zhang Wei 방문과 환자 정보가 한 행으로, 999 Lotte Smith 방문과 환자 기록이 두 번째 행으로 있으며 두 번째 행은 취소선으로 표시됩니다.

PostgreSQL에서 쿼리 성능 개선하기

필터의 함정

SELECT * 
FROM appointments a
LEFT JOIN patients p 
  ON a.patient_id = p.patient_id
WHERE p.sex = 'M'
출력
visit_id reason patient_id name sex
02 infection 888 Zhang Wei M
PostgreSQL에서 쿼리 성능 개선하기

필터의 함정

SELECT * 
FROM appointments a
LEFT JOIN patients p 
  ON a.patient_id = p.patient_id
WHERE p.sex = 'M'
출력
visit_id reason patient_id name sex
02 infection 888 Zhang Wei M
SELECT *
FROM appointments a
LEFT JOIN patients p
  ON a.patient_id = p.patient_id
  AND p.sex = 'M'
visit_id reason patient_id name sex
01 checkup 999
02 infection 888 Zhang Wei M
PostgreSQL에서 쿼리 성능 개선하기

향상된 필터링 방법

 

SELECT *
FROM appointments a
INNER JOIN patients p
  ON a.patient_id = p.patient_id
WHERE p.sex = 'M'
visit_id reason patient_id name sex
02 infection 888 Zhang Wei M

 

SELECT *
FROM appointments a
INNER JOIN patients p
  ON a.patient_id = p.patient_id
  AND p.sex = 'M'
PostgreSQL에서 쿼리 성능 개선하기

Ayo berlatih!

PostgreSQL에서 쿼리 성능 개선하기

Preparing Video For Download...