SQL Joins হল ডেটাবেসের টেবিলগুলির মধ্যে সম্পর্ক স্থাপনের জন্য ব্যবহৃত গুরুত্বপূর্ণ কনসেপ্ট। Self Join এবং Cross Join হল দুটি বিশেষ ধরনের Join, যা কিছু নির্দিষ্ট পরিস্থিতিতে ব্যবহৃত হয়।
চলুন, এগুলোর ধারণা এবং ব্যবহারের পদ্ধতি আলোচনা করি।
১. Self Join
Self Join হল এমন একটি Join, যেখানে একক টেবিলের মধ্যে দুটি রেকর্ড একে অপরের সাথে সম্পর্কিত হয়। এটি তখন ব্যবহার করা হয় যখন একটি টেবিলের ডেটার মধ্যে সম্পর্ক তৈরি করতে হয়, যেমন কর্মচারী এবং তাদের সুপারভাইজারের সম্পর্ক। এই ধরনের Join করতে একই টেবিল দুটি আলাদা নাম দিয়ে প্রতিনিধিত্ব করা হয়।
Self Join এর সিনট্যাক্স:
SELECT A.column1, B.column2
FROM table_name A, table_name B
WHERE A.common_column = B.common_column;
এখানে, A এবং B একই টেবিলের আলাদা অ্যালিয়াস (alias)। Self Join এর মাধ্যমে আমরা একটি টেবিলের ডেটার মধ্যে সম্পর্ক তৈরি করতে পারি।
উদাহরণ:
ধরা যাক, আমাদের কাছে একটি employees টেবিল রয়েছে, যেখানে কর্মচারীদের তথ্য সংরক্ষিত রয়েছে এবং এক কর্মচারী অন্য কর্মচারীকে সুপারভাইজ করে।
CREATE TABLE employees (
employee_id INT,
employee_name VARCHAR(100),
supervisor_id INT
);
INSERT INTO employees VALUES (1, 'John', NULL);
INSERT INTO employees VALUES (2, 'Alice', 1);
INSERT INTO employees VALUES (3, 'Bob', 1);
INSERT INTO employees VALUES (4, 'Charlie', 2);
এখন, যদি আমরা কর্মচারী এবং তাদের সুপারভাইজারদের নাম একসাথে দেখতে চাই, তবে Self Join ব্যবহার করতে হবে:
SELECT E1.employee_name AS Employee, E2.employee_name AS Supervisor
FROM employees E1
LEFT JOIN employees E2
ON E1.supervisor_id = E2.employee_id;
এখানে, E1 এবং E2 একে অপরের সাথে সম্পর্কিত কর্মচারী এবং তাদের সুপারভাইজারের তথ্য দেখানোর জন্য ব্যবহার করা হয়েছে।
২. Cross Join
Cross Join (বা Cartesian Join) হল একটি Join যেখানে দুটি টেবিলের প্রতিটি রেকর্ডের সাথে অন্য টেবিলের প্রতিটি রেকর্ড যোগ করা হয়, যার ফলে একটি Cartesian Product তৈরি হয়। এর মানে হল যে, প্রথম টেবিলের প্রতিটি রেকর্ডের সাথে দ্বিতীয় টেবিলের প্রতিটি রেকর্ড যুক্ত হবে, এবং ফলস্বরূপ মোট রেকর্ডের সংখ্যা হবে প্রথম টেবিলের রেকর্ড সংখ্যা × দ্বিতীয় টেবিলের রেকর্ড সংখ্যা।
Cross Join এর সিনট্যাক্স:
SELECT column1, column2
FROM table1
CROSS JOIN table2;
উদাহরণ:
ধরা যাক, আমাদের দুটি টেবিল রয়েছে:
employeesটেবিল:employee_id employee_name 1 John 2 Alice departmentsটেবিল:department_id department_name 101 HR 102 IT
একটি Cross Join ব্যবহার করলে আমরা মোট ৪টি (২ × ২) রেকর্ড পাবো:
SELECT employees.employee_name, departments.department_name
FROM employees
CROSS JOIN departments;
ফলস্বরূপ আউটপুট:
| employee_name | department_name |
|---|---|
| John | HR |
| John | IT |
| Alice | HR |
| Alice | IT |
এখানে, প্রতিটি কর্মচারীর নাম এবং প্রতিটি বিভাগের নামের সব সম্ভাব্য সংমিশ্রণ দেখানো হয়েছে।
Self Join এবং Cross Join এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Self Join | Cross Join |
|---|---|---|
| সংজ্ঞা | একই টেবিলের মধ্যে সম্পর্ক স্থাপন। | দুটি টেবিলের মধ্যে প্রতিটি রেকর্ডের সংমিশ্রণ তৈরি। |
| ব্যবহার | এক টেবিলের মধ্যে সম্পর্কিত তথ্য অনুসন্ধান। | দুটি টেবিলের সমস্ত সংমিশ্রণ দেখানোর জন্য। |
| ফলস্বরূপ রেকর্ডের সংখ্যা | সাধারণত দুইটি টেবিলের মধ্যে সম্পর্কযুক্ত রেকর্ডের সংখ্যা। | প্রথম টেবিলের রেকর্ড সংখ্যা × দ্বিতীয় টেবিলের রেকর্ড সংখ্যা। |
| Join Condition | সাধারণত একটি সম্পর্কিত কলাম বা শর্ত থাকে। | কোন সম্পর্কিত কলাম বা শর্ত থাকে না। |
উপসংহার
- Self Join ব্যবহার করা হয় একক টেবিলের মধ্যে সম্পর্ক স্থাপন করার জন্য, যেখানে এক টেবিলের রেকর্ড অন্য টেবিলের রেকর্ডের সাথে সম্পর্কিত থাকে।
- Cross Join ব্যবহার করা হয় দুটি টেবিলের মধ্যে সমস্ত সম্ভাব্য রেকর্ডের সংমিশ্রণ তৈরি করতে, এবং এটি প্রাথমিকভাবে ক্যার্টেসিয়ান প্রোডাক্ট তৈরি করতে ব্যবহৃত হয়।
এসব Join ডেটাবেসের কাঠামো এবং বিভিন্ন ধরনের সম্পর্ক বুঝতে গুরুত্বপূর্ণ টুলস হিসেবে কাজ করে।
Read more