SQL में क्रॉस जॉइन बनाम इनर जॉइन


150

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

क्रॉस जॉइन:

SELECT 
    Movies.CustomerID, Movies.Movie, Customers.Age, 
    Customers.Gender, Customers.[Education Level], 
    Customers.[Internet Connection], Customers.[Marital Status], 
FROM   
    Customers 
CROSS JOIN 
    Movies

आंतरिक रूप से जुड़ा:

SELECT 
    Movies.CustomerID, Movies.Movie, Customers.Age, 
    Customers.Gender, Customers.[Education Level], 
    Customers.[Internet Connection], Customers.[Marital Status]
FROM   
    Customers 
INNER JOIN 
    Movies ON Customers.CustomerID = Movies.CustomerID

कौन सा बेहतर है और मैं एक का उपयोग क्यों करूंगा?


15
CROSS JOINतालिकाओं के सभी संभव संयोजनों में परिणाम होगा। उदाहरण के लिए 100 पंक्तियों के साथ तालिका 1 और 100 पंक्तियों के साथ तालिका 2 में 10000 रिकॉर्ड होंगे।
बुम्मी

x CROSS JOIN yहैx INNER JOIN y ON 1=1

जवाबों:


119

क्रॉस ज्वाइन पंक्तियों को संयोजित नहीं करता है, यदि आपके पास प्रत्येक तालिका में 100 पंक्तियाँ 1 से 1 मैच के साथ हैं, तो आपको 10.000 परिणाम मिलते हैं, इनरजॉइन केवल उसी स्थिति में 100 पंक्तियाँ लौटाएगा।

ये 2 उदाहरण एक ही परिणाम लौटाएंगे:

क्रॉस जॉइन करें

select * from table1 cross join table2 where table1.id = table2.fk_id

आंतरिक रूप से जुड़ा

select * from table1 join table2 on table1.id = table2.fk_id

अंतिम विधि का उपयोग करें


7
और मुझे विश्वास है कि आप लिख सकते हैं select * from table1 cross join table2 where table1.id = table2.fk_idके रूप में select * from table1, table2 where table1.id = table2.fk_id(जगह cross joinके साथ एक ,)
modulitos

5
@ लुकास जो जुड़ने के लिए पुराना वाक्यविन्यास है, लेकिन यह काम करेगा। मैं क्लाजेन के संस्करण की सिफारिश करता हूं, हालांकि, बहुत अधिक पठनीय।
iliketocode

1
1 से 1 मैच का क्या मतलब है? आपका क्या मतलब है "समान स्थिति"
Jwan622

1
@iliketocode "जॉइन के लिए पुराना सिंटैक्स" स्पष्ट नहीं है, आप SQL-89 और SQL-92 मानकों के बारे में बेहतर बात करेंगे
इवान्जिन्हो

आपका INNER JOIN "100" एक विशेष मामला है जिसे आपने स्पष्ट नहीं किया है और आपने सामान्य मामले की व्याख्या नहीं की है।
फिलीपिक्सी

186

यहाँ क्रॉस जॉइन और इनर जॉइन का सबसे अच्छा उदाहरण है।

निम्नलिखित तालिकाओं पर विचार करें

टेबल: Teacher

x------------------------x
| TchrId   | TeacherName | 
x----------|-------------x
|    T1    |    Mary     |
|    T2    |    Jim      |
x------------------------x

टेबल: Student

x--------------------------------------x
|  StudId  |    TchrId   | StudentName | 
x----------|-------------|-------------x            
|    S1    |     T1      |    Vineeth  |
|    S2    |     T1      |    Unni     |
x--------------------------------------x

1. ININ JOIN

इनर जॉइन उन पंक्तियों का चयन करता है जो दोनों तालिका को संतुष्ट करती हैं

विचार करें कि हमें उन शिक्षकों को खोजने की ज़रूरत है जो कक्षा शिक्षक और उनके अनुरूप छात्र हैं। उस स्थिति में, हम लागू करने की आवश्यकता JOINहै या INNER JOINऔर इच्छा

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

सवाल

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
INNER JOIN #Student S ON T.TchrId = S.TchrId

परिणाम

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

2. क्रॉस जॉइन

क्रॉस जॉइन पहली तालिका से सभी पंक्तियों और दूसरी तालिका से सभी पंक्तियों का चयन करता है और कार्टेशियन उत्पाद के रूप में दिखाता है, अर्थात सभी संभावनाओं

पर विचार करें हमें स्कूल के सभी शिक्षकों और छात्रों को कक्षा शिक्षकों के बावजूद खोजने की आवश्यकता है, हमें आवेदन करने की आवश्यकता है CROSS JOIN

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

