SQL Server (Transact-SQL)-এ JOIN একাধিক টেবিল থেকে ডেটা রিট্রিভ করতে ব্যবহৃত হয়, যা ঘটে যখন দুই বা অধিক টেবিল একটি SQL কমান্ডে একসাথে জয়েন হয়। SQL Server-এ ৪ প্রকার 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 মান দুটি টেবিলে সমান।
নির্দিষ্ট ডেটা দিয়ে উদাহরণ দেখি ভালোভাবে বুঝতে।
nhacung টেবিলে ২টি ইনফরমেশন ফিল্ড: 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 |
| 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) শুধু ১ টেবিলে আছে। 500127 (donhang_id) সারি donhang টেবিল থেকে বাদ পড়েছে কারণ 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 JOIN ব্যবহার করে LEFT OUTER 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;
উপরের উদাহরণ টেবিল থেকে সকল সারি এবং শুধু যেসব সারি donhang টেবিলে কন্ডিশন পূরণ করে সেগুলো রিটার্ন করবে। যদি nhacung_id মান nhacung টেবিলে donhang টেবিলে না থাকে, তবে donhang-এর সব ফিল্ড রেজাল্ট টেবিলে NULL দেখাবে।
নিচে নির্দিষ্ট উদাহরণ। nhacung টেবিলে 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 JOIN ব্যবহার করে RIGHT OUTER JOIN-এর পরিবর্তে। এই জয়েন টাইপ ON কন্ডিশনে ডান পাশের টেবিলের সারিগুলো রিটার্ন করে এবং বাকি টেবিল শুধু সেট কন্ডিশন পূরণ করলে নেয়।
RIGHT JOIN সিনট্যাক্স
SELECT cot FROM bang1 RIGHT [OUTER] JOIN bang2 ON bang1.cot = bang2.cot;

RIGHT JOIN চিত্রিত
ফেরত দেওয়া ফলাফল bang2 এবং bang1-এ bang2-এ অ্যাসাইন করা রেকর্ড গুলো (চিত্রের ব্লু এলাকা)।
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 টেবিলে কন্ডিশন পূরণ করে।
যদি nhacung_id মান donhang টেবিলে nhacung টেবিলে না থাকে, তবে nhacung-এর সব ফিল্ড রেজাল্ট টেবিলে NULL দেখাবে।
নিচে নির্দিষ্ট উদাহরণ। nhacung টেবিলে 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 JOIN ব্যবহার করে FULL OUTER 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_id nhacung টেবিলে donhang টেবিলে না থাকে, অথবা donhang টেবিলের nhacung_id nhacung টেবিলে না থাকে, তবে ইনফরমেশন ফিল্ড NULL দেখাবে।
নিচে FULL OUTER JOIN-এর নির্দিষ্ট উদাহরণ। nhacung টেবিলে 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 মান ধারণ করছে।