SQL सर्वर में LEFT JOIN बनाम LEFT OUTER JOIN


1595

बीच क्या अंतर है LEFT JOINऔर LEFT OUTER JOIN?


213
कोई नहीं! OUTERकीवर्ड वैकल्पिक है।
jarlh

9
इस प्रश्न के उत्तर के लिए वेन आरेख उपयुक्त नहीं हैं। इस सवाल का जवाब कोई नहीं है । पहली टिप्पणी देखें।
शाम

3
वेन आरेख आंतरिक बनाम बाहरी जुड़ने के विशेष मामलों के लिए आउटपुट पंक्तियों में अंतर का वर्णन करते हैंयदि कोई नल या डुप्लिकेट पंक्तियां इनपुट नहीं हैं (इसलिए हम पंक्ति-मान मानों का एक सेट होने के लिए एक तालिका ले सकते हैं और सामान्य गणित समानता का उपयोग कर सकते हैं) तो बाएं और दाएं हलकों में आउटपुट टेबल / बाएं और दाएं जुड़ने के सेट होते हैं । लेकिन अगर नल या डुप्लिकेट पंक्तियाँ इनपुट हैं, तो यह समझाना बहुत मुश्किल है कि सर्कल क्या सेट हैं और कैसे वे सेट इनपुट और आउटपुट टेबल / बैग से संबंधित हैं जो वेन आरेख सहायक नहीं हैं। मेरी टिप्पणियाँ यहाँ देखें अन्य वेन आरेख गालियाँ।
शाम

जवाबों:


2236

प्रलेखन के अनुसार: 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 बाईं ओर FROM लाइन पर कई तालिकाओं से जुड़ता है?

यहां छवि विवरण दर्ज करें


135
बिलकुल सही। ANSI-92 संगतता के लिए OUTER की अनुमति है।
सीन रीली

11
@ LasseV.Klslsen यह समतुल्य की सूची में INNER JOINदाईं ओर और बाईं ओर होना बेहतर नहीं होगा JOIN?
नवफाल

8
@ LasseV.Karlsen मेरा मतलब सिर्फ यह था कि बाईं ओर संक्षिप्त रूप है और दाईं ओर विस्तृत रूप है। मुझे लगा कि अगर आप JOINएस के लिए भी इसका पालन करते हैं तो यह इसे सुसंगत बना देगा ।
नवाफाल

30
@ पूरी तरह से आपका विशेषाधिकार है, लेकिन स्पष्ट रूप से 451 अन्य लोगों को लगा कि उत्तर अच्छा था। ईमानदार होने के लिए, यदि एक उत्तर X कहता है और दूसरा उत्तर कहता है कि X और दस्तावेज़ीकरण का संदर्भ देता है, साथ ही साथ दस्तावेज़ के प्रासंगिक टुकड़ों को उत्तर में कॉपी करता है, तो मेरा वोट दूसरे उत्तर में चला जाता है और इसीलिए मैं अपने उत्तरों को लिखता हूं। मैं करता हूँ। कि कोई दावा करता है कि X अच्छा नहीं है। यदि आप एक्स को साबित कर सकते हैं , तो बेहतर है (मामूली सेक्टिव के जवाब के लिए नहीं)। लेकिन, इसके बारे में जो कुछ भी आप चाहते हैं, उसके बारे में सोचने के लिए आपका विशेषाधिकार। मैं सवाल करता हूं कि आपको क्यों लगता है कि यह व्यर्थ है, क्या इसका जवाब किसी भी तरह से गलत है?
लास वी। कार्लसन जू

