การกรองข้อมูลขณะ Join

การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Amy McCarty

Instructor

ทบทวน Join

 

Joins

  • เชื่อมตารางโดยใช้ฟิลด์ที่มีร่วมกันอย่างน้อย 1 ฟิลด์
SELECT * 
FROM TABLE_A AS A
INNER JOIN TABLE_B AS B 
  ON A.NAME = B.NAME

 

Join เพื่อรวมข้อมูล

  • จากหลายตาราง
  • Inner และ outer

Join เพื่อกรองข้อมูล

  • Inner join
  • Outer join ที่มีเงื่อนไขที่ไม่ใช่เงื่อนไขการเชื่อม
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

ข้อมูลผู้ป่วยและการนัดหมาย

การนัดหมาย
visit_id reason patient_id
01 checkup 999
02 infection 888
ผู้ป่วย
patient_id name sex
999 Lotte Smith F
888 Zhang Wei M
777 Amelia Hernandez F
การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Inner join เพื่อกรองข้อมูล

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

patient_id 999 ในตาราง Visits เชื่อมกับ patient_id 999 ในตาราง Patients และ patient_id 888 ในตาราง Visits เชื่อมกับ patient_id 888 ในตาราง Patients ส่วน patient_id 777 ในตาราง Patients ไม่มีการเชื่อมใด

การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Inner join เพื่อกรองข้อมูล

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

Outer join เพื่อกรองข้อมูล

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

ตาราง Patients กรองเฉพาะเพศชาย โดยวงกลมที่ระเบียน patient 888 Zhang Wei M ซึ่งเป็นระเบียนชายเพียงรายเดียว จึงเป็นระเบียนเดียวที่เชื่อมกับ patient_id ในตาราง Visits

การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Outer join เพื่อกรองข้อมูล

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 patient_id 999 ในตาราง Visits เชื่อมกับ patient_id 999 ในตาราง Patients และ patient_id 888 ในตาราง Visits เชื่อมกับ patient_id 888 ในตาราง Patients ส่วน patient_id 777 ในตาราง Patients ไม่มีการเชื่อมใด

 

 

 

 

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

มาฝึกกันเถอะ!

การเพิ่มประสิทธิภาพคิวรีใน PostgreSQL

Preparing Video For Download...