JOIN और INNER JOIN में अंतर


997

ये दोनों जोड़ मुझे एक ही परिणाम देंगे:

SELECT * FROM table JOIN otherTable ON table.ID = otherTable.FK

बनाम

SELECT * FROM table INNER JOIN otherTable ON table.ID = otherTable.FK

क्या प्रदर्शन में बयानों के बीच कोई अंतर है या अन्यथा?

क्या यह विभिन्न एसक्यूएल कार्यान्वयनों के बीच भिन्न होता है ?


2
इस प्रश्न को देखें: < stackoverflow.com/questions/448023?sort=newest >
जोएल कोएहॉर्न

6
एक साइड नोट के रूप में: क्रॉस जॉइन ज्वाइन टाइप जानने के लिए अच्छा है (यह इनर जॉइन से अलग है)।
सर्ज

जवाबों:


1091

वे कार्यात्मक रूप से समतुल्य हैं, लेकिन INNER JOINपढ़ने में थोड़ा स्पष्ट हो सकता है, खासकर यदि क्वेरी में अन्य सम्मिलित प्रकार (यानी LEFTया RIGHTया CROSS) शामिल हैं।


11
क्या यह सभी डेटा बेस (उदाहरण के लिए SQL, पोस्टग्रेज?) के लिए सही है?
चोगग

4
यह ANSI SQL मानक है। और देखें: contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt ; en.wikipedia.org/wiki/SQL-92
Indian

14
केवल JOIN लिखकर क्वेरी पर्याप्त स्पष्ट है, INNER सिर्फ शोर है।
इवानजिन्हो

22
शायद मैं एक शुद्धतावादी हूं, लेकिन मुझे लगता है कि एसक्यूएल लिखते समय निहित की तुलना में स्पष्ट होना बेहतर है। विशेष रूप से जटिल प्रश्नों में INNER JOIN अधिक पठनीय है।
21

3
@ इवानजो: कीबोर्ड स्ट्रोक क्वेरी या प्रोग्राम जटिलता का माप नहीं है। वास्तविक जीवन जटिलता स्थिरता से आती है, जहां पठनीयता एक प्रमुख भूमिका निभाती है। तथ्य यह है कि जब यह INNER JOIN कहता है, तो आप यह सुनिश्चित कर सकते हैं कि यह क्या करता है और यह माना जाता है कि यह ठीक है, जबकि एक सादा JOIN आपको या किसी और को छोड़ देगा, यह सोचकर कि मानक कार्यान्वयन के बारे में क्या कहते हैं और INNER था / OUTER / LEFT दुर्घटना या उद्देश्य से छोड़ दिया गया।
तुक्का हापानिमी

243

नहीं, कोई अंतर नहीं है, शुद्ध वाक्यगत चीनी


21
मैं इस कृत्रिम चीनी को नहीं कहूंगा। "डिफ़ॉल्ट" प्रकार में शामिल हों, "आशुलिपि," या "उर्फ," हो सकता है।
mk12

62
कंप्यूटर विज्ञान में, वाक्य रचना चीनी एक प्रोग्रामिंग भाषा के भीतर वाक्यविन्यास है जो चीजों को पढ़ने या व्यक्त करने के लिए आसान बनाने के लिए डिज़ाइन किया गया है । मेरा मानना INNERहै कि इस परिभाषा के अंतर्गत आने की क्षमता कम है।
क्वासोई

13
यदि आप परिभाषा को बहुत शाब्दिक रूप से लागू करते हैं, तो हाँ, लेकिन मैंने हमेशा इसे सिंटेक्स के अधिक दिलचस्प प्रकारों के लिए आरक्षित देखा है, न कि चीजों के लिए वैकल्पिक नाम।
mk12

9
मात्र तथ्य यह है कि यह प्रश्न पूछा जाता है @Quassnoi, शो के अभाव INNERकरता नहीं क्वेरी पढ़ने में आसान बनाने। यदि मुझे पता JOINहै LEFT JOINतो सभी के लिए यह अच्छी तरह से मतलब हो सकता है अगर यह यहाँ के उत्तरों से साफ नहीं हुआ।
मार्टन