7
@ पूरी तरह से और ईमानदार होने के लिए, अगर आपको मेरा "लंबे" उत्तर पढ़ने का मन नहीं है, तो मेरा जवाब आपके लिए नहीं था। यह उसी चीज़ के बारे में सोचता हुआ यहाँ आने वाले हर किसी के लिए है और कुछ पृष्ठभूमि चाहता है कि ऐसा क्यों है, और जहाँ अधिक जानकारी मिल सकती है, आदि। स्पष्ट रूप से आप उस तरह के आदमी हैं जो यह उत्तर चाहेगा: "कोई नहीं", लेकिन दुर्भाग्य से यह Stack Overflow पर यहाँ कोई कानूनी जवाब नहीं है, और न ही यह होना चाहिए।
लास वी। कार्लसन जू

699

आपके प्रश्न का उत्तर देने के लिए LEFT JOIN और LEFT OUTER JOIN में कोई अंतर नहीं है, वे बिल्कुल वही हैं जो उन्होंने कहा था ...

शीर्ष स्तर पर मुख्य रूप से 3 प्रकार के जोड़ होते हैं:

  1. भीतरी
  2. बाहरी
  3. पार करना

  1. INNER JOIN - दोनों तालिकाओं में मौजूद होने पर डेटा प्राप्त करता है।

  2. बाहरी शामिल हों के हैं 3 प्रकार:

    1. LEFT OUTER JOIN - बाईं तालिका में मौजूद होने पर डेटा प्राप्त करता है।
    2. RIGHT OUTER JOIN - सही तालिका में मौजूद होने पर डेटा प्राप्त करता है।
    3. FULL OUTER JOIN - यदि दोनों तालिकाओं में मौजूद है तो डेटा प्राप्त करता है।
  3. क्रोस जॉइन , जैसा कि नाम से ही पता चलता है [n X m]कि यह हर चीज में सब कुछ मिला देता है।
    परिदृश्य के समान जहाँ हम अलग करने के लिए अल्पविराम का उपयोग करते हुए ( कथन के FROMखंड में SELECT) शामिल होने के लिए तालिकाओं को सूचीबद्ध करते हैं।


ध्यान दिए जाने वाले बिंदु:

  • यदि आप अभी उल्लेख करते हैं JOINतो डिफ़ॉल्ट रूप से यह एक है INNER JOIN
  • एक OUTERजुड़ना होगा LEFT| RIGHT| FULLआप बस नहीं कह सकते OUTER JOIN
  • आप OUTERकीवर्ड ड्रॉप कर सकते हैं और बस LEFT JOINया कह RIGHT JOINसकते हैं FULL JOIN

जो लोग बेहतर तरीके से इनकी कल्पना करना चाहते हैं, वे इस लिंक पर जाएं: A Visual Explanation of SQL Joins


17
बहुत अच्छा जवाब। यह स्पष्ट हो जाएगा यदि आप कहते हैं "बाईं ओर जॉय - प्रीसेट से दाएं मिलान डेटा के साथ बाईं तालिका से सभी डेटा प्राप्त करता है।" 2.1 के लिए (और इसी तरह के बदलाव के लिए 2.2)
ssh

1
इसके अलावा आप '
टेबल

3
क्षमा करें यदि मैं नेक्रोबंपिंग कर रहा हूं, लेकिन जैसा CROSS JOINहै वैसा ही है FULL JOIN?
टेक्निकलटॉपट

9
@RhysO नहीं, CROSS JOIN एक कार्टेशियन उत्पाद है यानी एक टेबल का CROSS JOIN है, जिसमें n पंक्तियाँ हैं, एक तालिका के साथ, जिसमें m पंक्तियाँ हैं, हमेशा (n * m) पंक्तियाँ देंगी, जबकि एक तालिका के FULL OUTER JOIN, n पंक्तियाँ होने पर, एक तालिका के साथ, मीटर पंक्तियाँ, अधिकतम (n + m) पंक्तियों में देगा
sactiw

1
@sactiw आपके मूल्यवान उत्तर में एक विशेष नोट जोड़ने के बारे में विचार करता है, जिसके बीच अंतर होता है Cross Joinऔर Full Outer Join... किसी तरह से समान लगता है।
मैनुअल जॉर्डन

