SQL Server में JOIN
SQL Server (Transact-SQL) में JOIN का उपयोग कई टेबल्स से डेटा पुनर्प्राप्त करने के लिए किया जाता है, जो तब होता है जब दो या अधिक टेबल्स एक SQL कमांड में एक साथ जुड़ी होती हैं। यहां SQL Server में 4 प्रकार के JOIN हैं:
- INNER JOIN - जिसे सरल कनेक्शन फॉर्म भी कहा जाता है
- LEFT OUTER JOIN - या LEFT JOIN
- RIGHT OUTER JOIN - या RIGHT JOIN
- FULL OUTER JOIN - या FULL JOIN
अब आइए JOIN को बेहतर ढंग से समझने के लिए सिंटैक्स, चित्रण और उदाहरण देखें।
INNER JOIN
सबसे अधिक संभावना है कि आपने कुछ कमांड्स में INNER JOIN का उपयोग किया है। यह सबसे सामान्य प्रकार का कनेक्शन है, जो कनेक्शन शर्तें पूरी होने पर टेबल्स से सभी पंक्तियां वापस करता है।
INNER JOIN सिंटैक्स
SELECT cot
FROM bang1
INNER JOIN bang2
ON bang1.cot = bang2.cot;

INNER JOIN का चित्रण
वापस किया गया परिणाम bang1 और bang2 के बीच सामान्य रिकॉर्ड्स हैं।
INNER JOIN उदाहरण
SELECT nhacung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay
FROM nhacung
INNER JOIN donhang
ON nhacung.nhacung_id = donhang.nhacung_id;
उपरोक्त उदाहरण में वापस किया गया परिणाम 'nhacung' टेबल और 'donhang' टेबल में सूचना की पंक्ति है जब nhacung_id का मान 2 टेबल्स में बराबर होता है।
आइए बेहतर समझने के लिए विशिष्ट डेटा के साथ एक उदाहरण देखें।
nhacung टेबल में 2 सूचना फ़ील्ड हैं: nhacung_id और nhacung_ten।
| nhacung_id | nhacung_ten |
|---|---|
| 10000 | IBM |
| 10001 | Hewlett Packard |
| 10002 | Microsoft |
| 10003 | NVIDIA |
donhang टेबल में 3 फ़ील्ड्स हैं: donhang_id, nhacung_id और donhang_ngay।
| donhang_id | nhacung_id | donhang_ngay |
|---|---|---|
| 500125 | 10000 | 2003/05/12 |
| 500126 | 10001 | 2003/05/13 |
| 500127 | 10004 | 2003/05/14 |
यदि नीचे दिए गए SELECT कमांड को चलाएं (INNER JOIN का उपयोग करके):
SELECT nhacung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay
FROM nhacung
INNER JOIN donhang
ON nhacung.nhacung_id = donhang.nhacung_id;
यह वापस किया गया परिणाम सेट है:
| nhacung_id | nhacung_ten | donhang_ngay |
|---|---|---|
| 10000 | IBM | 2003/05/12 |
| 10001 | Hewlett Packard | 2003/05/13 |
Microsoft और NVIDIA उत्पाद nhacung टेबल से हटा दिए गए हैं क्योंकि nhacung_id (10002 और 10003) केवल 1 टेबल में उपलब्ध है। donhang टेबल से पंक्ति 500127 (donhang_id) हटा दी गई है क्योंकि nhacung_id 10004 nhacung टेबल में नहीं है।
INNER JOIN का पुराना सिंटैक्स
INNER JOIN को पुराने सिंटैक्स के साथ नीचे पुनर्लिखित किया जा सकता है (लेकिन INNER JOIN कीवर्ड वाले सिंटैक्स का उपयोग करने की सिफारिश की जाती है)
SELECT nhacung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay
FROM donhang, nhacung
WHERE nhacung.nhacung_id = donhang.nhacung_id;
LEFT OUTER JOIN
कुछ डेटाबेस LEFT OUTER JOIN के बजाय LEFT JOIN का उपयोग करते हैं। इस प्रकार का कनेक्शन ON कंडीशन में बाएं पैनल में पंक्तियों को वापस करता है और केवल शेष टेबल्स को लेता है जो सेट शर्तों को पूरा करते हैं।
LEFT JOIN सिंटैक्स
SELECT cot
FROM bang1
LEFT [OUTER] JOIN bang2
ON bang1.cot = bang2.cot;