2
@Quassnoi आपकी टिप्पणी का आरंभिक विकि विवरण वाक्यगत चीनी का सच है, लेकिन यह एक परिभाषा के रूप में अपर्याप्त है। सिंटैक्टिक शुगरिंग जटिल सिंटैक्स के विशेष मामलों के लिए सरल सिंटैक्स के बारे में है। यह कहना अधिक उचित है कि INNER एक "शोर शब्द" है।
दार्शनिक

143

INNER JOIN = जोइन

यदि आप शब्द का उपयोग करते समय टाइप नहीं करते हैं तो INNER JOIN डिफ़ॉल्ट है

आप LEFT OUTER JOIN या RIGHT OUTER JOIN का भी उपयोग कर सकते हैं, जिस स्थिति में OUTER शब्द वैकल्पिक है, या आप CROSS JOIN निर्दिष्ट कर सकते हैं।

या

एक आंतरिक जुड़ाव के लिए, वाक्यविन्यास है:

चयन करें ...
टेबल से
[INNER] टेबलबीएन शामिल करें

(दूसरे शब्दों में, "INNER" कीवर्ड वैकल्पिक है - परिणाम इसके साथ या इसके बिना समान हैं)



54

इसी तरह OUTER JOINs, शब्द "OUTER"वैकल्पिक है। यह LEFTया RIGHTखोजशब्द है कि JOINएक बनाता है a"OUTER" JOIN

हालाँकि किसी कारण से मैं हमेशा के "OUTER"रूप में उपयोग करता हूं LEFT OUTER JOINऔर कभी नहीं LEFT JOIN, लेकिन मैं कभी भी उपयोग नहीं करता हूं INNER JOIN, बल्कि मैं सिर्फ उपयोग करता हूं "JOIN":

SELECT ColA, ColB, ...
FROM MyTable AS T1
     JOIN MyOtherTable AS T2
         ON T2.ID = T1.ID
     LEFT OUTER JOIN MyOptionalTable AS T3
         ON T3.ID = T1.ID

23
मैं आपके विपरीत हूं: मैं हमेशा "INNER JOIN" कहता हूं लेकिन मैं कभी भी OUTER का उपयोग नहीं करता हूं; इसलिए "लेफ्टिनेंट जॉइन" और "राइट जॉइन"। मुझे लगता है मैं सिर्फ अपने चरित्र को निरंतर रख रहा हूँ!
स्टीफन होल्ट

10
@ जोनाथन। एक आंतरिक जुड़ाव पर दिशा की कोई अवधारणा नहीं है। बाहरी जोड़ बेजोड़ परिणाम सेट का उत्पादन कर सकते हैं और वे दिशा के आधार पर भिन्न हो सकते हैं। आंतरिक को मिलान की आवश्यकता होती है इसलिए दिशा मायने नहीं रखती है।
कार्ल कीनिंगर

32

जैसा कि अन्य उत्तर पहले से ही बताते हैं कि आपके उदाहरण में कोई अंतर नहीं है।

व्याकरण की प्रासंगिक बिट यहाँ प्रलेखित है

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

यह दिखाते हुए कि सभी वैकल्पिक हैं। पृष्ठ आगे स्पष्ट करता है कि

INNERनिर्दिष्ट करता है कि पंक्तियों के सभी मिलान जोड़े वापस आ गए हैं। दोनों तालिकाओं से बेजोड़ पंक्तियाँ। जब कोई ज्वाइन प्रकार निर्दिष्ट नहीं किया जाता है, तो यह डिफ़ॉल्ट है

व्याकरण यह भी इंगित करता है कि एक समय है जहां INNER है , हालांकि जरूरी है। जब एक संकेत इंगित करें।

नीचे दिए गए उदाहरण देखें

CREATE TABLE T1(X INT);
CREATE TABLE T2(Y INT);

SELECT *
FROM   T1
       LOOP JOIN T2
         ON X = Y;

SELECT *
FROM   T1
       INNER LOOP JOIN T2
         ON X = Y;

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

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