เมื่อคุณทำงานกับฐานข้อมูล คุณอาจต้องการสอบถามตารางตั้งแต่สองตารางขึ้นไปพร้อมกัน และสร้างชุดผลลัพธ์ที่รวมกัน ตัวอย่างเช่น คุณอาจต้องการค้นหาชื่อของพนักงานทุกคนและแผนกที่พวกเขาทำงาน โดยที่ข้อมูลสองส่วนนี้ถูกจัดเก็บไว้ในตารางที่แตกต่างกันสองตาราง
นั่นคือที่ที่ SQL เข้าร่วมเมื่อคุณเข้าร่วมตาราง คุณสามารถเรียกใช้แบบสอบถามในหลายตารางและสร้างผลลัพธ์ที่รวมกันได้
ในคู่มือนี้ เราจะเน้นไปที่การเข้าร่วมประเภทหนึ่ง:OUTER JOIN . OUTER JOIN ตัวดำเนินการส่งคืนแถวแม้ว่าจะไม่มีแถวที่เกี่ยวข้องในตารางสุดท้าย เราจะพูดถึงสามประเภทของ OUTER JOIN วิธีการทำงาน และวิธีใช้งานใน SQL แบบสอบถาม
SQL เข้าร่วมทบทวน
แบบสอบถาม ซึ่งมักจะเริ่มต้นด้วย SELECT คำสั่งที่ใช้ในการดึงข้อมูลจากฐานข้อมูล โดยปกติ เมื่อคุณเขียนแบบสอบถาม คุณจะเน้นที่การดึงข้อมูลจากตารางหนึ่งและใช้ FROM ข้อเพื่อระบุตารางที่คำสั่งของคุณจะสอบถาม นี่คือไวยากรณ์สำหรับการเขียนมาตรฐาน SQL แบบสอบถาม:
SELECT column_name FROM table_name WHERE certain_conditions_are_met;
นี่คือตัวอย่างคำถามที่จะดึงรายชื่อพนักงานทุกคนใน employees ตาราง:
SELECT name FROM employees;
แบบสอบถามของเราส่งคืนต่อไปนี้:
| ชื่อ |
| ลุค ไมค์ ฮันนาห์ เจฟฟ์ อเล็กซิส เอ็มม่า โยนาห์ อดัม |
(8 แถว)
นอกจากนี้เรายังสามารถใช้ WHERE เพื่อกรองผลลัพธ์ของแบบสอบถามของเราให้รวมเฉพาะระเบียนที่ตรงกับเกณฑ์บางชุดเท่านั้น ตัวอย่างเช่น เราสามารถเขียนคำถามเพื่อค้นหาชื่อพนักงานขายทั้งหมดหรือเจ้าหน้าที่บริหารทั้งหมด
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
แต่ถ้าเราต้องการรับข้อมูลจากหลายตาราง และรวมผลลัพธ์เป็นตารางเดียวล่ะ นั่นคือที่มาของการมีส่วนร่วม
การรวมช่วยให้คุณสามารถสืบค้นหลายตารางและสร้างชุดผลลัพธ์รวมกับแถวที่ตรงกัน การรวมมีสามประเภทหลัก:INNER JOIN , OUTER JOIN และ CROSS JOIN .
INNER JOIN ส่งคืนแถวที่มีข้อมูลที่ตรงกันในตารางที่คุณกำลังสืบค้น ในขณะที่ OUTER JOIN ส่งคืนแถวแม้ว่าจะไม่มีแถวที่เกี่ยวข้องในตารางที่เข้าร่วม CROSS JOIN s เป็นการรวมโดยไม่มีเงื่อนไขการรวม และแต่ละแถวของตารางจะถูกรวมเข้ากับแถวที่สอดคล้องกันของอีกตารางหนึ่ง
SQL Outer Joins
ตามที่เราได้พูดคุยกัน เมื่อคุณกำลังดำเนินการ INNER JOIN แถวจากตารางใดตารางหนึ่งที่ไม่ตรงกันในตารางอื่นจะไม่ถูกส่งกลับในชุดผลลัพธ์ แต่ถ้าเราต้องการได้ค่าเหล่านี้ล่ะ? เราสามารถใช้ OUTER JOIN เพื่อดึงข้อมูลนี้
OUTER JOIN . มีสามประเภท :
LEFT OUTER JOINSส่งคืนแถวที่ไม่ตรงกันจากตารางด้านซ้ายRIGHT OUTER JOINSส่งคืนแถวที่ไม่ตรงกันจากตารางด้านขวาFULL OUTER JOINSส่งคืนแถวที่ไม่ตรงกันจากทุกตาราง
OUTER JOIN s สามารถจับคู่ระเบียนจากทั้งสองตารางได้ตามความต้องการของเรา และจะส่งคืนระเบียนทั้งหมดที่เกี่ยวข้องกับประเภทของการรวมที่เราใช้
SQL เข้าร่วม:ซ้าย
การรวมด้านซ้ายจะคืนค่าแถวทั้งหมดจากตารางด้านซ้าย และแถวจากตารางด้านขวาที่ตรงตามเงื่อนไขการรวม
สมมติว่าเรามีสองตาราง:employees และ company_departments . สมมติว่าเราต้องการได้ชื่อของพนักงานทุกคนรวมถึงชื่อแผนกด้วย แม้ว่าพวกเขาจะไม่ได้มอบหมายให้แผนกใดเลยก็ตาม เราสามารถรับข้อมูลนี้ได้โดยใช้ LEFT JOIN .
ด้านล่างนี้เป็นตัวอย่างของ LEFT JOIN แบบสอบถามที่จะดึงชื่อของพนักงานทุกคนและชื่อแผนกของพวกเขาโดยการรวมตารางพนักงานและ company_departments เข้าด้วยกันโดยใช้ค่าทั่วไป:department_id
SELECT employees.name, company_departments.name FROM employees LEFT JOIN company_departments ON employees.department_id = company_departments.department_id;
แบบสอบถามของเราส่งคืนต่อไปนี้:
| ชื่อ | ชื่อ |
| ลุค | ยอดขาย |
| ไมค์ | ยอดขาย |
| ฮันนาห์ | ยอดขาย |
| เจฟฟ์ | ยอดขาย |
| อเล็กซิส | ยอดขาย |
| เอ็มม่า | การตลาด |
| โจนาห์ | ผู้บริหาร |
| อดัม | |
(8 แถว)
อย่างที่คุณเห็น LEFT JOIN ได้ส่งคืนแถวทั้งหมดจาก employees ตาราง แม้ว่าจะไม่พบแผนกที่พวกเขาทำงานอยู่ใน company_departments ตาราง
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการเข้าร่วมด้านซ้าย คุณสามารถอ่านบทแนะนำ Career Karma ใน SQL ดำเนินการได้ที่นี่
SQL เข้าร่วม:ถูกต้อง
RIGHT JOIN คำสั่งตรงข้ามกับ LEFT JOIN โอเปอเรเตอร์ RIGHT JOIN ส่งคืนแถวทั้งหมดจากตารางด้านขวาและแถวจากตารางด้านซ้ายที่ตรงตามเงื่อนไขการรวม
สมมติว่าเราต้องการรับรายชื่อของทุกแผนกรวมถึงชื่อของพนักงานทุกคนที่ทำงานในแผนกเหล่านั้น และเราต้องการรับข้อมูลสำหรับแผนกที่ไม่มีพนักงานได้รับมอบหมาย เราสามารถใช้แบบสอบถามต่อไปนี้เพื่อรับข้อมูลนี้:
SELECT employees.name, company_departments.name AS "DeptName" FROM employees RIGHT JOIN company_departments ON employees.department_id = company_departments.department_id;
ข้อความค้นหาด้านบนจะคืนค่าต่อไปนี้:
| ชื่อ | “ชื่อแผนก” |
| ลุค | ยอดขาย |
| ไมค์ | ยอดขาย |
| ฮันนาห์ | ยอดขาย |
| เจฟฟ์ | ยอดขาย |
| อเล็กซิส | ยอดขาย |
| เอ็มม่า | การตลาด |
| โจนาห์ | ผู้บริหาร |
| | เงินเดือน |
| | เทคโนโลยีสารสนเทศ |
(9 แถว)
อย่างที่คุณเห็น การสอบถามของเราได้แสดงรายการของแผนกทั้งหมดแล้ว เช่นเดียวกับชื่อของพนักงานทุกคนที่ทำงานในแผนกเหล่านั้น แบบสอบถามยังได้ส่งคืนแผนก Payroll และ Information Technology ซึ่งปัจจุบันไม่มีพนักงาน
นอกจากนี้ ข้อความค้นหาของเราไม่ได้ส่งคืน Adam ซึ่งเป็นพนักงานจาก LEFT JOIN . ของเรา แบบสอบถามที่ไม่ได้ถูกกำหนดให้กับแผนกใด ๆ ทั้งนี้เป็นเพราะ RIGHT JOIN รวมแถวทั้งหมดจากตารางที่ถูกต้อง—company_departments—ที่ตรงตามเงื่อนไขของเรา และ Adam ไม่มีส่วนเกี่ยวข้องใดๆ กับระเบียนใดๆ ในตารางที่ถูกต้อง
การรวมภายนอกของ SQL แบบเต็ม
Full OUTER JOIN s เป็น SQL join . ชนิดที่ไม่ธรรมดา ที่สามารถใช้ส่งคืนระเบียนที่ไม่ตรงกันจากทั้งสองตาราง บ่อยครั้ง full OUTER JOIN s ใช้กับฟังก์ชันการรวมเพื่อทำความเข้าใจว่ามีการทับซ้อนกันมากเพียงใดระหว่างสองตาราง
สมมติว่าเราต้องการรับรายชื่อพนักงานและแผนกทั้งหมด เราสามารถใช้ SQL . ต่อไปนี้ แบบสอบถามเพื่อดึงข้อมูลนั้น:
SELECT employees.name, company_departments.name AS "DeptName" FROM employees FULL OUTER JOIN company_departments ON employees.department_id = company_departments.department_id;
แบบสอบถามของเราส่งคืนต่อไปนี้:
| ชื่อ | “ชื่อแผนก” |
| ลุค | ยอดขาย |
| ไมค์ | ยอดขาย |
| ฮันนาห์ | ยอดขาย |
| เจฟฟ์ | ยอดขาย |
| อเล็กซิส | ยอดขาย |
| เอ็มม่า | การตลาด |
| โจนาห์ | ผู้บริหาร |
| อดัม | |
| | เงินเดือน |
| | เทคโนโลยีสารสนเทศ |
(10 แถว)
ชุดผลลัพธ์ข้างต้นประกอบด้วยรายชื่อพนักงานทุกคน ตลอดจนแผนกที่ได้รับมอบหมาย แม้ว่าจะไม่ได้มอบหมายให้แผนกก็ตาม ชุดผลลัพธ์ยังรวมรายชื่อแผนกทั้งหมด แม้ว่าแผนกจะไม่มีพนักงานที่ได้รับมอบหมายก็ตาม
บทสรุป
Joins เป็น SQL ฟังก์ชันเซิร์ฟเวอร์ที่อนุญาตให้คุณสอบถามตารางตั้งแต่สองตารางขึ้นไปพร้อมๆ กัน และสร้างชุดผลลัพธ์แบบรวม ตัวอย่างเช่น หากคุณต้องการรับรายชื่อพนักงานของบริษัท รวมถึงวันที่ดำเนินการตรวจสอบเงินเดือนล่าสุด คุณสามารถใช้ Joins .
ในบทช่วยสอนนี้ เราเน้นที่ OUTER JOIN s ซึ่งส่งคืนแถวใน join แม้ว่าจะไม่มีแถวที่เกี่ยวข้องในตารางที่เข้าร่วม เรายังพูดถึงสามประเภทหลักของ OUTER JOIN s—LEFT JOIN , RIGHT JOIN และ full OUTER JOIN —และสำรวจวิธีการทำงานจริง
ตอนนี้คุณพร้อมที่จะดำเนินการ SQL JOIN ปฏิบัติการอย่างผู้เชี่ยวชาญ!