सवाल

SELECT T.TchrId,T.TeacherName,S.StudentName 
FROM #Teacher T
CROSS JOIN #Student S 

परिणाम

x--------------------------------------x
|  TchrId  | TeacherName | StudentName | 
x----------|-------------|-------------x            
|    T2    |     Jim     |    Vineeth  |
|    T2    |     Jim     |    Unni     |
|    T1    |     Mary    |    Vineeth  |
|    T1    |     Mary    |    Unni     |
x--------------------------------------x

1
चित्र 2 की कुंजी जटिल है: यह CROSS JOIN के तर्क के तत्वों (रंग अप्रासंगिक) को घेरती है और एक संख्या (मान अप्रासंगिक) इसकी एक पंक्ति है और एक रेखा (रंग अप्रासंगिक) एक परिणाम पंक्ति है। बैग के रूप में तालिकाओं के लिए यह एक वेन आरेख नहीं है: मूल्यों के रूप में पंक्तियों के लिए, यह गलत है ; तत्वों के रूप में पंक्तियों के लिए उन्हें साझा नहीं किया जा सकता है। सेट के रूप में तालिकाओं के लिए आपको वेन आरेख की आवश्यकता नहीं है । चित्र 1 JOIN को समझाने का एक आम भयानक प्रयास है। इसकी कुंजी भी जटिल है: यह केवल सेट के रूप में तालिकाओं के लिए है और केवल समरूप और केवल एक मूल्य है; यह आउटपुट से अलग इनपुट का प्रतिनिधित्व करता है। इसे सामान्य रूप से JOIN के लिए लिखें ।
फिलिप

चित्रा 1 उपयोगी है और सर्कल के वेन आरेखों को जोड़ने के 4 रंगों में से पहले के रूप में सही है: (INNER) JOIN बनाम LEFT, RIGHT & FULL (OUTER) JOIN लेकिन नहीं बनाम CROSS JOIN। अंतःक्रिया पंक्तियाँ JOIN में हैं, बाएँ / दाएँ पंक्तियाँ LEFT / RIGHT JOIN में अतिरिक्त (अशक्त-विस्तारित) पंक्तियाँ हैं। इसमें (INNER) JOIN के एक विशेष मामले के रूप में CROSS JOIN शामिल है जहाँ गैर-चौराहे पर कोई पंक्तियाँ नहीं हैं।
फिलीपिक्सी

1
तुम्हारे सुझाव के लिए धन्यवाद। किसी भी तरह, ओपी ने इन दोनों जोड़ों के बीच अंतर के लिए कहा है। मैंने इस सवाल का जवाब इस तरह से दिया है कि कोई भी शुरुआत करने वाले के बीच के अंतर को आसानी से समझ सकें। जैसा कि आपने कहा, मैंने प्रोडक्शन के माहौल की तरह चाबी नहीं दी है। आसानी से समझने के लिए इसका सिर्फ एक उदाहरण है। और Cross Joinक्या आपको लगता है कि यह सभी पंक्तियों को वापस नहीं करता है जब तक कि कोई Whereखंड नहीं दिया जाता है? आपकी टिप्पणियों से, शुरुआती के लिए भ्रमित होने की अधिक संभावना है !!! @philipxy
सारथ अवनवु

1
मेरी टिप्पणी बताती है कि आरेखों की व्याख्या करना कठिन है, भले ही कोई यह जानता हो कि वे क्या कहना चाह रहे हैं और इस विषय के लिए अनुपयुक्त हैं। "की" (चित्रा 2 या 1 में से) का मेरा मतलब था "आरेख के भागों का क्या मतलब है"। "इसे लिखो" से मेरा मतलब है कि अपने लिए बहुत स्पष्ट रूप से लिखने की कोशिश करें कि आरेख के भागों का क्या मतलब है। आप पाएंगे कि आरेख जटिल हैं और इनर जॉइन बनाम क्रॉस जॉइन को प्रदर्शित नहीं करते हैं! यानी वे आपके उत्तर में नहीं हैं। JOINs क्या करते हैं, यह समझाने में PS तालिका संबंधपरक कुंजियों की कोई भूमिका नहीं है। PPS, जॉन्स के बीच एकमात्र अंतर INNER JOIN है।
फिलीपिक्सी

W3Schools में देखें w3schools.com/sql/sql_join_inner.asp जहां उन्होंने INNER JOIN के लिए इसी प्रकार के आरेख दिए हैं। यह सुनिश्चित करने से पहले कि आप टिप्पणी करने से पहले सही हैं @philipxy
Sarath Avanavu

69

