Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> SQL

SQL Outer Join

เมื่อคุณทำงานกับฐานข้อมูล คุณอาจต้องการสอบถามตารางตั้งแต่สองตารางขึ้นไปพร้อมกัน และสร้างชุดผลลัพธ์ที่รวมกัน ตัวอย่างเช่น คุณอาจต้องการค้นหาชื่อของพนักงานทุกคนและแผนกที่พวกเขาทำงาน โดยที่ข้อมูลสองส่วนนี้ถูกจัดเก็บไว้ในตารางที่แตกต่างกันสองตาราง

นั่นคือที่ที่ 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 ปฏิบัติการอย่างผู้เชี่ยวชาญ!