354

लेफ्ट जॉइन और लेफ्ट ओनर जॉइन में क्या अंतर है?

कुछ नहींLEFT JOINऔर LEFT OUTER JOINबराबर हैं।


13
erm हैलो! यह वोट किसने दिया? LEFT JOIN, LEFT OUTER JOIN के समान है।
मिच गेहूं

7
Microsoft SQL सर्वर, और किसी अन्य SQL- अनुवर्ती RDBMS में यही स्थिति है।
बिल करविन

7
यह अच्छा होगा यदि आप एक संदर्भ या स्पष्टीकरण जोड़ते हैं कि OUTERवैकल्पिक क्यों है।
जीरो 3

7
सबसे संक्षिप्त, यहाँ सटीक उत्तर।
मनची

4
धन्यवाद। स्वीकृत उत्तर के पास बहुत अधिक जानकारी थी, जिसने मुझे और अधिक भ्रमित कर दिया। यह वही है जो मुझे मूल प्रश्न को सीधे बिंदु पर जानने और जवाब देने के लिए आवश्यक था।
बेकन ब्रैड

66

मैं एक PostgreSQL DBA हूं, जहां तक ​​मैं बाहरी या बाहरी जुड़ावों के बीच के अंतर को समझ सकता हूं यह एक ऐसा विषय है जिसकी इंटरनेट पर चारों ओर काफी चर्चा है। आज तक मैंने उन दोनों में कभी अंतर नहीं देखा; इसलिए मैं आगे बढ़ गया और मैं उन लोगों के बीच अंतर खोजने की कोशिश करता हूं। अंत में मैंने इसके बारे में पूरे दस्तावेज पढ़े और मुझे इसका उत्तर मिला,

इसलिए यदि आप दस्तावेज़ीकरण को देखते हैं (कम से कम PostgreSQL में) तो आप यह वाक्यांश पा सकते हैं:

"शब्दों INNERऔर OUTERसभी रूपों में वैकल्पिक हैं। INNERडिफ़ॉल्ट है; LEFT, RIGHTऔर FULLएक बाहरी में शामिल होने के संकेत देते हैं।"

दूसरे शब्दों में,

LEFT JOINऔर LEFT OUTER JOINएक ही हैं

RIGHT JOINऔर RIGHT OUTER JOINएक ही हैं

मुझे उम्मीद है कि यह उन लोगों के लिए एक योगदान हो सकता है जो अभी भी उत्तर खोजने की कोशिश कर रहे हैं।


60

Left Joinऔर Left Outer Joinएक हैं और एक ही हैं । पूर्व बाद के लिए आशुलिपि है। संबंध Right Joinऔर Right Outer Joinसंबंध के बारे में भी यही कहा जा सकता है । प्रदर्शन समानता का चित्रण करेगा। SQL फिडेल के माध्यम से प्रत्येक क्वेरी के कार्य उदाहरण दिए गए हैं । यह उपकरण क्वेरी के हेरफेर पर हाथ के लिए अनुमति देगा।

दिया हुआ

यहां छवि विवरण दर्ज करें

लेफ्ट जॉइन और लेफ्ट आउटर जॉइन

यहां छवि विवरण दर्ज करें

परिणाम

यहां छवि विवरण दर्ज करें


राइट जॉइन और राइट आउटर जॉइन

यहां छवि विवरण दर्ज करें

परिणाम

यहां छवि विवरण दर्ज करें


43

मुझे निम्नलिखित क्रम में जोड़ों के बारे में सोचना आसान लगता है:

  • क्रॉस जॉय - दोनों तालिकाओं का कार्टेशियन उत्पाद। सभी जोड़ यहां से शुरू होते हैं
  • INNER JOIN - एक फ़िल्टर के साथ एक CROSS JOIN।
  • OUTER JOIN - लापता तत्वों (बाएँ या दाएँ टेबल से) के साथ एक ININ JOIN बाद में जोड़ा गया।

