แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

ความแตกต่างระหว่างการเข้าร่วมด้านซ้ายขวาและเต็ม

ก่อนหน้านี้เราได้พูดถึงความแตกต่างระหว่าง Inner Join และ Outer Join ซึ่งเราได้รวบรวมภาพรวมของ Outer Join Outer Join เป็นผู้รักษาทูเปิลในผลลัพธ์ซึ่งจะหายไปในขณะที่เข้าร่วมการดำเนินการ ในบทความนี้; เราจะพูดถึงความแตกต่างระหว่างประเภทของการเข้าร่วมรอบนอก การเข้าร่วม Outer มีสามประเภท; เข้าร่วมด้านนอกด้านซ้ายเข้าร่วมด้านนอกขวาและเข้าร่วมเต็มด้านนอก การเข้าร่วมด้านซ้ายด้านขวาและด้านนอกเต็มรูปแบบแตกต่างกันในแผนการดำเนินการและผลลัพธ์ที่ได้ เราสามารถตัดคำ ภายนอก จากซ้ายขวาและรวมนอกทั้งหมด ให้เราตรวจสอบความแตกต่างระหว่าง Left, Right และ Full outer Join ด้วยความช่วยเหลือของกราฟเปรียบเทียบที่แสดงด้านล่าง

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบเข้าร่วม Outer Leftเข้าร่วม Outer ขวาเต็มนอกเข้าร่วม
ขั้นพื้นฐานtuples ทั้งหมดของตารางด้านซ้ายยังคงอยู่ในผลลัพธ์สิ่งอันดับของตารางด้านขวาทั้งหมดจะยังคงอยู่ในผลลัพธ์สิ่งอันดับทั้งจากซ้ายและขวาจะอยู่ในผลลัพธ์
ส่วนขยาย NULLtuples ของตารางด้านซ้ายที่ไม่มี tuple ที่ตรงกันในตารางด้านขวาจะถูกขยายด้วยค่า NULL สำหรับคุณลักษณะของตารางด้านขวาtuples ของตารางด้านขวาที่ไม่มี tuple ที่ตรงกันในตารางด้านซ้ายจะถูกขยายด้วยค่า NULL สำหรับคุณลักษณะของตารางด้านซ้าย
สิ่งอันดับของด้านซ้ายเช่นเดียวกับตารางด้านขวาที่ไม่มีสิ่งอันดับที่ตรงกันในตารางด้านขวาและด้านซ้ายตามลำดับจะถูกขยายด้วยค่า NULL สำหรับคุณลักษณะของตารางด้านขวาและด้านซ้าย

คำจำกัดความของ Left Outer Join

สมมติว่าเรามี“ Table_A ด้านนอกซ้ายเข้าร่วม Table_B “ ดังนั้น Table_A เป็นตาราง ด้านซ้าย ของเราตามที่ปรากฏทางด้านซ้ายของการดำเนินการ ด้านนอกด้านซ้ายเข้าร่วม และ Table_B เป็นตาราง ด้านขวา ของเรา

เริ่มแรกการรวม ภายใน จะถูกนำไปใช้กับ Table_A และ Table_B ซึ่งจะคืนค่า tuple ที่ตรงกันทั้งหมดจากตาราง A และ B

ถัดไปมันจะคืนค่า tuples ทั้งหมดจาก Table_A ที่ไม่มี tuple ที่ตรงกันใน Table_B สิ่งนั้นสิ่งอันดับทูเปิลจะถูกเติมด้วย ค่า NULL สำหรับคุณลักษณะของตารางด้านขวา

ดังนั้น ผลลัพธ์ที่ ได้จากการเข้าร่วม Outer Outer Outer ยังคงรักษา tuples ทั้งหมดจากตารางด้านซ้ายและมีการจับคู่ tuples จากตารางด้านขวาเท่านั้น

ให้เราพูดถึง Left Outer เข้าร่วมกับตัวอย่าง; เรามีสองตารางด้านล่างโต๊ะ นักเรียน และโต๊ะ แผนก

ตอนนี้เราจะสมัครเข้าร่วม Left Outer บนโต๊ะนักเรียนและแผนก

