यह एक बहुत ही सामान्य प्रश्न है, इसलिए यह उत्तर मेरे द्वारा लिखे गए इस लेख पर आधारित है ।
टेबल रिलेशनशिप
निम्नलिखित post
और post_comment
तालिकाओं को ध्यान में रखते हुए :
post
निम्नलिखित रिकॉर्ड है:
| id | title |
|----|-----------|
| 1 | Java |
| 2 | Hibernate |
| 3 | JPA |
और post_comment
निम्नलिखित तीन पंक्तियाँ हैं:
| id | review | post_id |
|----|-----------|---------|
| 1 | Good | 1 |
| 2 | Excellent | 1 |
| 3 | Awesome | 2 |
SQL INNER JOIN करें
SQL JOIN क्लॉज आपको उन पंक्तियों को संबद्ध करने की अनुमति देता है जो विभिन्न तालिकाओं से संबंधित हैं। उदाहरण के लिए, एक रॉस जॉइन एक कार्टेसियन प्रोडक्ट बनाएगा जिसमें दो ज्वाइनिंग टेबल के बीच पंक्तियों के सभी संभावित संयोजन होंगे।
जबकि CROSS JOIN कुछ परिदृश्यों में उपयोगी है, अधिकांश समय, आप एक विशिष्ट स्थिति के आधार पर तालिकाओं में शामिल होना चाहते हैं। और, यह वह जगह है जहाँ INNER JOIN खेल में आता है।
SQL INNER JOIN हमें एक शर्त के आधार पर दो तालिकाओं के जुड़ने के कार्टेशियन उत्पाद को फ़िल्टर करने की अनुमति देता है, जो ON क्लॉज़ के माध्यम से निर्दिष्ट होता है।
SQL INNER JOIN - "हमेशा सही" स्थिति पर
यदि आप एक "हमेशा सत्य" स्थिति प्रदान करते हैं, तो INNER JOIN सम्मिलित रिकॉर्ड्स को फ़िल्टर नहीं करेगा, और परिणाम सेट में दो सम्मिलित तालिकाओं के कार्टेशियन उत्पाद शामिल होंगे।
उदाहरण के लिए, यदि हम निम्नलिखित SQL INNER JOIN क्वेरी को निष्पादित करते हैं:
SELECT
p.id AS "p.id",
pc.id AS "pc.id"
FROM post p
INNER JOIN post_comment pc ON 1 = 1
हम post
और post_comment
रिकॉर्ड के सभी संयोजन प्राप्त करेंगे :
| p.id | pc.id |
|---------|------------|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 1 |
| 3 | 2 |
| 3 | 3 |
इसलिए, यदि ऑन क्लॉज शर्त "हमेशा सत्य" है, तो INNER JOIN केवल CROSS JOIN क्वेरी के बराबर है:
SELECT
p.id AS "p.id",
pc.id AS "pc.id"
FROM post p
CROSS JOIN post_comment
WHERE 1 = 1
ORDER BY p.id, pc.id
SQL INNER JOIN - "हमेशा झूठी" स्थिति पर
दूसरी ओर, यदि ON क्लॉज की स्थिति "हमेशा झूठी" है, तो सभी सम्मिलित किए गए रिकॉर्डों को फ़िल्टर किया जाएगा और परिणाम सेट खाली होगा।
इसलिए, यदि हम निम्नलिखित SQL INNER JOIN क्वेरी को निष्पादित करते हैं:
SELECT
p.id AS "p.id",
pc.id AS "pc.id"
FROM post p
INNER JOIN post_comment pc ON 1 = 0
ORDER BY p.id, pc.id
हमें कोई परिणाम वापस नहीं मिलेगा:
| p.id | pc.id |
|---------|------------|
ऐसा इसलिए है क्योंकि उपरोक्त क्वेरी निम्न क्रोस जॉइन क्वेरी के बराबर है:
SELECT
p.id AS "p.id",
pc.id AS "pc.id"
FROM post p
CROSS JOIN post_comment
WHERE 1 = 0
ORDER BY p.id, pc.id
SQL INNER JOIN - फॉरेन की और प्राइमरी की कॉलम का उपयोग करके क्लॉज
क्लॉज की सबसे सामान्य स्थिति वह है जो चाइल्ड टेबल में पैरेंट टेबल में प्राइमरी की के कॉलम के साथ चाइल्ड टेबल में फॉरेन की के कॉलम से मेल खाती है, जैसा कि निम्नलिखित क्वेरी द्वारा दर्शाया गया है:
SELECT
p.id AS "p.id",
pc.post_id AS "pc.post_id",
pc.id AS "pc.id",
p.title AS "p.title",
pc.review AS "pc.review"
FROM post p
INNER JOIN post_comment pc ON pc.post_id = p.id
ORDER BY p.id, pc.id
उपरोक्त SQL ININ JOIN क्वेरी को निष्पादित करते समय, हमें निम्न परिणाम सेट मिलते हैं:
| p.id | pc.post_id | pc.id | p.title | pc.review |
|---------|------------|------------|------------|-----------|
| 1 | 1 | 1 | Java | Good |
| 1 | 1 | 2 | Java | Excellent |
| 2 | 2 | 3 | Hibernate | Awesome |
इसलिए, ON रिकॉर्ड जो क्लॉज कंडीशन से मेल खाते हैं, उन्हें क्वेरी रिजल्ट सेट में शामिल किया गया है। हमारे मामले में, परिणाम सेट में post
उनके post_comment
रिकॉर्ड के साथ सभी शामिल हैं । जिन post
पंक्तियों में कोई संबद्धता post_comment
नहीं है उन्हें बाहर रखा गया है क्योंकि वे ऑन क्लॉज स्थिति को संतुष्ट नहीं कर सकते हैं।
पुन: उपरोक्त SQL INNER JOIN क्वेरी निम्न CROSS JOIN क्वेरी के बराबर है:
SELECT
p.id AS "p.id",
pc.post_id AS "pc.post_id",
pc.id AS "pc.id",
p.title AS "p.title",
pc.review AS "pc.review"
FROM post p, post_comment pc
WHERE pc.post_id = p.id
गैर-पंक्तियाँ पंक्तियाँ हैं जो WHERE क्लॉज़ को संतुष्ट करती हैं, और केवल ये रिकॉर्ड परिणाम सेट में शामिल होने जा रहे हैं। यह कल्पना करने का सबसे अच्छा तरीका है कि INNER JOIN क्लॉज कैसे काम करता है।
| p.id | pc.post_id | pc.id | p.title | pc.review |
| ------ | ------------ | ------- | ----------- | --------- - |
| 1 | 1 | 1 | जावा | अच्छा है |
| 1 | 1 | 2 | जावा | उत्कृष्ट |
| 1 | 2 | 3 | जावा | बहुत बढ़िया |
| 2 | 1 | 1 | हाइबरनेट | अच्छा है |
| 2 | 1 | 2 | हाइबरनेट | उत्कृष्ट |
| 2 | 2 | 3 | हाइबरनेट | बहुत बढ़िया |
| 3 | 1 | 1 | जेपीए | अच्छा है |
| 3 | 1 | 2 | जेपीए | उत्कृष्ट |
| 3 | 2 | 3 | जेपीए | बहुत बढ़िया |
निष्कर्ष
एक INNER JOIN स्टेटमेंट को CROSS JOIN के रूप में फिर से लिखा जा सकता है, जिसमें INER JOIN क्वेरी के ON क्लाज में आपके द्वारा उपयोग की गई उसी स्थिति से मेल खाता है।
ऐसा नहीं है कि यह केवल INNER JOIN पर लागू होता है, OUTER JOIN के लिए नहीं।