क्रॉस जॉइन = (INNER) जॉइन = कॉमा (",")

TL; DR SQL CROSS JOIN, (INNER) JOIN और अल्पविराम (",") (अल्पविराम के अलावा मूल्यांकन क्रम के लिए पूर्ववर्ती) के बीच एकमात्र अंतर यह है कि (INNER) JOIN में ON है जबकि CROSS JOIN और अल्पविराम नहीं है।


फिर से मध्यवर्ती उत्पादों

तीनों एक मध्यवर्ती वैचारिक एसक्यूएल-शैली रिलेशनल "कार्टेशियन" उत्पाद, उर्फ ​​क्रॉस जॉइन, प्रत्येक तालिका से एक पंक्ति के सभी संभावित संयोजनों का उत्पादन करते हैं। यह चालू और / या WHERE है जो पंक्तियों की संख्या को कम करता है। एसक्यूएल फिडल

SQL मानक उत्पाद (7.5 1.b.ii) के माध्यम से <comma> <comma> (7.7 1.a) और JOIN पर <खोज स्थिति> <comma> plus WHERE (7.7 1.b) के माध्यम से परिभाषित करता है। )।

जैसा कि विकिपीडिया यह कहता है:

क्रॉस जॉइन करें

क्रोस जॉइन ज्वाइन में टेबल से पंक्तियों के कार्टेशियन उत्पाद को लौटाता है। दूसरे शब्दों में, यह उन पंक्तियों का उत्पादन करेगा जो पहली पंक्ति से प्रत्येक पंक्ति को दूसरी तालिका से प्रत्येक पंक्ति के साथ जोड़ती है।

आंतरिक रूप से जुड़ा

[...] ज्वाइन के परिणाम को टेबल में सभी रिकॉर्ड के कार्टेशियन उत्पाद (या क्रॉस जॉइन) को पहले लेने के परिणाम के रूप में परिभाषित किया जा सकता है (टेबल बी में हर रिकॉर्ड के साथ तालिका ए में प्रत्येक रिकॉर्ड का संयोजन) और फिर वापस लौटना सभी रिकॉर्ड जो सम्मिलित होने के लिए संतुष्ट करते हैं।

"इंप्रूव्ड ज्वाइन नोटेशन" सिलेक्ट स्टेटमेंट के FROM क्लॉज में, अलग करने के लिए अल्पविराम का उपयोग करते हुए, केवल जुड़ने के लिए तालिकाओं को सूचीबद्ध करता है। इस प्रकार यह एक क्रॉस जॉइन को निर्दिष्ट करता है

Re OUTER JOIN और उन पर WH vs का उपयोग करते हुए LEFT JOIN (OUTER JOIN) बनाम INNER JOIN में स्थितियां देखें ।

तालिकाओं के बीच कॉलम की तुलना क्यों करें?

जब कोई डुप्लिकेट पंक्तियाँ नहीं होती हैं:

प्रत्येक तालिका उन पंक्तियों को रखती है जो एक निश्चित फिल-इन- [[नाम-]] ब्लैंक स्टेटमेंट टेम्पलेट से एक सही कथन बनाती हैं। (यह एक सच बनाता प्रस्ताव from-- संतुष्ट --a कुछ (विशेषता) विधेय ।)

  • एक आधार तालिका उन पंक्तियों को रखती है जो कुछ डीबीए-दिए गए स्टेटमेंट टेम्प्लेट से एक सच्चा बयान देते हैं:

    /* rows where
    customer C.CustomerID has age C.Age and ...
    */
    FROM Customers C
  • एक जॉइन्ट इंटरमीडिएट उत्पाद उन पंक्तियों को रखता है जो अपने ऑपरेंड के टेम्प्लेट के AND से एक सही कथन बनाते हैं:

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    */
    FROM Customers C CROSS JOIN Movies M
  • आगे टेम्पलेट देने के लिए कहां और किन शर्तों पर विचार किया जाता है। मान फिर से उस टेम्पलेट को संतुष्ट करने वाली पंक्तियाँ हैं:

    /* rows where
        customer C.CustomerID has age C.Age and ...
    AND movie M.Movie is rented by customer M.CustomerID and ...
    AND C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    AND C.Age = 18
    */
    FROM Customers C INNER JOIN Movies M
    ON C.CustomerID = M.CustomerID
    AND C.Age >= M.[Minimum Age]
    WHERE C.Age = 18

