sql-server - एसक्यूएल सर्वर में बाएं जॉइन बनाम बाएं बाहरी जॉइन जॉइन




tsql left-join outer-join (13)

दस्तावेज़ीकरण के अनुसार: से (ट्रांजैक्ट-एसक्यूएल) :

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

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

उदाहरण के लिए, JOIN क्लॉज का पूरा प्रकार-भाग वैकल्पिक है, यदि आप JOIN निर्दिष्ट करते हैं तो डिफ़ॉल्ट स्थिति INNER । दूसरे शब्दों में, यह कानूनी है:

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

इसके अलावा मैंने इस उत्तर पर छोड़े गए उत्तर पर एक नज़र डालें प्रश्न: एसक्यूएल लाइन से कई टेबल बनाम जुड़ गया? ।

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


इसके बगल में शब्दों में कुछ भी कहना नहीं है:



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

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

    • बाएं आउट - - केवल बाएं टेबल और मिलान की स्थिति में मौजूद डेटा लाता है
    • दाएं आउट - - डेटा को केवल सही तालिका और मिलान की स्थिति में प्रस्तुत करता है
    • पूर्ण आउट - - डेटा को किसी भी या दोनों टेबल प्रस्तुत करता है
    • (बाएं या दाएं या पूर्ण) बाहरी जॉइन लिखा जा सकता है "ओटर" लिखना
  3. क्रॉस जॉइन: सब कुछ सबकुछ में शामिल हो जाता है


अपने प्रश्न का उत्तर देने के लिए बाएं जॉइन और बाएं आउटर जॉइन के बीच कोई अंतर नहीं है, वे बिल्कुल वही हैं जो कहा ...

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

  1. भीतरी
  2. बाहरी
  3. पार करना
  1. अंदरूनी जॉइन - दोनों टेबलों में मौजूद होने पर डेटा लाता है।

  2. बाहरी जॉइन 3 प्रकार के हैं:

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

ध्यान देने योग्य अंक:

  • यदि आप JOIN जिक्र करते हैं तो डिफ़ॉल्ट रूप से यह एक INNER JOIN
  • एक OUTER LEFT होना चाहिए | RIGHT | FULL आप OUTER JOIN नहीं कह सकते हैं।
  • आप OUTER कीवर्ड छोड़ सकते हैं और केवल LEFT JOIN या RIGHT JOIN या FULL JOIN कह सकते हैं।

उन लोगों के लिए जो इन्हें बेहतर तरीके से देखना चाहते हैं, कृपया इस लिंक पर जाएं: एसक्यूएल का एक विज़ुअल स्पष्टीकरण जुड़ता है


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

दिया हुआ

बाएं जुड़ें और बाएं बाहरी शामिल हों

परिणाम

दाएं जुड़ें और दाएं बाहरी शामिल हों

परिणाम


बाएं / दाएं और बाएं आउटर / दाएं बाहरी क्यों हैं? आइए समझाएं कि यह शब्दावली क्यों है। समझें कि बाएं और दाएं जुड़ने के लिए बाहरी शामिल होने के विशिष्ट मामले हैं, और इसलिए बाहरी बाएं / बाहरी अधिकार से कुछ भी नहीं हो सकता है। बाहरी शामिल होने के बावजूद बाहरी जुड़ाव को पूर्ण आउट भी कहा जाता है जो बाहरी शामिल होने के सापेक्ष परिणाम होते हैं। वास्तव में:

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


बाएं जुड़ने और बाएं बाहरी जुड़ने के बीच क्या अंतर है?

कुछ नहीं LEFT JOIN और LEFT OUTER JOIN समकक्ष हैं।


मुझे पता है कि यह पुराना है, हालांकि मैं अपने दो सेंट डालना चाहता था। मैं समझता हूं कि LEFT JOIN LEFT OUTER JOIN के समान होना चाहिए, लेकिन मेरे अनुभव में मैंने एक LEFT JOIN LEFT OUTER JOIN से अलग परिणामों को वापस खींच लिया है। अधिक विशिष्ट और उचित होने के लिए कुंजी शब्द OUTER का उपयोग करना शुरू कर दिया है। पंक्तियां जो LEFT JOIN में वापस आनी चाहिए थी, जहां मैं एक LEFT OUTER JOIN उपयोग नहीं करता था। मैं इसे एक सहयोगी को यह बताने की कोशिश कर रहा था कि जब वह उन पंक्तियों को प्राप्त करने में असमर्थ था, जिसकी उन्हें जरूरत थी, इसलिए मैंने Google को अंतर दिखाने का फैसला किया ताकि उन्हें दिखाने के लिए कुछ प्रकार का समर्थन हो। यह एक SQL सर्वर विशिष्ट चीज़ हो सकती है जिसके बारे में मुझे अनिश्चितता है। मैं कहूंगा कि अच्छे अभ्यास में यह स्पष्ट रूप से यह बताने के लिए और अधिक सलाह दी जाएगी कि आप बाहरी जुड़ना चाहते हैं। एकदम मेरे विचार।


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

  • क्रॉस जॉइन - दोनों टेबलों का एक कार्टेशियन उत्पाद। सभी शामिल हो जाते हैं
  • अंदरूनी जॉइन - एक फ़िल्टर के साथ एक क्रॉस जॉइन जोड़ा गया।
  • बाहरी जॉइन - गायब तत्वों (या तो बाएं या दाएं तालिका से) के साथ एक इंटर्न जॉइन बाद में जोड़ा गया।

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

उम्मीद है कि इससे भ्रमित होने से ज्यादा मदद मिलती है।


Syntactic चीनी, आरामदायक पाठक के लिए यह और अधिक स्पष्ट बनाता है कि शामिल एक आंतरिक नहीं है।


LEFT JOIN पहली (बाएं-सबसे) तालिका से शुरू होने और फिर मिलान करने वाले दूसरे (दाएं-सबसे अधिक) तालिका रिकॉर्ड से जुड़ने में शामिल होता है।

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

DoFactory के अनुसार


एक और उदाहरण क्यों एसक्यूएल वास्तव में पोर्टेबल नहीं है।

MySQL के लिए यह होगा:

update ud, sale
set ud.assid = sale.assid
where sale.udid = ud.id;

अधिक जानकारी के लिए एकाधिक तालिका अद्यतन पढ़ें: http://dev.mysql.com/doc/refman/5.0/en/update.html

UPDATE [LOW_PRIORITY] [IGNORE] table_references
    SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
    [WHERE where_condition]




sql-server tsql left-join outer-join