नीले क्षेत्र के परिणाम के रूप में LEFT JOIN चित्रण
वापस किया गया परिणाम bang1 और bang2 में स्थित रिकॉर्ड्स से बना होता है जो bang1 को असाइन किए गए हैं (चित्र में नीला क्षेत्र)।
LEFT JOIN उदाहरण
SELECT nhacung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay
FROM nhacung
LEFT OUTER JOIN donhang
ON nhacung.nhacung_id = donhang.nhacung_id;
उपरोक्त उदाहरण nhacung टेबल से सभी पंक्तियों को वापस करेगा और केवल उन पंक्तियों को जो donhang टेबल में आवश्यकताओं को पूरा करती हैं। यदि nhacung टेबल में nhacung_id मान donhang टेबल में मौजूद नहीं है, तो donhang में सभी फ़ील्ड परिणाम टेबल में परिणाम प्रदर्शित करेंगे।
नीचे एक विशिष्ट उदाहरण है। टेबल में nhacung_id और nhacung_ten हैं।
| nhacung_id | nhacung_ten |
|---|---|
| 10000 | IBM |
| 10001 | Hewlett Packard |
| 10002 | Microsoft |
| 10003 | NVIDIA |
Donhang टेबल में donhang_id, nhacung_id और donhang_ngay शामिल हैं।
| donhang_id | nhacung_id | donhang_ngay |
|---|---|---|
| 500125 | 10000 | 2003/05/12 |
| 500126 | 10001 | 2003/05/13 |
यदि नीचे दिए गए SELECT कमांड को चलाएं:
SELECT nhacung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay
FROM nhacung
LEFT OUTER JOIN donhang
ON nhacung.nhacung_id = donhang.nhacung_id;
परिणाम इस तरह होगा:
| nhacung_id | nhacung_ten | donhang_ngay |
|---|---|---|
| 10000 | IBM | 2003/05/12 |
| 10001 | Hewlett Packard | 2003/05/13 |
| 10002 | Microsoft | NULL |
| 10003 | NVIDIA | NULL |
Microsoft और NVIDIA पंक्तियां अभी भी परिणाम सेट में हैं क्योंकि वे LEFT OUTER JOIN का उपयोग कर रहे हैं (बाएं टेबल की सभी पंक्तियां प्राप्त करें)। इस बीच, इन रिकॉर्ड्स का donhang_ngay NULL होगा।
RIGHT OUTER JOIN
कुछ डेटाबेस RIGHT OUTER JOIN के बजाय RIGHT JOIN का उपयोग करते हैं। इस प्रकार का कनेक्शन ON कंडीशन में दाएं टेबल में पंक्तियों को वापस करता है और केवल शेष टेबल्स को लेता है जो सेट शर्तों को पूरा करते हैं।
RIGHT JOIN सिंटैक्स
SELECT cot
FROM bang1
RIGHT [OUTER] JOIN bang2
ON bang1.cot = bang2.cot;