विशेष रूप से, तालिकाओं के बीच (SQL) समानता के लिए स्तंभों की तुलना करने का अर्थ है कि टेम्पलेट के शामिल किए गए तालिकाओं के हिस्सों से उत्पाद से रखी गई पंक्तियों में उन स्तंभों के लिए समान (गैर-पूर्ण) मान है। यह सिर्फ संयोग है कि तालिकाओं के बीच समानता की तुलना में बहुत सी पंक्तियाँ आमतौर पर हटा दी जाती हैं - जो पंक्तियाँ आवश्यक हैं और जो आप चाहते हैं, उन्हें चिह्नित करने के लिए पर्याप्त है।

बस आप चाहते हैं पंक्तियों के लिए टेम्पलेट के लिए एसक्यूएल लिखें!

प्रश्नों का अर्थ (और तालिका बनाम स्थिति) देखें:
दो अलग-अलग स्तंभों के लिए किसी अन्य SQL तालिका से मिलान डेटा कैसे प्राप्त करें: इनर जॉइन और / यूनियन?
क्या मानव-पठनीय विवरण से SQL क्वेरी बनाने के लिए अंगूठे का कोई नियम है?

ओवरलोडिंग "क्रॉस जॉइन"

दुर्भाग्य से शब्द "क्रॉस जॉइन" के लिए उपयोग किया जाता है:

  • मध्यवर्ती उत्पाद।
  • क्रोस जॉइन।
  • (INNER) एक या किसी अन्य कॉलम के किसी भी स्तंभ की तुलना किसी भी स्तंभ से नहीं करने वाले पर एक या एक साथ जोड़ें। (चूंकि वह मध्यवर्ती उत्पाद पंक्तियों में से कई को वापस करने के लिए जाता है।)

ये विभिन्न अर्थ भ्रमित हो जाते हैं। (जैसे अन्य उत्तरों और टिप्पणियों में यहां दिया गया है।)

CROSS JOIN vs (INNER) JOIN vs कॉमा का उपयोग करना

आम सम्मेलन है:

  • जब आप केवल तालिकाओं के बीच कॉलम की तुलना नहीं करते हैं, तो क्रोस जॉइन का उपयोग करें। यह दिखाने के लिए कि तुलना की कमी जानबूझकर की गई थी।
  • जब आप तालिकाओं के बीच कॉलम की तुलना करते हैं तो केवल (INNER) का उपयोग करें। (इसके अलावा संभवतः अन्य शर्तें।)
  • अल्पविराम का उपयोग न करें।

आमतौर पर भी शर्तों के तालिकाओं पर नहीं है जहाँ एक WHERE के लिए रखा जाता है। लेकिन उन्हें एक तर्क, सही या पूर्ण (OUTER) जोइन के तर्क के लिए उचित पंक्तियाँ प्राप्त करने के लिए (n INNER) JOIN ON में डालना पड़ सकता है।

पुन: "कॉमा का उपयोग न करें" स्पष्ट जॉइन के साथ कॉमा को मिलाना गुमराह कर सकता है क्योंकि कॉमा में कम पूर्वता है। लेकिन CROSS JOIN, (INNER) JOIN और अल्पविराम के अर्थ में मध्यवर्ती उत्पाद की भूमिका को देखते हुए, कन्वेंशन के लिए तर्क का उपयोग नहीं करने के लिए ऊपर से अस्थिर हैं। एक क्रॉस जॉइन या अल्पविराम सिर्फ एक (INNER) जॉइन की तरह है जो एक सही स्थिति है। एक मध्यवर्ती उत्पाद, पर और जहां सभी संबंधित विधेय में एक परिचय देते हैं। हालाँकि, INNER JOIN ON के बारे में सोचा जा सकता है - केवल आउटपुट पंक्तियों की एक जोड़ी को खोजने पर आउटपुट पंक्ति बनाते हुए, जो ON कंडीशन को संतुष्ट करता है - यह फिर भी क्रॉस ज्वाइन पंक्तियों को पूरा करता है जो कंडीशन को पूरा करते हैं। एकमात्र कारण पर था एसक्यूएल में पूरक अल्पविराम लिखने के लिए था बाहरीमिलती है। बेशक, एक अभिव्यक्ति को इसका अर्थ स्पष्ट करना चाहिए; लेकिन जो स्पष्ट है वह इस बात पर निर्भर करता है कि किन चीजों का मतलब लिया जाता है।

