কম্পিউটার টিউটোরিয়াল

SQL Server-এ JOIN (জয়েন)

SQL Server (Transact-SQL)-এ JOIN একাধিক টেবিল থেকে ডেটা রিট্রিভ করতে ব্যবহৃত হয়, যা ঘটে যখন দুই বা অধিক টেবিল একটি SQL কমান্ডে একসাথে জয়েন হয়। SQL Server-এ ৪ প্রকার JOIN রয়েছে:

  1. INNER JOIN - সরল জয়েন ফরমও বলা হয়
  2. LEFT OUTER JOIN - বা LEFT JOIN
  3. RIGHT OUTER JOIN - বা RIGHT JOIN
  4. FULL OUTER JOIN - বা FULL JOIN

এখন সিনট্যাক্স, ইলাস্ট্রেশন এবং উদাহরণ দেখি JOIN ভালোভাবে বুঝতে।

INNER JOIN

আপনি সম্ভবত ইতিমধ্যে কিছু কমান্ডে INNER JOIN ব্যবহার করেছেন। এটি সবচেয়ে সাধারণ জয়েন টাইপ, যা জয়েন কন্ডিশন পূরণ হলে দুটি টেবিল থেকে সকল সারি রিটার্ন করে।

INNER JOIN সিনট্যাক্স

SELECT cot
FROM bang1
INNER JOIN bang2
ON bang1.cot = bang2.cot;

SQL Server-এ JOIN (জয়েন)
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_idnhacung_ten
10000IBM
10001Hewlett Packard
10002Microsoft
10003NVIDIA

donhang টেবিল ৩ ফিল্ড ধারণ করে: donhang_id, nhacung_id এবং donhang_ngay।

donhang_idnhacung_iddonhang_ngay
500125100002003/05/12
500126100012003/05/13
500127100042003/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_idnhacung_tendonhang_ngay
10000IBM2003/05/12
10001Hewlett Packard2003/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;

SQL Server-এ JOIN (জয়েন)
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_idnhacung_ten
10000IBM
10001Hewlett Packard
10002Microsoft
10003NVIDIA

donhang টেবিলে donhang_id, nhacung_id এবং donhang_ngay।

donhang_idnhacung_iddonhang_ngay
500125100002003/05/12
500126100012003/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_idnhacung_tendonhang_ngay
10000IBM2003/05/12
10001Hewlett Packard2003/05/13
10002MicrosoftNULL
10003NVIDIANULL

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;

SQL Server-এ JOIN (জয়েন)
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_idnhacung_ten
10000Apple
10001Google

donhang টেবিলে donhang_id, nhacung_id এবং donhang_ngay।

donhang_idnhacung_iddonhang_ngay
500125100002003/08/12
500126100012003/08/13
500127100022003/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_iddonhang_ngaynhacung_ten
5001252003/08/12Apple
5001262003/08/13Google
5001272003/08/14NULL

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;

SQL Server-এ JOIN (জয়েন)
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_idnhacung_ten
10000IBM
10001Hewlett Packard
10002Microsoft
10003NVIDIA

donhang টেবিলে donhang_id, nhacung_id এবং donhang_ngay।

donhang_idnhacung_iddonhang_ngay
500125100002003/08/12
500126100012003/08/13
500127100042003/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_idnhacung_tendonhang_ngay
10000IBM2003/08/12
10001Hewlett Packard2003/08/13
10002MicrosoftNULL
10003NVIDIANULL
10004NULL2003/08/14

Microsoft এবং NVIDIA প্রোডাক্ট এখনো রেজাল্ট সেটে আছে কারণ FULL OUTER JOIN ব্যবহার। তখন এই রেকর্ডগুলোর donhang_ngay NULL মান ধারণ করছে। nhacung_id 10004-এর সারিও রেজাল্ট টেবিলে আছে কিন্তু এই রেকর্ডের nhacung_id এবং nhacung_ten NULL মান ধারণ করছে।

  1. SQL Server-এ PROCEDURE (প্রোসিজার/স্টোরড প্রোসিজার)

  2. SQL Server-এ JOIN (জয়েন)

  3. SQL Server-এ FROM ক্লজ

  4. MS SQL Server কী?