SELECT * จากซ้ายซ้ายของ นักศึกษา เข้าร่วม แผนก
เมื่อวันที่นักเรียน Student_ID = แผนกนักเรียน _ID

ในแบบสอบถามด้านบน Table Student คือตารางด้านซ้ายและ Table เป็นตารางที่ถูกต้อง ดังนั้นตาม Left Outer Join ผลลัพธ์จะต้องมีสิ่งอันดับจากตารางนักเรียนและมีการจับคู่สิ่งอันดับจากตารางแผนก

สังเกตผลลัพธ์ที่ได้จาก Left Outer Join มันมีสิ่งอันดับทั้งหมดจากตารางนักเรียนพร้อมกับสิ่งอันดับที่ตรงกันจากทั้งตารางนักเรียนและแผนก student_id ของจิมมี่โจเซฟแฮร์รี่โต๊ะนักเรียนไม่ปรากฏในตารางแผนก ดังนั้นค่าแอตทริบิวต์ของตารางแผนกสำหรับ Jimmy, Joseph Harry จึงถูกขยายเป็น NULL

นิยามของ Right Outer Join

สมมติว่าเรามี“ Table_A ด้านนอกขวาเข้าร่วม Table_B “ ดังนั้น Table_A เป็นตาราง ด้านซ้าย ของเราซึ่งดูเหมือนว่าจะอยู่ด้านซ้ายของการดำเนินการ ด้านนอกด้านขวา และ Table_B เป็นตาราง ด้านขวา ของเรา

เช่นเดียวกับการเข้าร่วม Left Outer ในตอนแรกการรวม ภายใน จะถูกนำไปใช้กับ Table_A และ Table_B ซึ่งจะส่งคืน tuple ที่ตรงกันทั้งหมดจากตาราง A และ B

ถัดไปมันจะคืนค่า tuples ทั้งหมดจาก Table_B ที่ไม่มี tuple ที่ตรงกันใน Table_A เช่นนั้นสิ่งอันดับทูเปิลจะถูกเติมด้วยค่า NULL สำหรับคุณลักษณะของตารางด้านซ้าย

ดังนั้นผลลัพธ์ที่ได้จากการเข้าร่วมด้านนอกด้านขวาจะเก็บค่า tuples ทั้งหมดจากตารางด้านขวาและมีการจับคู่ tuples จากตารางด้านซ้ายเท่านั้น

ให้เราพูดถึง Right Outer เข้าร่วมกับตัวอย่าง; ด้านบนเรามีสองโต๊ะโต๊ะนักเรียนและโต๊ะแผนก

ตอนนี้เราจะใช้ Right Outer Join เข้า กับโต๊ะนักเรียนและโต๊ะแผนก

เลือก * จาก นักศึกษาด้าน ขวาเข้าร่วม แผนก
เมื่อวันที่นักเรียน Student_ID = แผนกนักเรียน _ID

ในแบบสอบถามด้านบนโต๊ะนักเรียนเป็นตารางด้านซ้ายและตารางแผนกของเราเป็นตารางด้านขวาของเรา ตามการดำเนินการ Outer Outer Join ผลลัพธ์จะต้องรวมสิ่งอันดับทั้งหมดจากตารางแผนกและมีการจับคู่สิ่งอันดับจากตารางนักเรียนเท่านั้น

สังเกตผลที่ได้จากการเข้าร่วมด้านนอกขวา; มันมีสิ่งอันดับทั้งหมดจากตารางแผนกพร้อมกับสิ่งอันดับที่ตรงกันจากทั้งตารางนักเรียนและแผนก Student_ID 10536 และ 00954 ของตารางแผนกไม่ปรากฏในตาราง Student ดังนั้นค่าแอตทริบิวต์ของชื่อสำหรับ Student_ID 10536 และ 00954 จะถูกขยายเป็น NULL

ความหมายของการเข้าร่วม Full Outer