जब तक मैंने यह (अपेक्षाकृत) सरल मॉडल नहीं खोजा, जॉन्स हमेशा एक काली कला के एक छोटे से अधिक थे। अब वे सही समझ में आता है।

आशा है कि यह भ्रमित करने में मदद करता है।


इस सवाल का जवाब नहीं है।
फिलीपिक्सी

33

LEFT / RIGHT और LEFT OUTER / RIGHT OUTER समान क्यों हैं? आइए बताते हैं कि यह शब्दावली क्यों। यह समझें कि LEFT और RIGHT जुड़ना OUTER के विशिष्ट मामले हैं, और इसलिए OUTER LEFT / OUTER RIGHT के अलावा और कुछ नहीं हो सकता है। OUTER जॉइन को FULL OUTER भी कहा जाता है क्योंकि LEFT और राइट जॉइन के विपरीत 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 के लिए दो उप-मामलों के साथ। शब्दावली, शिक्षक जिस तरह से यह समझाते हैं, साथ ही साथ कुछ उत्तर भी देते हैं, अक्सर ऐसा लगता है कि विभिन्न प्रकार के बहुत सारे जुड़ाव हैं। लेकिन यह वास्तव में बहुत सरल है।


1
"यह स्पष्ट है कि केवल 3 मामले मौजूद हैं": दिलचस्प लेकिन त्रुटिपूर्ण। इस बात पर विचार करें कि एक आंतरिक जुड़ाव एक विशेष क्रॉस जॉइन है (यानी मूव जहां प्रेजेट में शामिल होता है)। इसके अलावा विचार करें कि बाहरी जुड़ाव बिल्कुल भी शामिल नहीं है, बल्कि एक ऐसा संघ है जहां 'लापता' कॉलम के स्थान पर नल का उपयोग किया जाता है। इसलिए, यह तर्क दिया जा सकता है कि क्रॉस केवल आवश्यक जुड़ाव है। ध्यान दें कि संबंधपरक सिद्धांत में वर्तमान सोच यह है कि प्राकृतिक जुड़ाव सभी आवश्यकताओं को पूरा करता है। एक तरफ: क्या आप समझा सकते हैं कि क्या / कैसे शब्द " JOINआशय INNER JOIN" का अर्थ है बाहरी जुड़ाव के लिए आपके तर्क से फिट बैठता है?
onedaywhen

27

तुम्हारे प्रश्न का उत्तर देने के लिए

Sql सर्वर में वाक्यविन्यास शामिल होता है OUTER वैकल्पिक है

Msdn लेख में इसका उल्लेख किया गया है: https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx

निम्नलिखित तो सूची से पता चलता है के साथ या बिना बराबर वाक्यविन्यास में शामिल होने के बाहरी

LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN

अन्य समतुल्य वाक्य

INNER JOIN => JOIN
CROSS JOIN => ,

Dotnet Mob Artice की जोरदार अनुशंसा करें: Sql सर्वर में शामिल होता है यहां छवि विवरण दर्ज करें


2
यहां वेन आरेखों का पुन: दुरुपयोग प्रश्न पर मेरी टिप्पणी देखें।
फिलीपिक्सी

20

केवल 3 जोड़ हैं:

  • ए) क्रॉस ज्वाइन = कार्टेशियन (जैसे: टेबल ए, टेबल बी)
  • बी) इनर जॉइन = जोइन (जैसे: टेबल ए ज्वाइन / इनर जॉइन टेबल बी)
  • सी) बाहरी शामिल:

       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    

आशा है कि यह मदद करेगा।


1
तो 5 पूरी तरह से जुड़ता है।
Zeek2

19

