Birleştirirken filtreleme

PostgreSQL'de Sorgu Performansını İyileştirme

Amy McCarty

Instructor

Birleştirmelere dönüş

 

Birleştirmeler (Joins)

  • En az 1 ortak alanla tabloları bağlar
SELECT * 
FROM TABLE_A AS A
INNER JOIN TABLE_B AS B 
  ON A.NAME = B.NAME

 

Veriyi birleştirmek için birleştirmeler

  • Birden çok tablodan
  • İç ve dış

Veriyi filtrelemek için birleştirmeler

  • İç birleştirme
  • Bağlantısız birleştirme koşuluyla dış birleştirme
PostgreSQL'de Sorgu Performansını İyileştirme

Hasta ve randevu verileri

Randevular
visit_id reason patient_id
01 checkup 999
02 infection 888
Hastalar
patient_id name sex
999 Lotte Smith F
888 Zhang Wei M
777 Amelia Hernandez F
PostgreSQL'de Sorgu Performansını İyileştirme

Filtrelemek için iç birleştirme

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

Visits tablosundaki 999 hasta kimliği, Patients tablosundaki 999 ile; 888 de 888 ile eşleşir. Patients tablosundaki 777 için eşleşme yoktur.

PostgreSQL'de Sorgu Performansını İyileştirme

Filtrelemek için iç birleştirme

SELECT *
FROM appointments a
INNER JOIN patients p
ON a.patient_id = p.patient_id
Çıktı
visit_id reason patient_id name sex
01 checkup 999 Lotte Smith F
02 infection 888 Zhang Wei M
PostgreSQL'de Sorgu Performansını İyileştirme

Filtrelemek için dış birleştirme

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

Patients tablosu Erkeklere filtrelenir; erkek olan tek kayıt 888 Zhang Wei M daire içine alınmıştır. Bu tek erkek kayıt, Visits tablosundaki hasta kimliğiyle eşleşen tek kayıttır.

PostgreSQL'de Sorgu Performansını İyileştirme

Filtrelemek için dış birleştirme

SELECT *
FROM appointments a
LEFT JOIN patients p
  ON a.patient_id = p.patient_id
  AND p.sex = 'M'
Çıktı
visit_id reason patient_id name sex
01 checkup 999
02 infection 888 Zhang Wei M
PostgreSQL'de Sorgu Performansını İyileştirme

Filtre hataları

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

1) FROM Visits tablosundaki 999 hasta kimliği, Patients tablosundaki 999 ile; 888 de 888 ile eşleşir. Patients tablosundaki 777 için eşleşme yoktur.

 

 

 

 

2) WHERE 888 Zhang Wei ziyareti ve hasta bilgileri tek satır olarak; 999 Lotte Smith ziyareti ve hasta kaydı ikinci satır olarak gösterilmiş, ikinci satır üstü çizili.

PostgreSQL'de Sorgu Performansını İyileştirme

Filtre hataları

SELECT * 
FROM appointments a
LEFT JOIN patients p 
  ON a.patient_id = p.patient_id
WHERE p.sex = 'M'
Çıktı
visit_id reason patient_id name sex
02 infection 888 Zhang Wei M
PostgreSQL'de Sorgu Performansını İyileştirme

Filtre hataları

SELECT * 
FROM appointments a
LEFT JOIN patients p 
  ON a.patient_id = p.patient_id
WHERE p.sex = 'M'
Çıktı
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'de Sorgu Performansını İyileştirme

Geliştirilmiş filtre hataları

 

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'de Sorgu Performansını İyileştirme

Hadi pratik yapalım!

PostgreSQL'de Sorgu Performansını İyileştirme

Preparing Video For Download...