SQL LEFT JOIN เป็นประเภทหนึ่งของ SQL join คืนทุกแถวจากคอลัมน์ "ซ้าย" ที่ระบุ และแถวที่ตรงเงื่อนไขในคอลัมน์ "ขวา"
ในหลายกรณี การเขียนคิวรี่ใน SQL คุณอาจต้องการโฟกัสแค่ตารางเดียว แต่มีสถานการณ์มากมายที่ต้องสืบค้น 2 ตารางขึ้นไปพร้อมกัน และต้องการผลลัพธ์ที่รวมข้อมูลจากทั้งสองตาราง
ใน SQL เรียกว่า join Joins ช่วยดึงข้อมูลจากหลายตารางและรวมเป็นตารางที่ join แล้ว เช่น join ตาราง employees และ departments เพื่อได้ชื่อแผนกของแต่ละพนักงาน
ในบทช่วยสอนนี้ เราจะแยกวิเคราะห์ประเภท join หนึ่งใน SQL: LEFT JOIN เราจะพูดถึงกรณีที่ LEFT JOIN มีประโยชน์ และวิธีใช้ในคิวรี่ SQL
SQL LEFT JOIN
SQL LEFT JOIN คืนทุกเรคอร์ดจากตาราง "ซ้าย" ที่ระบุในคิวรี่ จับคู่ค่าจากตารางนี้ตามเงื่อนไขของคุณกับตาราง "ขวา" แถวที่จับคู่ได้จะคืนค่าพร้อมกับทุกเรคอร์ดจากตาราง "ซ้าย" LEFT JOINs เป็นประเภทหนึ่งของ SQL outer join
เช่น ใช้ left join เพื่อได้รายชื่อแผนกของแต่ละพนักงาน จะเห็นพนักงานทุกคนแม้บางคนจะยังไม่มีแผนก
ไวยากรณ์พื้นฐานของ LEFT JOIN:
SELECT Table1.Column1, Table2.Column1 FROM Table1 LEFT JOIN Table2 ON Table1.Column2 = Table1.Column2;
เริ่ม join ด้วยคำสั่ง SQL SELECT ตารางในคำสั่ง FROM คือตาราง "ซ้าย" จากนั้นใช้คีย์เวิร์ด LEFT JOIN ระบุตาราง "ขวา"
ใช้คำสั่ง ON กำหนดเงื่อนไขเชื่อมตาราง LEFT JOINS เป็น outer join จึงอาจเห็นเรียกว่า left outer joins
ตัวอย่าง LEFT JOIN SQL
สมมติต้องการรายชื่อแผนกที่แต่ละพนักงานทำงาน ดึงข้อมูลในคิวรี่เดียว คิวรี่:
SELECT employees.name, employees.title, company_departments.name AS DeptName FROM employees LEFT JOIN company_departments ON employees.department_id = company_departments.department_id;
คิวรี่คืน 7 เรคอร์ด:
| name | title | deptname |
| Luke | Sales Associate | Sales |
| Mike | Sales Associate | Sales |
| Hannah | Sales Associate | Sales |
| Geoff | Senior Sales Associate | Sales |
| Alexis | Sales Associate | Sales |
| Emma | Marketing Director | Marketing |
| Jonah | Vice President of Sales | Executive |
(7 แถว)
บรรทัดแรก: ระบุต้องการ 3 คอลัมน์ ชื่อพนักงาน ตำแหน่ง และชื่อแผนก AS DeptName บอกให้คอลัมน์ชื่อแผนกเรียกว่า DeptName
บรรทัดถัดไป: ระบุดึงข้อมูลจากตาราง employees สร้าง LEFT JOIN กับ company_departments บรรทัดสุดท้าย: เชื่อม 2 ตารางด้วยค่าที่เหมือนกัน: department_id
LEFT JOINS คืนทุกแถวจากตารางซ้าย และแถวจากตารางขวาที่ตรงเงื่อนไข join เท่านั้น
ถ้ามีพนักงาน department_id = 9 แต่แผนกนั้นไม่มีอยู่จริง พวกเขาจะยังปรากฏในคิวรี่ ถ้ามีแผนกที่ไม่มีอยู่จริง จะไม่ปรากฏใน JOIN query
ลองรันคิวรี่เดิมอีกครั้ง แต่เพิ่มพนักงานใหม่ในฐานข้อมูล ข้อมูลพนักงานใหม่:
| name | title | department_id |
| Adam | Senior Sales Associate | 9 |
(1 แถว)
Department ID 9 ไม่อยู่ในตาราง company_departments แต่เมื่อรัน left join query เดิม Adam ยังรวมอยู่ เพราะเราใช้ LEFT JOIN ผลลัพธ์:
| name | title | deptname |
| Luke | Sales Associate | Sales |
| Mike | Sales Associate | Sales |
| Hannah | Sales Associate | Sales |
| Geoff | Senior Sales Associate | Sales |
| Alexis | Sales Associate | Sales |
| Emma | Marketing Director | Marketing |
| Jonah | Vice President of Sales | Executive |
| Adam | Senior Sales Associate |
สรุป
SQL LEFT JOINs สืบค้นมากกว่า 1 ตารางและคืนทุกแถวจากตาราง "ซ้าย" ที่ระบุ พร้อมแถวจากตารางขวาที่ตรงเงื่อนไข JOIN
เช่น ต้องการรายชื่อลูกค้าและชื่อแผนความภักดีที่สมัคร หากชื่อแผนอยู่ในตารางอื่น ใช้ left join ดึงได้
เราเขียนคู่มือ How to Learn SQL ช่วยผู้เรียนพัฒนาทักษะ SQL มีรายการแหล่งเรียนรู้ชั้นนำและคำแนะนำจากผู้เชี่ยวชาญ ดูได้ที่หน้า How to Learn SQL