मुख्य रूप से तीन प्रकार के जोइन होते हैं

  1. इनर: डेटा प्राप्त करता है, जो दोनों तालिकाओं में मौजूद होता है
    • केवल JOIN का अर्थ है INNER JOIN
  2. बाहरी: तीन प्रकार के होते हैं

    • बाईं ओर - - केवल बाईं तालिका और मिलान स्थिति में मौजूद डेटा प्राप्त करता है
    • सही OUTER - - केवल सही तालिका और मिलान स्थिति में मौजूद डेटा प्राप्त करता है
    • पूर्ण ओट - - किसी भी या दोनों तालिका में मौजूद डेटा को लाते हैं
    • (LEFT या RIGHT या FULL) OUTER JOIN को w / o लिखा जा सकता है "OUTER"
  3. क्रॉस जॉइन: हर चीज में सब कुछ मिलाता है


16

सिंथेटिक चीनी, यह आकस्मिक पाठक के लिए और अधिक स्पष्ट करता है कि जुड़ाव एक आंतरिक नहीं है।


2
तो ... क्या एक पूर्ण बादशाह है?
एमी बी

5
tableA पूर्ण OUTER JOIN टेबलबी आपको तीन प्रकार के रिकॉर्ड देगा: तालिका में सभी मिलान तालिका में कोई मिलान रिकॉर्ड के साथ तालिका में सभी रिकॉर्ड, तालिका में कोई मिलान रिकॉर्ड के साथ तालिका में सभी रिकॉर्ड और तालिका में मिलान रिकॉर्ड के साथ तालिका में सभी रिकॉर्ड।
डेव ड्यूप्लांटिस

4

बस इस प्रश्न के संदर्भ में, मैं 2 'APPLY' ऑपरेटरों को भी पोस्ट करना चाहता हूं:

JOINS :

  1. INNER JOIN = जोइन

  2. उमर जोइन

    • बायाँ ओपिन जॉय = लेफ्टिनेंट जॉय

    • RIGHT OUTER JOIN = राइट जॉइन

    • फुल ऑवर जॉइन = फुल जॉय

  3. क्रोस जॉइन

SELF-JOIN : यह बिल्कुल अलग प्रकार की जॉइन नहीं है। यह मूल रूप से उपरोक्त तालिका में से एक का उपयोग करके अपने आप से एक तालिका में शामिल होना है। लेकिन मुझे लगा कि यह संदर्भ में चर्चा के लायक है क्योंकि आप इस शब्द को SQL डेवलपर समुदाय के कई लोगों से सुनेंगे।

आवेदन :

  1. CROSS APPLY - INNER JOIN के समान (लेकिन इसमें लेफ्ट टेबल की प्रत्येक पंक्ति के लिए राइट टेबल में कुछ गणना करने में सक्षम होने का लाभ जोड़ा गया है और केवल मिलान पंक्तियों को वापस करेगा)
  2. OUTER APPLY - बायाँ OUTER JOIN के समान (लेकिन इसमें लेफ्ट टेबल की प्रत्येक पंक्ति के लिए राइट टेबल में कुछ गणना करने में सक्षम होने का लाभ जोड़ा गया है और लेफ्ट टेबल के सभी पंक्तियों को राइट टेबल पर एक मैच के बावजूद वापस कर दिया जाएगा।

https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/

https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/

वास्तविक जीवन उदाहरण, जब SQL में OUTER / CROSS APPLY का उपयोग करें

मैं APPLY ऑपरेटर को बहुत लाभकारी पाता हूँ क्योंकि वे एक उपनगर में समान गणना करने की तुलना में बेहतर प्रदर्शन देते हैं। वे SQL सर्वर के पुराने संस्करणों में कई विश्लेषणात्मक कार्यों का प्रतिस्थापन भी कर रहे हैं। इसीलिए मेरा मानना ​​है कि JOINS के साथ सहज होने के बाद, एक SQL डेवलपर को अगले APPLY ऑपरेटरों को सीखने का प्रयास करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.