जॉइन करते समय फ़िल्टरिंग

PostgreSQL में क्वेरी प्रदर्शन सुधारना

Amy McCarty

Instructor

Joins दोबारा

 

Joins

  • कम-से-कम 1 कॉमन फ़ील्ड से टेबल्स लिंक करें
SELECT * 
FROM TABLE_A AS A
INNER JOIN TABLE_B AS B 
  ON A.NAME = B.NAME

 

डेटा को मिलाने के लिए Joins

  • कई टेबल्स से
  • Inner और Outer

डेटा को फ़िल्टर करने के लिए Joins

  • Inner join
  • Outer join, non-linking join condition के साथ
PostgreSQL में क्वेरी प्रदर्शन सुधारना

Patient और appointments डेटा

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 में क्वेरी प्रदर्शन सुधारना

फ़िल्टर करने के लिए Inner joins

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 patient id से लिंक होती है. Patients टेबल में 777 patient id की कोई लिंक नहीं है.

PostgreSQL में क्वेरी प्रदर्शन सुधारना

फ़िल्टर करने के लिए Inner joins

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
PostgreSQL में क्वेरी प्रदर्शन सुधारना

फ़िल्टर करने के लिए Outer joins

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

Patients टेबल को केवल Males पर फ़िल्टर किया गया है, इसलिए 888 Zhang Wei M घेरा हुआ है. यही एक male रिकॉर्ड है, इसलिए Visits टेबल में यही एक patient id जॉइन होती है.

PostgreSQL में क्वेरी प्रदर्शन सुधारना

फ़िल्टर करने के लिए Outer joins

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
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 patient id से लिंक होती है. Patients टेबल में 777 patient id की कोई लिंक नहीं है.

 

 

 

 

2) WHERE एक टेबल जिसमें 888 Zhang Wei की विज़िट व patient जानकारी एक पंक्ति में है, और 999 Lotte Smith की विज़िट व patient रिकॉर्ड दूसरी पंक्ति में है, जो क्रॉस आउट है.

PostgreSQL में क्वेरी प्रदर्शन सुधारना

फ़िल्टर की गलतियाँ

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
PostgreSQL में क्वेरी प्रदर्शन सुधारना

फ़िल्टर की गलतियाँ

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
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...