रे वेन आरेख दो इंटरसेक्टिंग सर्कल के साथ एक वेन आरेख समान इनपुट के लिए INNER, LEFT, RIGHT & FULL JOIN के लिए आउटपुट पंक्तियों के बीच के अंतर को स्पष्ट कर सकता है । और जब ON बिना शर्त के TRUE होता है, तो INNER JOIN का परिणाम CROSS JOIN जैसा ही होता है। इसके अलावा यह इनपुट और आउटपुट पंक्तियों को इंटरसेक्ट, यूनिअन और एक्ज़ीक्यूट के लिए चित्रित कर सकता है । और जब दोनों इनपुट में एक ही कॉलम होता है, तो INTERSECT परिणाम मानक SQL NATURAL JOIN के समान होता है, और EXCEPT परिणाम वही होता है जो LEFT & RIGHT JOIN से जुड़े कुछ मुहावरों के लिए होता है। लेकिन यह नहीं बताता है कि (INNER) JOIN सामान्य रूप से कैसे काम करता है। यह सिर्फ पहली नज़र में प्रशंसनीय लगता है । यह इनपुट और / या आउटपुट के हिस्सों की पहचान कर सकता हैON, PKs (प्राथमिक कुंजियाँ), FKs (विदेशी कुंजियाँ) और / या चयन के विशेष मामले । आपको यह देखने के लिए यह करना होगा कि मंडलियों द्वारा दर्शाए गए सेट के तत्व वास्तव में क्या हैं । (कौन-सी मुदित प्रस्तुतियाँ कभी स्पष्ट नहीं होती हैं।) (याद रखें कि सामान्य रूप से जुड़ने के लिए आउटपुट पंक्तियों में इनपुट पंक्तियों से भिन्न शीर्षक होते हैं । और SQL टेबल बैग होते हैं जो नल के साथ पंक्तियों के सेट नहीं होते हैं ।)


6
+1 मुझे यह उत्तर सबसे अच्छा लगता है - दूसरों को लगता है कि परिणाम अलग-अलग होंगे, लेकिन यदि "ON" खंड को "WHERE" से बदल दिया जाए तो परिणाम समान हैं
Ronnie

4
+1 एक INNER JOIN में ON क्लॉज को छोड़ने के लिए धन्यवाद, CROSS JOIN
Cerno

"मध्यवर्ती वैचारिक एसक्यूएल-शैली कार्टेशियन क्रॉस उत्पाद" - यह कहने का एक और तरीका है, "यह वास्तव में ऑर्डर किए गए जोड़े का एक सेट नहीं है, लेकिन मैं 'कार्टेसियन उत्पाद' कहने से बच नहीं सकता हूं?" :) अपने आप में एक गैर-गणितज्ञ के रूप में, एकमात्र संदर्भ जिसमें मैंने कभी भी 'कार्टेशियन उत्पाद' शब्द का सामना किया है, जब कोई एसक्यूएल की व्याख्या कर रहा है CROSS JOIN। मुझे आश्चर्य है कि कार्टेसियन उत्पाद से परिचित व्यक्ति SQL पर कितनी बार आता है, लेकिन यह पता लगाने में असमर्थ है CROSS JOIN
onedaywhen

1
@onedaywhen ऑपरेटर कार्टेशियन उत्पाद कुछ सेट दिए गए ऑर्डर किए गए टुपल्स का एक सेट देता है। परिणाम है एक कार्तीय उत्पाद। रिलेशनल और एसक्यूएल संस्कृतियाँ उन ऑपरेटरों के लिए "कार्टेसियन उत्पाद" का गलत तरीके से दुरुपयोग / अतिभार करती हैं जो कि उकसाने वाले हैं लेकिन कार्टेशियन उत्पाद नहीं हैं । जैसे विकिपीडिया! मैं इसका विरोध करता हूं - यह सिर्फ भ्रमित / भ्रमित करता है। फिर भी यहाँ दुर्भाग्य से मैं केवल यह बताता हूँ कि एसक्यूएल क्रॉस कैसे मेरे शब्दों में काम करता है और विकिपीडिया की ओर आकर्षित होता है। मैं परिणाम को "मध्यवर्ती वैचारिक एसक्यूएल-शैली कार्टेसियन क्रॉस उत्पाद" लेबल करता हूं । हां "कार्टेशियन" उन लोगों के लिए है जो पहले से ही भ्रष्ट हैं जो इसका उपयोग / उम्मीद करते हैं।
फिलीपिक्सी

1
उच्च श्रेणी निर्धारण उत्तरों के विपरीत यह सही उत्तर है। यह एसक्यूएल के साथ विशिष्ट है जो भाषा की मूल बातों को समझने या परिभाषित करने में विफल होने के बावजूद शैक्षिक सामग्री पर हावी चित्रों के साथ सतही, उचित-उचित, अच्छी तरह से स्वरूपित स्पष्टीकरण है।
चार्ल्स रोडी

23

आंतरिक रूप से जुड़ा