สมมติว่าเรามี“ Table_A Full Outer Join Table_B ” ดังนั้น Table_A เป็นตาราง ด้านซ้าย ของเราซึ่งดูเหมือนว่าจะอยู่ด้านซ้ายของการดำเนินการด้านนอกเต็มรูปแบบและ Table_B เป็นตาราง ด้านขวา ของเรา

Full Outer Join เป็นการ รวมกัน ของทั้งสอง, Left Outer Join และ Right Outer Join เริ่มแรกจะใช้การรวม ภายใน กับ Table_A และ Table_B เพื่อดึงข้อมูลทูเปิลที่ตรงกันจากทั้งสองตาราง จากนั้นมันจะขยาย tuples ของ Table_A ด้วย NULL ที่ไม่มี tuple ที่ตรงกันใน Table_B นอกจากนี้ยังขยาย tuples เหล่านั้นจาก Table_B ด้วย NULL ที่ไม่มี tuple ที่ตรงกันใน Table_A

ดังนั้น Full Outer Join ยังคงรักษาสิ่งอันดับจากซ้ายและตารางด้านขวาไว้พร้อมกับอันดับอันดับที่ตรงกันของทั้งสองตาราง

ให้เราคุยแบบเต็มภายนอกเข้าร่วมกับตัวอย่าง; เรามีสองตารางด้านบนโต๊ะ นักเรียน และโต๊ะ แผนก

ตอนนี้เราจะใช้การเข้าร่วมเต็มรูปแบบภายนอกกับตารางนักศึกษาและตารางแผนก

เลือก * จาก นักศึกษา เข้าร่วมเต็ม แผนก นอก
เมื่อวันที่นักเรียน Student_ID = แผนกนักเรียน _ID

ในแบบสอบถามด้านบนโต๊ะนักเรียนเป็นตารางด้านซ้ายของเราและโต๊ะแผนกเป็นตารางด้านขวาของเรา ตามการรวมภายนอกเต็มผลลัพธ์จะต้องรวมสิ่งอันดับทั้งหมดจากทั้งสองตาราง

สังเกตผลที่ได้จากการเข้าร่วมเต็มรูปแบบนอก มันมีสิ่งอันดับทั้งหมดจากตารางนักเรียนและแผนกพร้อมกับสิ่งอันดับที่ตรงกันจากทั้งตารางนักเรียนและแผนก student_id ของ Jimmy, Joseph Harry เช่น 10026, 02256, 56362 ตามลำดับของตาราง Student ไม่ปรากฏในตารางแผนก ดังนั้นค่าแอตทริบิวต์ของตารางแผนกสำหรับ Jimmy, Joseph Harry ถูกขยายเป็น NULL Student_ID 10536 และ 00954 ของตารางแผนกไม่มีอยู่ในคอลัมน์ Student_ID ของตาราง Student ดังนั้นค่าแอตทริบิวต์ของแอตทริบิวต์ Name สำหรับ Student_ID 10536 และ 00954 จะถูกขยายเป็น NULL

ความแตกต่างที่สำคัญระหว่างการรวมด้านซ้ายขวาและเต็ม

  1. ผลลัพธ์ของการเข้าร่วม Outer Outer Left มี tuples ทั้งหมดของตารางด้านซ้าย ในทำนองเดียวกันผลลัพธ์ของการเข้าร่วม Outer Outer Right มี tuples ทั้งหมดของตารางด้านขวา และผลลัพธ์ของการเข้าร่วม Outer Outer Full มี tuples ทั้งหมดจากด้านซ้ายและตารางด้านขวา
  2. ใน Left Outer Join tuples ของตารางด้านซ้ายที่ไม่มี tuple ที่ตรงกันในตารางด้านขวาจะถูกขยายด้วยค่า Null สำหรับแอตทริบิวต์ของตารางด้านขวา ฝั่งตรงข้ามเป็นกรณีของ Right Outer Join และใน Full Outer Join, tuples จากตารางซ้ายและขวาที่ไม่มี tuples ที่ตรงกันในตารางขวาและซ้ายตามลำดับจะถูกขยายด้วย NULL สำหรับแอตทริบิวต์ของตารางขวาและซ้ายตามลำดับ

สรุป:

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

Top