যখন আপনি একটি ডেটাবেসের সাথে কাজ করেন, তখন আপনি দুটি বা ততোধিক টেবিল একসাথে কোয়েরি করতে চাইতে পারেন এবং একটি একত্রিত ফলাফল সেট তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনি প্রতিটি কর্মীর নাম এবং সে কোন ডিপার্টমেন্টে কাজ করে সেটি জানতে চান, যেখানে এই দুটি তথ্য দুটি আলাদা টেবিলে সংরক্ষিত।
এখানেই SQL জয়েন কাজে লাগে। আপনি টেবিলগুলো জয়েন করলে একাধিক টেবিল জুড়ে কোয়েরি চালাতে পারেন এবং একটি একত্রিত ফলাফল তৈরি করতে পারেন।
এই গাইডে আমরা এক ধরনের জয়েনের ওপর ফোকাস করব: OUTER JOIN। OUTER JOIN অপারেটর সারিগুলো ফেরত দেয় এমনকি যদি চূড়ান্ত টেবিলে তাদের সাথে সম্পর্কিত সারি না থাকে। আমরা OUTER JOIN-এর তিনটি প্রকার, কীভাবে তারা কাজ করে, এবং আপনি কীভাবে আপনার SQL কোয়েরিতে এগুলো ব্যবহার করতে পারেন সেটি আলোচনা করব।
SQL Joins রিফ্রেশার
কোয়েরি, যা সাধারণত SELECT স্টেটমেন্ট দিয়ে শুরু হয়, ডেটাবেস থেকে তথ্য পুনরুদ্ধার করতে ব্যবহৃত হয়। সাধারণত, আপনি একটি কোয়েরি লিখার সময় একটি টেবিল থেকে তথ্য পুনরুদ্ধারের ওপর ফোকাস করেন এবং FROM ক্লজ ব্যবহার করে নির্দিষ্ট করেন আপনার কমান্ড কোন টেবিল কোয়েরি করবে। একটি স্ট্যান্ডার্ড SQL কোয়েরির সিনট্যাক্স:
SELECT column_name FROM table_name WHERE certain_conditions_are_met;
এখানে একটি উদাহরণ যা employees টেবিলের সকল কর্মীর নামের তালিকা পুনরুদ্ধার করবে:
SELECT name FROM employees;
আমাদের কোয়েরি নিচের ফলাফল ফেরত দেয়:
| name |
| Luke Mike Hannah Geoff Alexis Emma Jonah Adam |
(৮ সারি)
আমরা WHERE ক্লজও ব্যবহার করতে পারি আমাদের কোয়েরির ফলাফল ফিল্টার করতে যাতে শুধু নির্দিষ্ট মাপদণ্ড পূরণকারী রেকর্ডগুলো থাকে। উদাহরণস্বরূপ, আমরা সকল সেলস অ্যাসোসিয়েট বা সকল এক্সিকিউটিভ স্টাফের নাম খুঁজে বের করার কোয়েরি লিখতে পারি।
কিন্তু যদি আমরা একাধিক টেবিল থেকে তথ্য পেতে চাই এবং ফলাফল এক টেবিলে একত্রিত করতে চাই? তখন জয়েন কাজে লাগে।
জয়েন আপনাকে একাধিক টেবিল কোয়েরি করতে দেয় এবং মিলে যাওয়া সারিগুলোর সাথে একটি একত্রিত ফলাফল সেট তৈরি করতে দেয়। তিনটি মূল ধরনের জয়েন আছে: INNER JOIN, OUTER JOIN, এবং CROSS JOIN।
INNER JOINগুলো দুই টেবিল দুটোতে মিলে যাওয়া সারিগুলো ফেরত দেয়,حين OUTER JOINগুলো সারি ফেরত দেয় এমনকি যদি জয়েন করা টেবিলে সম্পর্কিত সারি না থাকে। CROSS JOINগুলো হলো জয়েন কন্ডিশন ছাড়া জয়েন, এবং একটি টেবিলের প্রতিটি সারি অন্য টেবিলের সংশ্লিষ্ট সারির সাথে একত্রিত হয়।
SQL Outer Joins
আমরা আলোচনা করেছি, INNER JOIN পারফর্ম করার সময়, যেকোনো একটি টেবিল থেকে অন্য টেবিলে অমিল সারিগুলো ফলাফল সেটে ফেরত দেয়া হয় না। কিন্তু যদি আমরা এই মানগুলো পেতে চাই? আমরা OUTER JOIN ব্যবহার করে এই ডেটা পেতে পারি।
OUTER JOIN-এর তিনটি প্রকার আছে:
LEFT OUTER JOINSবাম টেবিল থেকে অমিল সারিগুলো ফেরত দেয়;RIGHT OUTER JOINSডান টেবিল থেকে অমিল সারিগুলো ফেরত দেয়;FULL OUTER JOINSসকল টেবিল থেকে অমিল সারিগুলো ফেরত দেয়।
OUTER JOINগুলো আমাদের প্রয়োজন অনুযায়ী দুই টেবিল থেকে রেকর্ড মিলিয়ে সকল প্রাসঙ্গিক রেকর্ড ফেরত দিতে সক্ষম।
SQL Joins: Left (বাম)
লেফট জয়েন বাম টেবিলের সকল সারি এবং ডান টেবিলের সারিগুলো ফেরত দেয় যেখানে জয়েন কন্ডিশন পূরণ হয়।
ধরুন у আমাদের দুটি টেবিল আছে: employees এবং company_departments। এখন ধরি আমরা প্রতিটি কর্মীর নাম এবং তাদের ডিপার্টমেন্টের নাম পেতে চাই, এমনকি যদি তারা কোন ডিপার্টমেন্টে নিযুক্ত না হয়। আমরা এই তথ্য LEFT JOIN ব্যবহার করে পেতে পারি।
নিচে একটি LEFT JOIN কোয়েরির উদাহরণ দেওয়া হলো যা কর্মী ও company_departments টেবিলকে তাদের সাধারণ মান: department_id দিয়ে একত্রিত করে প্রতিটি কর্মীর নাম এবং তাদের ডিপার্টমেন্টের নাম পুনরুদ্ধার করবে।
SELECT employees.name, company_departments.name FROM employees LEFT JOIN company_departments ON employees.department_id = company_departments.department_id;
আমাদের কোয়েরি নিচের ফলাফল ফেরত দেয়:
| name | name |
| Luke | Sales |
| Mike | Sales |
| Hannah | Sales |
| Geoff | Sales |
| Alexis | Sales |
| Emma | Marketing |
| Jonah | Executive |
| Adam |
(৮ সারি)
আপনি দেখতে পাচ্ছেন, LEFT JOIN employees টেবিলের সকল সারি ফেরত দিয়েছে, এমনকি যদি তিনি যে ডিপার্টমেন্টে কাজ করেন সেটি company_departments টেবিলে না পাওয়া যায়।
লেফট জয়েন সম্পর্কে আরও জানতে চাইলে ক্যারিয়ার করমার SQL অপারেশন টিউটোরিয়াল পড়ুন।
SQL Joins: Right (ডান)
RIGHT JOIN স্টেটমেন্ট LEFT JOIN অপারেটরের সیمی সত্য। RIGHT JOIN ডান টেবিলের সকল সারি এবং বাম টেবিলের সারিগুলো ফেরত দেয় যেখানে জয়েন কন্ডিশন পূরণ হয়।
ধরুন আমরা সকল ডিপার্টমেন্টের নাম এবং সেই ডিপার্টমেন্টে কাজ করা সকল কর্মীর নামের তালিকা চাই। এবং আমরা সেই ডিপার্টমেন্টেরও ডেটা চাই যেখানে কোন কর্মী নিযুক্ত নেই। আমরা নিচের কোয়েরি ব্যবহার করে এই ডেটা পেতে পারি:
SELECT employees.name, company_departments.name AS "DeptName" FROM employees RIGHT JOIN company_departments ON employees.department_id = company_departments.department_id;
উপরোক্ত কোয়েরি নিচের ফলাফল ফেরত দেয়:
| name | “deptname” |
| Luke | Sales |
| Mike | Sales |
| Hannah | Sales |
| Geoff | Sales |
| Alexis | Sales |
| Emma | Marketing |
| Jonah | Executive |
| Payroll | |
| Information Technology |
(৯ সারি)
আপনি দেখতে পাচ্ছেন, আমাদের কোয়েরি সকল ডিপার্টমেন্টের তালিকা এবং সেই ডিপার্টমেন্টে কাজ করা সকল কর্মীর নাম ফেরত দিয়েছে। কোয়েরিটি Payroll এবং Information Technology ডিপার্টমেন্টও ফেরত দিয়েছে, যдер বর্তমানে কোন スタッフ নেই।
অতিরিক্তভাবে, আমাদের কোয়েরি অ্যাডামকে ফেরত দেনি, যিনি আমাদের LEFT JOIN কোয়েরিতে এমন কর্মী ছিলেন যিনি কোন ডিপার্টমেন্টে নিযুক্ত নন। এর কারণ RIGHT JOIN ডান টেবিল—company_departments—এর সকল সারি অন্তর্ভুক্ত করে যেখানে আমাদের শর্ত পূরণ হয়, এবং অ্যাডামের ডান টেবিলের যেকোনো রেকর্ডের সাথে কোনো সংযোগ নেই।
Full SQL Outer Joins (পুরো আউটার জয়েন)
Full OUTER JOINগুলো একটি অদ্ভুত ধরনের SQL join যা দুই টেবিল থেকে অমিল রেকর্ড ফেরত দিতে পারে। প্রায়শই full OUTER JOINগুলো অ্যাগ্রিগেট ফাংশনসহ ব্যবহার করা হয় দুই টেবিলের মধ্যে কতটুকু ওভারল্যাপ আছে সেটি বুঝতে।
ধরুন আমরা সকল কর্মী ও ডিপার্টমেন্টের তালিকা চাই। আমরা নিচের SQL কোয়েরি ব্যবহার করে এই তথ্য পুনরুদ্ধার করতে পারি:
SELECT employees.name, company_departments.name AS "DeptName" FROM employees FULL OUTER JOIN company_departments ON employees.department_id = company_departments.department_id;
আমাদের কোয়েরি নিচের ফলাফল ফেরত দেয়:
| name | “deptname” |
| Luke | Sales |
| Mike | Sales |
| Hannah | Sales |
| Geoff | Sales |
| Alexis | Sales |
| Emma | Marketing |
| Jonah | Executive |
| Adam | |
| Payroll | |
| Information Technology |
(১০ সারি)
উপরোক্ত ফলাফল সেটে প্রতিটি কর্মীর নাম এবং সে কোন ডিপার্টমেন্টে নিযুক্ত সেটি অন্তর্ভুক্ত আছে, এমনকি যদি সে কোন ডিপার্টমেন্টে নিযুক্ত না হয়। ফলাফল সেটে সকল ডিপার্টমেন্টের নামও আছে, এমনকি যদি কোন ডিপার্টমেন্টে কোন কর্মী নিযুক্ত না থাকে।
উপসংহার
Joins একটি SQL সার্ভার ফাংশন যা আপনাকে দুটি বা ততোধিক টেবিল একসাথে কোয়ারি করতে দেয় এবং একটি একত্রিত ফলাফল সেট তৈরি করতে দেয়। উদাহরণস্বরূপ, আপনি কোম্পানির কর্মীদের তালিকা এবং তাদের সাম্প্রতিক পে রোল চেক প্রসেস করার তারিখ পেতে চাইলে আপনি একটি join ব্যবহার করতে পারেন।
এই টিউটোরিয়ালে আমরা OUTER JOINের ওপর ফোকাস করেছি, যা একটি join-এ সারিগুলো ফেরত দেয় এমনকি যদি জয়েন করা টেবিলে তাদের সাথে সম্পর্কিত সারি না থাকে। আমরা OUTER JOINের তিনটি প্রধান প্রকার—LEFT JOIN, RIGHT JOIN, এবং full OUTER JOIN—ও আলোচনা করেছি এবং প্র্যাক্টিসে কীভাবে কাজ করে সেটি অন্বেষণ করেছি।
এখন আপনি SQL JOIN অপারেশন একজন এক্সপার্টের মতো পারফর্ম করতে পারবেন!