वह जुड़ाव जो केवल उन पंक्तियों को प्रदर्शित करता है जिनमें दोनों सम्मिलित तालिकाओं में एक मेल होता है, आंतरिक जुड़ाव के रूप में जाना जाता है। यह क्वेरी में डिफ़ॉल्ट रूप से शामिल होता है और डिज़ाइनर को देखता है।

आंतरिक सम्मिलित होने के लिए सिंटैक्स

SELECT t1.column_name,t2.column_name
FROM table_name1 t1
INNER JOIN table_name2 t2
ON t1.column_name=t2.column_name

क्रॉस जॉइन करें

एक क्रॉस जॉइन जो तालिकाओं के कार्टेशियन उत्पाद का उत्पादन करता है जो जुड़ने में शामिल होता है। कार्टेशियन उत्पाद का आकार पहली तालिका में पंक्तियों की संख्या है जिसे दूसरी तालिका में पंक्तियों की संख्या से गुणा किया गया है।

क्रॉस जॉइन के लिए सिंटैक्स

SELECT * FROM table_name1
CROSS JOIN table_name2

या हम इसे दूसरे तरीके से भी लिख सकते हैं

SELECT * FROM table_name1,table_name2

अब क्रॉस जॉइन के लिए नीचे दिए गए क्वेरी की जाँच करें

उदाहरण

SELECT * FROM UserDetails
CROSS JOIN OrderDetails

या

SELECT * FROM UserDetails, OrderDetails

11

कृपया याद रखें, यदि WHERE क्लॉज जोड़ा जाता है, तो क्रॉस जॉइन एक आंतरिक जॉइन के रूप में व्यवहार करता है। उदाहरण के लिए, निम्न Transact-SQL क्वेरी सेट परिणाम समान है। कृपया http://technet.microsoft.com/en-us/library/ms190690(v=sql.105).aspx देखें


8

क्रोस जॉइन

जैसा कि मैंने इस लेख में बताया है , CROSS JOIN का मतलब कार्टेशियन प्रोडक्ट जनरेट करना है।

एक कार्टेशियन प्रोडक्ट दो सेट ए और बी लेता है और डेटा के दो सेट से जोड़ी रिकॉर्ड के सभी संभावित क्रमांकन उत्पन्न करता है।

उदाहरण के लिए, मान लें कि आपके पास निम्नलिखित ranksऔर suitsडेटाबेस तालिकाएँ हैं:

रैंक और सूट टेबल

और ranksनिम्नलिखित पंक्तियाँ हैं:

| name  | symbol | rank_value |
|-------|--------|------------|
| Ace   | A      | 14         |
| King  | K      | 13         |
| Queen | Q      | 12         |
| Jack  | J      | 11         |
| Ten   | 10     | 10         |
| Nine  | 9      |  9         |

जबकि suitsतालिका में निम्नलिखित रिकॉर्ड हैं:

| name    | symbol |
|---------|--------|
| Club    |       |
| Diamond |       |
| Heart   |       |
| Spade   |       |

निम्नलिखित के रूप में क्रॉस जॉइन क्वेरी के रूप में:

SELECT
   r.symbol AS card_rank,
   s.symbol AS card_suit
FROM
   ranks r
CROSS JOIN
   suits s

ranksऔर suitesजोड़े के सभी संभावित क्रम उत्पन्न करेंगे :

| card_rank | card_suit |
|-----------|-----------|
| A         |          |
| A         |          |
| A         |          |
| A         |          |
| K         |          |
| K         |          |
| K         |          |
| K         |          |
| Q         |          |
| Q         |          |
| Q         |          |
| Q         |          |
| J         |          |
| J         |          |
| J         |          |
| J         |          |
| 10        |          |
| 10        |          |
| 10        |          |
| 10        |          |
| 9         |          |
| 9         |          |
| 9         |          |
| 9         |          |

आंतरिक रूप से जुड़ा

दूसरी ओर, INNER JOIN दो जुड़ने वाले डेटा सेट के कार्टेशियन उत्पाद को वापस नहीं करता है।

इसके बजाय, INNER JOIN बाईं ओर की तालिका से सभी तत्वों को लेता है और उन्हें दाईं ओर की तालिका के रिकॉर्ड से जोड़ता है:

  • यदि कोई रिकॉर्ड दाईं ओर की तालिका से मेल नहीं खाता है, तो बाईं ओर की पंक्ति को परिणाम सेट से फ़िल्टर किया गया है
  • दाईं ओर की मेज पर किसी भी मिलान रिकॉर्ड के लिए, बाईं ओर की पंक्ति को दोहराया जाता है जैसे कि उस रिकॉर्ड और दाएं-साइड टेबल पर उसके सभी संबद्ध चाइल्ड रिकॉर्ड के बीच कार्टेशियन उत्पाद था।

