ความแตกต่างระหว่างLEFT JOIN
และLEFT OUTER JOIN
คืออะไร?
ความแตกต่างระหว่างLEFT JOIN
และLEFT OUTER JOIN
คืออะไร?
คำตอบ:
ตามเอกสารประกอบ: FROM (Transact-SQL) :
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
คำสำคัญOUTER
ถูกทำเครื่องหมายเป็นตัวเลือก (อยู่ในวงเล็บเหลี่ยม) ในกรณีเฉพาะนี้ไม่ว่าคุณจะระบุOUTER
หรือไม่สร้างความแตกต่าง โปรดทราบว่าในขณะที่องค์ประกอบอื่น ๆ ของการเข้าร่วมข้อยังถูกทำเครื่องหมายเป็นตัวเลือกออกจากพวกเขาออกมาจะสร้างความแตกต่าง
ยกตัวอย่างเช่นประเภทส่วนทั้งหมดของJOIN
ประโยคเป็นตัวเลือกในกรณีที่เริ่มต้นคือถ้าคุณเพียงแค่ระบุINNER
JOIN
กล่าวอีกนัยหนึ่งสิ่งนี้ถูกกฎหมาย:
SELECT *
FROM A JOIN B ON A.X = B.Y
นี่คือรายการของไวยากรณ์ที่เทียบเท่า:
A LEFT JOIN B A LEFT OUTER JOIN B
A RIGHT JOIN B A RIGHT OUTER JOIN B
A FULL JOIN B A FULL OUTER JOIN B
A INNER JOIN B A JOIN B
ดูที่คำตอบที่ฉันทิ้งไว้กับคำถาม SO อื่น ๆ : SQL เข้าร่วม vs vs หลาย ๆ ตารางบนบรรทัดจาก? .
INNER JOIN
ทางขวาและJOIN
ทางซ้ายในรายการเทียบเท่า?
JOIN
s เช่นกัน
เพื่อตอบคำถามของคุณไม่มีความแตกต่างระหว่าง LEFT JOIN และ LEFT OUTER OOTER พวกเขาเหมือนกันที่กล่าวว่า
เข้าร่วมภายใน - ดึงข้อมูลหากมีอยู่ในตารางทั้งสอง
OUTER JOINมี3ประเภท:
LEFT OUTER JOIN
- ดึงข้อมูลหากมีอยู่ในตารางด้านซ้ายRIGHT OUTER JOIN
- ดึงข้อมูลถ้ามีอยู่ในตารางด้านขวาFULL OUTER JOIN
- ดึงข้อมูลถ้ามีอยู่ในตารางใดตารางหนึ่งCROSS JOINตามชื่อที่แนะนำนั้นจะ[n X m]
รวมทุกอย่างเข้ากับทุกสิ่ง
คล้ายกับสถานการณ์ที่เราแสดงรายการตารางสำหรับการเข้าร่วม (ในส่วนFROM
คำSELECT
สั่ง) โดยใช้เครื่องหมายจุลภาคเพื่อแยกพวกเขา
คะแนนที่ควรสังเกต:
JOIN
INNER JOIN
OUTER
เข้าร่วมจะต้องเป็นLEFT
| RIGHT
| คุณไม่สามารถเพียงแค่พูดFULL
OUTER JOIN
OUTER
หลักและเพียงแค่พูดLEFT JOIN
หรือหรือRIGHT JOIN
FULL JOIN
สำหรับผู้ที่ต้องการเห็นภาพเหล่านี้ในวิธีที่ดีกว่าโปรดไปที่ลิงค์นี้: คำอธิบายภาพของ SQL Joins
CROSS JOIN
เหมือนกันFULL JOIN
หรือไม่
Cross Join
และFull Outer Join
... ในบางวิธีที่คล้ายกัน
การเข้าร่วมด้านซ้ายและการเข้าร่วมด้านนอกด้านซ้ายแตกต่างกันอย่างไร
ไม่มีอะไร LEFT JOIN
และLEFT OUTER JOIN
เทียบเท่า
OUTER
เป็นตัวเลือก
ฉันเป็น PostgreSQL DBA ตราบใดที่ฉันสามารถเข้าใจความแตกต่างระหว่างด้านนอกหรือด้านนอกเข้าร่วมความแตกต่างเป็นหัวข้อที่มีการอภิปรายมากทั่วอินเทอร์เน็ต จนกระทั่งวันนี้ฉันไม่เคยเห็นความแตกต่างระหว่างสองคนนี้ ดังนั้นฉันจึงไปต่อและพยายามค้นหาความแตกต่างระหว่างสิ่งนั้น ในตอนท้ายฉันอ่านเอกสารทั้งหมดเกี่ยวกับเรื่องนี้และฉันพบคำตอบสำหรับสิ่งนี้
ดังนั้นหากคุณดูเอกสาร (อย่างน้อยใน PostgreSQL) คุณสามารถค้นหาวลีนี้:
อีกนัยหนึ่งคือ
LEFT JOIN
และLEFT OUTER JOIN
เป็นเช่นเดียวกัน
RIGHT JOIN
และRIGHT OUTER JOIN
เป็นเช่นเดียวกัน
ฉันหวังว่ามันจะเป็นประโยชน์สำหรับผู้ที่ยังคงพยายามค้นหาคำตอบ
Left Join
และLeft Outer Join
เป็นหนึ่งและเดียวกัน อดีตคือชวเลขสำหรับหลัง เดียวกันสามารถพูดเกี่ยวกับRight Join
และRight Outer Join
ความสัมพันธ์ การสาธิตจะแสดงให้เห็นถึงความเท่าเทียมกัน ตัวอย่างการใช้งานของแต่ละแบบสอบถามได้รับการให้บริการผ่านทางSQL ซอ เครื่องมือนี้จะช่วยให้มือในการจัดการของแบบสอบถาม
ป.ร. ให้ไว้
ซ้ายเข้าร่วมและซ้ายนอกเข้าร่วม
ผล
เข้าร่วมขวาและเข้าร่วมด้านนอกขวา
ผล
ฉันคิดว่าการคิดถึง Joins ง่ายขึ้นในลำดับต่อไปนี้:
จนกว่าฉันจะหาแบบจำลองที่เรียบง่ายนี้ (ค่อนข้าง) เข้าร่วมเป็นศิลปะสีดำเล็กน้อย ตอนนี้พวกเขามีเหตุผลสมบูรณ์แบบ
หวังว่าสิ่งนี้จะช่วยได้มากกว่าความสับสน
ทำไมซ้าย / ขวาและซ้ายซ้าย / ขวาเหมือนกัน มาอธิบายเหตุผลที่คำศัพท์นี้กันดีกว่า ทำความเข้าใจว่าการรวมซ้ายและขวาเป็นกรณีเฉพาะของการเข้าร่วม OUTER และดังนั้นจึงไม่สามารถเป็นอย่างอื่นได้นอกจากสิทธิซ้าย / ขวาของเรา การเข้าร่วมของ OUTER เรียกว่าFULL OUTER ซึ่งต่างจากการรวมซ้ายและขวาที่เป็นผลลัพธ์บางส่วนของการเข้าร่วม OUTER อันที่จริง:
Table A | Table B Table A | Table B Table A | Table B Table A | Table B
1 | 5 1 | 1 1 | 1 1 | 1
2 | 1 2 | 2 2 | 2 2 | 2
3 | 6 3 | null 3 | null - | -
4 | 2 4 | null 4 | null - | -
null | 5 - | - null | 5
null | 6 - | - null | 6
OUTER JOIN (FULL) LEFT OUTER (partial) RIGHT OUTER (partial)
เป็นที่ชัดเจนแล้วว่าทำไมการดำเนินการเหล่านั้นจึงมีนามแฝงรวมถึงมีเพียง 3 กรณีเท่านั้น: INNER, OUTER, CROSS มีสองกรณีย่อยสำหรับ OUTER คำศัพท์วิธีที่ครูอธิบายสิ่งนี้รวมถึงคำตอบบางอย่างข้างต้นมักทำให้ดูเหมือนว่ามีการเข้าร่วมหลายประเภท แต่จริงๆแล้วมันง่ายมาก
JOIN
หมายถึงINNER JOIN
" เหมาะสมกับเหตุผลของคุณในการเข้าร่วมคำศัพท์ภายนอกได้อย่างไร?
เพื่อตอบคำถามของคุณ
ใน SQL Server รวมไวยากรณ์OUTERเป็นตัวเลือก
มีการกล่าวถึงในบทความ msdn: https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx
ดังนั้นรายการต่อไปนี้จะแสดงการเข้าร่วมไวยากรณ์ที่เทียบเท่าโดยมีและไม่มีOUTER
LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
ไวยากรณ์ที่เทียบเท่าอื่น ๆ
INNER JOIN => JOIN
CROSS JOIN => ,
ขอแนะนำ Dotnet Mob Artice: เข้าร่วมใน SQL Server
C) ด้านนอกเข้าร่วม:
There are three type of outer join
1) Left Outer Join = Left Join
2) Right Outer Join = Right Join
3) Full Outer Join = Full Join
หวังว่ามันจะช่วย
ส่วนใหญ่มีสามประเภทเข้าร่วม
ด้านนอก: มีสามประเภท
ข้ามเข้าร่วม: รวมทุกอย่างเข้ากับทุกอย่าง
น้ำตาลซินแทคติกทำให้ผู้อ่านทั่วไปเห็นได้ชัดว่าการเข้าร่วมไม่ใช่น้ำตาลใน
ในบริบทของคำถามนี้ฉันต้องการโพสต์ตัวดำเนินการ 2 'ใช้' เช่นกัน:
เข้าร่วม :
เข้าร่วมภายใน = เข้าร่วม
เข้าร่วมด้านนอก
ซ้ายเข้าร่วม = ซ้ายเข้าร่วม
เข้าร่วมด้านนอก = เข้าร่วมถูกต้อง
เข้าร่วมเต็มรูปแบบ = เข้าร่วมเต็มรูปแบบ
ข้ามเข้าร่วม
SELF-JOIN : นี่ไม่ใช่การเข้าร่วมประเภทที่แยกต่างหาก นี่คือการเข้าร่วมตารางโดยใช้การรวมข้างต้นอย่างใดอย่างหนึ่ง แต่ฉันรู้สึกว่ามันคุ้มค่าที่จะกล่าวถึงในการสนทนา JOIN เนื่องจากคุณจะได้ยินคำศัพท์นี้จากหลาย ๆ คนในชุมชนนักพัฒนา SQL
ใช้ :
https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/
https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/
ตัวอย่างชีวิตจริงเมื่อใช้ OUTER / CROSS ใช้ใน SQL
ฉันพบว่าตัวดำเนินการประยุกต์ใช้นั้นมีประโยชน์มากเพราะให้ประสิทธิภาพที่ดีกว่าไม่ต้องทำการคำนวณแบบเดียวกันในแบบสอบถามย่อย นอกจากนี้ยังเป็นการแทนที่ฟังก์ชันการวิเคราะห์จำนวนมากใน SQL Server เวอร์ชันเก่า นั่นคือเหตุผลที่ฉันเชื่อว่าหลังจากคุ้นเคยกับ JOINS แล้วผู้พัฒนา SQL หนึ่งคนควรพยายามเรียนรู้ผู้ดำเนินการต่อไป
OUTER
คำหลักที่เป็นตัวเลือก