เมื่อคุณทำงานกับฐานข้อมูล คุณอาจต้องการสอบถามตารางตั้งแต่สองตารางขึ้นไปพร้อมกัน และสร้างชุดผลลัพธ์ที่รวมกัน ตัวอย่างเช่น คุณอาจต้องการค้นหาชื่อของพนักงานทุกคนและแผนกที่พวกเขาทำงาน โดยที่ข้อมูลสองส่วนนี้ถูกจัดเก็บไว้ในตารางที่แตกต่างกันสองตาราง
นั่นคือที่ที่ 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
ปฏิบัติการอย่างผู้เชี่ยวชาญ!