उदाहरण के लिए, यह मानते हुए कि हमारे पास माता - पिता और बच्चे की तालिकाओं के बीच एक-से-कई तालिका संबंध हैं जो निम्नानुसार हैं:postpost_comment

एक से कई तालिका संबंध

अब, यदि postतालिका में निम्नलिखित रिकॉर्ड हैं:

| id | title     |
|----|-----------|
| 1  | Java      |
| 2  | Hibernate |
| 3  | JPA       |

और post_commentsतालिका में ये पंक्तियाँ हैं:

| id | review    | post_id |
|----|-----------|---------|
| 1  | Good      | 1       |
| 2  | Excellent | 1       |
| 3  | Awesome   | 2       |

निम्नलिखित में से एक ININ JOIN क्वेरी:

SELECT
   p.id AS post_id,
   p.title AS post_title,
   pc.review  AS review
FROM post p
INNER JOIN post_comment pc ON pc.post_id = p.id

postउनके सभी संबद्धों के साथ सभी रिकॉर्ड शामिल करने जा रहा है post_comments:

| post_id | post_title | review    |
|---------|------------|-----------|
| 1       | Java       | Good      |
| 1       | Java       | Excellent |
| 2       | Hibernate  | Awesome   |

मूल रूप से, आप INNER JOIN को फ़िल्टर किए गए CROSS JOIN के रूप में सोच सकते हैं जहाँ केवल अंतिम रिकॉर्ड सेट परिणाम में रखे जाते हैं।

INNER JOIN कैसे काम करता है, इस बारे में अधिक जानकारी के लिए इस लेख को देखें


"INNER JOIN दो रिटर्निंग डेटा सेट के कार्टेशियन प्रोडक्ट को वापस नहीं करता है" एक बहुत कुछ है जब x INNER JOIN y को 1 = 1 पर लौटाता है। तो "बजाय" है जब आप जो कहने की कोशिश करते हैं वह वास्तव में करता है (निश्चित रूप से) इसे शर्त 1 = 1 के लिए लौटाएं। सिवाय इसके कि गोलियों में भाषा एक आंतरिक जुड़ाव के परिणाम का स्पष्ट रूप से वर्णन नहीं करती है। यह क्या वर्णन करता है कि यह एक क्रॉस कम पंक्तियाँ हैं जो शर्त को पूरा नहीं करती हैं। इसी तरह, "संयोजन" का उपयोग करके आपकी क्रॉस जॉइन भाषा स्पष्ट नहीं है।
फिलीपिक्सी

7

SQL सर्वर भी सरल नोटेशन को स्वीकार करता है:

SELECT A.F, 
       B.G, 
       C.H 
  FROM TABLE_A A, 
       TABLE_B B, 
       TABLE_C C
 WHERE A.X = B.X 
   AND B.Y = C.Y

इस सरल संकेतन का उपयोग करते हुए, किसी को आंतरिक और क्रॉस जॉइन के बीच अंतर के बारे में परेशान होने की आवश्यकता नहीं है। दो "ऑन" क्लॉज के बजाय, एक "व्हेयर" क्लॉज है जो जॉब करता है। यदि आपको यह पता लगाने में कोई कठिनाई है कि "JOIN" "ऑन" क्लॉज़ कहाँ जाता है, तो "JOIN" नोटेशन को छोड़ दें और ऊपर दिए गए सिंपल का उपयोग करें।

यह धोखा नहीं है।


2

यदि आंतरिक रूप से जुड़ने वाले प्रश्नों को लिखने के दौरान रिकॉर्ड दोनों तालिकाओं से प्राप्त होगा यदि दोनों तालिकाओं पर स्थिति संतुष्ट होती है, या दोनों तालिकाओं में सामान्य स्तंभ का सटीक मिलान होता है।

क्रॉस ज्वाइन का उपयोग करते हुए क्वेरी लिखना परिणाम की तरह है, दोनों तालिकाओं में अभिलेखों की संख्या का कार्टेशियन उत्पाद। उदाहरण यदि टेबल 1 में 2 रिकॉर्ड हैं और तालिका 2 में 3 रिकॉर्ड हैं तो क्वेरी का परिणाम 2 * 3 = 6 रिकॉर्ड है।

तो जब तक आप की जरूरत है कि पार में शामिल होने के लिए मत जाओ।


2
केवल अगर क्लॉज गायब है!
इपिटका

2

क्रॉस ज्वाइन और इनर जॉइन एकमात्र अंतर के साथ समान हैं जो कि आंतरिक जुड़ाव में हम कार्टिलेज उत्पाद के कुछ परिणामों को फ़िल्टर करते हैं