RIGHT JOIN चित्रण
वापस किया गया परिणाम bang2 और bang2 को असाइन किए गए bang1 में स्थित रिकॉर्ड्स को शामिल करता है (चित्र में नीला क्षेत्र)।
RIGHT JOIN उदाहरण
SELECT donhang.donhang_id, donhang.donhang_ngay, nhacung.nhacung_ten
FROM nhacung
RIGHT OUTER JOIN donhang
ON nhacung.nhacung_id = donhang.nhacung_id;
वापस किया गया परिणाम donhang टेबल में सभी पंक्तियां और केवल nhacung टेबल में आवश्यकताओं को पूरा करने वाली पंक्तियां हैं।
यदि donhang टेबल में nhacung_id मान nhacung टेबल में मौजूद नहीं है, तो nhacung में सभी फ़ील्ड परिणाम टेबल में दिखाई देंगे।
नीचे RIGHT OUTER JOIN का एक विशिष्ट उदाहरण है। टेबल में nhacung_id और nhacung_ten हैं।
| nhacung_id | nhacung_ten |
|---|---|
| 10000 | Apple |
| 10001 |
Donhang टेबल में donhang_id, nhacung_id और donhang_ngay शामिल हैं।
| donhang_id | nhacung_id | donhang_ngay |
|---|---|---|
| 500125 | 10000 | 2003/08/12 |
| 500126 | 10001 | 2003/08/13 |
| 500127 | 10002 | 2003/08/14 |
यदि नीचे दिए गए SELECT कमांड को चलाएं:
SELECT donhang.donhang_id, donhang.donhang_ngay, nhacung.nhacung_ten
FROM nhacung
RIGHT OUTER JOIN donhang
ON nhacung.nhacung_id = donhang.nhacung_id;
परिणाम इस तरह होगा:
| donhang_id | donhang_ngay | nhacung_ten |
|---|---|---|
| 500125 | 2003/08/12 | Apple |
| 500126 | 2003/08/13 | |
| 500127 | 2003/08/14 | NULL |
पंक्ति 500127 (donhang_id) अभी भी परिणाम टेबल में है क्योंकि RIGHT OUTER JOIN उपयोग में है। ध्यान दें कि उस रिकॉर्ड के लिए nhacung_ten में NULL मान है।
FULL OUTER JOIN
कुछ डेटाबेस FULL OUTER JOIN के बजाय FULL JOIN का उपयोग करते हैं। यह कनेक्शन प्रकार बाएं और दाएं टेबल्स में सभी पंक्तियों को वापस करता है और उन शर्तों में NULL मान सेट करता है जो शर्तों को पूरा नहीं करते।
FULL JOIN सिंटैक्स
SELECT cot
FROM bang1
FULL [OUTER] JOIN bang2
ON bang1.cot = bang2.cot;

हरे क्षेत्र के परिणाम के साथ FULL JOIN चित्रण
वापस किया गया परिणाम bang1 और bang2 से सभी रिकॉर्ड्स शामिल करता है।
FULL JOIN उदाहरण
SELECT nhacung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay
FROM nhacung
FULL OUTER JOIN donhang
ON nhacung.nhacung_id = donhang.nhacung_id;
उपरोक्त उदाहरण nhacung टेबल और donhang टेबल से सभी पंक्तियों को वापस करेगा, लेकिन जब शर्त पूरी नहीं होती है, तो मान को परिणाम टेबल में NULL पर सेट किया जाएगा।
यदि nhacung टेबल में nhacung_id donhang टेबल में नहीं है, या donhang टेबल में nhacung_id मान nhacung टेबल में नहीं है, तो सूचना फ़ील्ड NULL प्रदर्शित होंगे।
नीचे FULL OUTER JOIN का एक विशिष्ट उदाहरण है। टेबल में nhacung_id और nhacung_ten हैं।
| nhacung_id | nhacung_ten |
|---|---|
| 10000 | IBM |
| 10001 | Hewlett Packard |
| 10002 | Microsoft |
| 10003 | NVIDIA |
Donhang टेबल में donhang_id, nhacung_id और donhang_ngay शामिल हैं।
| donhang_id | nhacung_id | donhang_ngay |
|---|---|---|
| 500125 | 10000 | 2003/08/12 |
| 500126 | 10001 | 2003/08/13 |
| 500127 | 10004 | 2003/08/14 |
यदि नीचे दिए गए SELECT कमांड को चलाएं:
SELECT nhacung.nhacung_id, nhacung.nhacung_ten, donhang.donhang_ngay
FROM nhacung
FULL OUTER JOIN donhang
ON nhacung.nhacung_id = donhang.nhacung_id;
परिणाम इस तरह होगा:
| nhacung_id | nhacung_ten | donhang_ngay |
|---|---|---|
| 10000 | IBM | 2003/08/12 |
| 10001 | Hewlett Packard | 2003/08/13 |
| 10002 | Microsoft | NULL |
| 10003 | NVIDIA | NULL |
| 10004 | NULL | 2003/08/14 |
Microsoft और NVIDIA उत्पाद अभी भी परिणाम सेट में हैं क्योंकि वे FULL OUTER JOIN का उपयोग कर रहे हैं। फिर इन रिकॉर्ड्स का donhang_ngay NULL मान समाहित करता है। nhacung_id 10004 की पंक्ति भी परिणाम टेबल में है लेकिन इन रिकॉर्ड्स के nhacung_id और nhacung_ten NULL मान समाहित करते हैं।