Menyaring saat melakukan join

Meningkatkan Performa Kueri di PostgreSQL

Amy McCarty

Instructor

Mengulas join

 

Join

  • Menghubungkan tabel dengan minimal 1 field umum
SELECT * 
FROM TABLE_A AS A
INNER JOIN TABLE_B AS B 
  ON A.NAME = B.NAME

 

Join untuk menggabungkan data

  • Dari beberapa tabel
  • Inner dan outer

Join untuk menyaring data

  • Inner join
  • Outer join dengan kondisi join non-tautan
Meningkatkan Performa Kueri di PostgreSQL

Data pasien dan janji temu

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
Meningkatkan Performa Kueri di PostgreSQL

Inner join untuk menyaring

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

patient_id 999 di tabel Visits terhubung ke patient_id 999 di tabel Patients. patient_id 888 di tabel Visits terhubung ke patient_id 888 di tabel Patients. patient_id 777 di tabel Patients tidak punya tautan.

Meningkatkan Performa Kueri di PostgreSQL

Inner join untuk menyaring

SELECT *
FROM appointments a
INNER JOIN patients p
ON a.patient_id = p.patient_id
Output
visit_id reason patient_id name sex
01 checkup 999 Lotte Smith F
02 infection 888 Zhang Wei M
Meningkatkan Performa Kueri di PostgreSQL

Outer join untuk menyaring

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

Tabel Patients difilter ke Male sehingga pasien 888 Zhang Wei M dilingkari. Ini satu-satunya data laki-laki, jadi hanya ini yang join ke patient_id di tabel Visits.

Meningkatkan Performa Kueri di PostgreSQL

Outer join untuk menyaring

SELECT *
FROM appointments a
LEFT JOIN patients p
  ON a.patient_id = p.patient_id
  AND p.sex = 'M'
Output
visit_id reason patient_id name sex
01 checkup 999
02 infection 888 Zhang Wei M
Meningkatkan Performa Kueri di PostgreSQL

Jebakan saat menyaring

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

1) FROM patient_id 999 di tabel Visits terhubung ke patient_id 999 di tabel Patients. patient_id 888 di tabel Visits terhubung ke patient_id 888 di tabel Patients. patient_id 777 di tabel Patients tidak punya tautan.

 

 

 

 

2) WHERE Tabel dengan kunjungan 888 Zhang Wei beserta data pasien sebagai satu baris, dan kunjungan 999 Lotte Smith serta data pasien sebagai baris kedua yang dicoret.

Meningkatkan Performa Kueri di PostgreSQL

Jebakan saat menyaring

SELECT * 
FROM appointments a
LEFT JOIN patients p 
  ON a.patient_id = p.patient_id
WHERE p.sex = 'M'
Output
visit_id reason patient_id name sex
02 infection 888 Zhang Wei M
Meningkatkan Performa Kueri di PostgreSQL

Jebakan saat menyaring

SELECT * 
FROM appointments a
LEFT JOIN patients p 
  ON a.patient_id = p.patient_id
WHERE p.sex = 'M'
Output
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
Meningkatkan Performa Kueri di PostgreSQL

Jebakan saat menyaring yang dibenahi

 

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'
Meningkatkan Performa Kueri di PostgreSQL

Ayo berlatih!

Meningkatkan Performa Kueri di PostgreSQL

Preparing Video For Download...