table1
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    option1  |
|    A     |      B1     |    option2  |
x--------------------------------------x

table2
x--------------------------------------x
|  fieldA  |    fieldB   |    fieldC   | 
x----------|-------------|-------------x            
|    A     |      B      |    optionB1 |
|    A1    |      B1     |    optionB2 |
x--------------------------------------x

 cross join
  A,B,option1,A,B,optionB1
  A,B,option1,A1,B1,optionB2
  A,B1,option2,A,B,optionB1
  A,B1,option2,A1,B1,optionB2

 inner join on field1 (only with the value is the same in both tables)
  A,B,option1,A,B,optionB1
  A,B1,option2,A,B,optionB1

 inner join on field1
  A,B,option1,A,B,optionB1

यह हमारे डेटा के डिजाइन पर है जहां हम तय करते हैं कि हम जिस क्षेत्र में शामिल हो रहे हैं उसका केवल एक ही मामला है। केवल क्रॉस में शामिल हों दोनों तालिकाओं में शामिल हों और विशेष बूलियन अभिव्यक्ति को पूरा करने वाली केवल लाइनें प्राप्त करें।

ध्यान दें कि यदि हम जिस फील्ड में हमारे जॉइन कर रहे हैं, वह दोनों टेबल में शून्य होगा, तो हम फिल्टर को पास करेंगे। यह हमें या डेटाबेस निर्माता पर निर्भर है कि वह नल से बचने या अनुमति देने के लिए अतिरिक्त नियम जोड़े। मूल बातों का पालन करना, यह एक क्रॉस जॉइन है, जिसके बाद एक फिल्टर है।


0

आंतरिक जुड़ाव दो तालिकाओं के बीच मिलान किए गए अभिलेखों का परिणाम देगा जहां क्रॉस जुड़ने से आपको दो तालिकाओं के बीच संभावित संयोजन मिलते हैं।


0

A = {1,5,3,4,6,7,9,8} B = {2,8,5,4,3,6,9}

cross join कार्टेशियन उत्पाद A = B = {1,2}, {1,8} ..., {5,2}, {5,8}, {5,5} ..... {3,3} के रूप में कार्य करें ..., {6,6} .... {8,9} और लौटाया यह लंबा परिणाम सेट ।।

जब inner joinकार्टेशियन उत्पाद के माध्यम से इसकी प्रोसेसिंग की जाती है और मिलान जोड़े का चयन करते हैं .. अगर आपको लगता है कि यह दो टेबल की प्राथमिक कुंजी के रूप में जोड़े हैं और ए = बी के लिए क्लॉज खोज पर हैंinner join {5,5}, {4,4}, {6,6} चुनें , {9,9} और इन आईडी से संबंधित चुनिंदा खंडों में पूछा गया कॉलम लौटा दिया।

यदि cross joina = b पर है तो यह उसी परिणाम के रूप में सेट किया जाता है जैसे कि inner join। उस मामले में भी उपयोग करें inner join


-1

यह आपके द्वारा अपेक्षित आउटपुट पर निर्भर करता है।

एक क्रॉस एक तालिका में सभी पंक्तियों से मेल खाती है दूसरी तालिका में सभी पंक्तियों के लिए। किसी फ़ील्ड या फ़ील्ड पर एक आंतरिक जुड़ाव मेल खाता है। यदि आपके पास एक तालिका 10 पंक्तियों के साथ और दूसरी 10 पंक्तियों के साथ है, तो दोनों जोड़ अलग-अलग व्यवहार करेंगे।

क्रॉस जॉइन में 100 पंक्तियां वापस आ जाएंगी और वे संबंधित नहीं होंगी, बस एक कार्टेशियन उत्पाद कहा जाता है। भीतरी जुड़ाव एक दूसरे से रिकॉर्ड का मिलान करेगा। मान लें कि एक के पास प्राथमिक कुंजी है और दूसरे में एक विदेशी कुंजी है, तो आपको 10 पंक्तियाँ वापस मिल जाएंगी।

क्रॉस जॉइन में सीमित सामान्य उपयोगिता है, लेकिन पूर्णता के लिए मौजूद है और क्वेरी में जोड़े गए संबंधों के साथ तालिकाओं में शामिल होने के परिणाम का वर्णन करता है। आप शब्दों या कुछ समान के संयोजनों की सूची बनाने के लिए एक क्रॉस जॉइन का उपयोग कर सकते हैं। दूसरी ओर एक आंतरिक जुड़ाव सबसे आम जुड़ाव है।


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