Joins হল SQL-এর একটি শক্তিশালী ফিচার যা একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করে এবং একত্রে ডেটা রিট্রিভ করার সুবিধা দেয়। যখন ডেটাবেসে একাধিক টেবিল থাকে এবং আপনি একাধিক টেবিলের ডেটা একত্রে আনতে চান, তখন Joins ব্যবহার করা হয়।
SQL এ মূলত চারটি ধরনের Join রয়েছে:
- INNER JOIN
- LEFT JOIN (or LEFT OUTER JOIN)
- RIGHT JOIN (or RIGHT OUTER JOIN)
- FULL JOIN (or FULL OUTER JOIN)
এছাড়া SELF JOIN এবং CROSS JOIN এর মতো অন্যান্য ধরনের Joinsও রয়েছে, যা কিছু নির্দিষ্ট পরিস্থিতিতে ব্যবহৃত হয়। চলুন, এসব Joins-এর ব্যবহার এবং প্রতিটি Join-এর কার্যপ্রণালী দেখি।
১. INNER JOIN
INNER JOIN হল সবচেয়ে সাধারণ এবং ব্যবহৃত Join, যা দুটি টেবিলের মধ্যে যতটুকু তথ্য মিলবে, ততটুকু রিটার্ন করে। যদি দুটি টেবিলের মধ্যে কোন মিলে এমন রেকর্ড না থাকে, তবে সেই রেকর্ডগুলো রিটার্ন হয় না।
Syntax:
SELECT column1, column2, ...
FROM table1
INNER JOIN table2
ON table1.common_column = table2.common_column;
- common_column: দুটি টেবিলের মধ্যে সম্পর্ক স্থাপনের জন্য ব্যবহৃত কলাম।
উদাহরণ:
ধরা যাক, দুইটি টেবিল আছে: employees এবং departments।
employees টেবিল:
| employee_id | name | department_id |
|---|---|---|
| 1 | Alice | 101 |
| 2 | Bob | 102 |
| 3 | Charlie | 103 |
departments টেবিল:
| department_id | department_name |
|---|---|
| 101 | HR |
| 102 | Sales |
| 104 | Marketing |
INNER JOIN ব্যবহার করে, দুইটি টেবিল থেকে এমন কর্মচারীদের নাম এবং তাদের বিভাগ নাম বের করা হবে, যাদের department_id মিলে।
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;
ফলাফল:
| name | department_name |
|---|---|
| Alice | HR |
| Bob | Sales |
২. LEFT JOIN (or LEFT OUTER JOIN)
LEFT JOIN (বা LEFT OUTER JOIN) দুটি টেবিলের মধ্যে ডেটা রিটার্ন করে, যেখানে বামপাশের টেবিলের সব রেকর্ড (যদিও সঠিক মিল না থাকে) অন্তর্ভুক্ত থাকে এবং ডানপাশের টেবিল থেকে শুধুমাত্র মিল পাওয়া রেকর্ডগুলো রিটার্ন হয়। যদি ডানপাশের টেবিলের সাথে কোনো মিল না থাকে, তবে সেখানে NULL মান দেখানো হবে।
Syntax:
SELECT column1, column2, ...
FROM table1
LEFT JOIN table2
ON table1.common_column = table2.common_column;
উদাহরণ:
আবার ধরুন, employees এবং departments টেবিল রয়েছে এবং আপনি সকল কর্মচারীর নাম এবং তাদের বিভাগের নাম দেখতে চান, এমনকি যদি তাদের কোনো বিভাগ না থাকে। এর জন্য LEFT JOIN ব্যবহার করা হবে।
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
ফলাফল:
| name | department_name |
|---|---|
| Alice | HR |
| Bob | Sales |
| Charlie | NULL |
এখানে, Charlie যেহেতু কোনো বিভাগের সাথে সম্পর্কিত নয়, তার department_name NULL দেখানো হয়েছে।
৩. RIGHT JOIN (or RIGHT OUTER JOIN)
RIGHT JOIN (বা RIGHT OUTER JOIN) এর বিপরীত। এটি ডানপাশের টেবিলের সব রেকর্ড রিটার্ন করে এবং বামপাশের টেবিলের সাথে মিল পাওয়া রেকর্ডগুলো রিটার্ন করে। যদি বামপাশের টেবিলের সাথে কোনো মিল না থাকে, তবে সেখানে NULL মান দেখানো হবে।
Syntax:
SELECT column1, column2, ...
FROM table1
RIGHT JOIN table2
ON table1.common_column = table2.common_column;
উদাহরণ:
ধরা যাক, আমরা departments এবং employees টেবিলের ডেটা দেখতে চাই, তবে এই ক্ষেত্রে, আমরা সমস্ত বিভাগের নাম দেখতে চাই, এমনকি যদি কোনো কর্মচারী সেই বিভাগে না থাকে। এর জন্য RIGHT JOIN ব্যবহার করা হবে।
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;
ফলাফল:
| name | department_name |
|---|---|
| Alice | HR |
| Bob | Sales |
| NULL | Marketing |
এখানে, Marketing বিভাগের জন্য কোনো কর্মচারী নেই, তাই name কলামে NULL দেখানো হয়েছে।
৪. FULL JOIN (or FULL OUTER JOIN)
FULL JOIN (বা FULL OUTER JOIN) দুটি টেবিলের সকল রেকর্ড রিটার্ন করে। এটি LEFT JOIN এবং RIGHT JOIN এর একটি সম্মিলিত ফলাফল। এই Join সব রেকর্ড, এমনকি যেগুলোর মধ্যে কোনো মিল নেই, তা NULL সহ রিটার্ন করে।
Syntax:
SELECT column1, column2, ...
FROM table1
FULL OUTER JOIN table2
ON table1.common_column = table2.common_column;
উদাহরণ:
ধরা যাক, আমরা employees এবং departments টেবিলের সব রেকর্ড দেখতে চাই, এমনকি কোনো কর্মচারী বা বিভাগ না থাকলেও। এর জন্য FULL OUTER JOIN ব্যবহার করা হবে।
SELECT employees.name, departments.department_name
FROM employees
FULL OUTER JOIN departments
ON employees.department_id = departments.department_id;
ফলাফল:
| name | department_name |
|---|---|
| Alice | HR |
| Bob | Sales |
| Charlie | NULL |
| NULL | Marketing |
এখানে, সব বিভাগ এবং কর্মচারী রিটার্ন হয়েছে, এবং যেখানে মিল নেই, সেখানে NULL দেখানো হয়েছে।
৫. Self Join
Self Join হল একটি টেবিলের সঙ্গে নিজেই যোগ (join) করা, সাধারণত একই টেবিলের দুটি আলাদা রেকর্ডের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়।
Syntax:
SELECT a.column1, b.column2
FROM table a, table b
WHERE a.common_column = b.common_column;
উদাহরণ:
ধরা যাক, একটি employees টেবিল রয়েছে, যেখানে কর্মচারীদের মধ্যে পরিচালকের (manager) আইডি সংরক্ষিত আছে। এখন, আপনি কর্মচারী এবং তাদের পরিচালকদের নাম দেখতে চান।
SELECT e.name AS Employee, m.name AS Manager
FROM employees e
LEFT JOIN employees m
ON e.manager_id = m.employee_id;
৬. CROSS JOIN
CROSS JOIN দুটি টেবিলের মধ্যে কার্টেসিয়ান প্রোডাক্ট তৈরি করে। অর্থাৎ, প্রথম টেবিলের প্রতিটি রেকর্ডের জন্য দ্বিতীয় টেবিলের প্রতিটি রেকর্ডের সঙ্গে যুক্ত হয়ে সমস্ত সম্ভাব্য সংমিশ্রণ তৈরি হয়।
Syntax:
SELECT column1, column2
FROM table1
CROSS JOIN table2;
উদাহরণ:
ধরা যাক, দুটি টেবিল রয়েছে: employees এবং departments। একটি CROSS JOIN ব্যবহারে সমস্ত কর্মচারী এবং সমস্ত বিভাগের সম্ভাব্য সংমিশ্রণ পাওয়া যাবে।
SELECT employees.name, departments.department_name
FROM employees
CROSS JOIN departments;
উপসংহার
SQL Joins ব্যবহার করে একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করা হয় এবং একটি একক ফলাফল তৈরি করা হয়। প্রতিটি ধরনের Join-ই ডেটাবেসের মধ্যে ডেটা সমন্বয় করতে সাহায্য করে, এবং বিভিন্ন ডেটাবেসের মধ্যে সম্পর্ক এবং তথ্য সম্পর্কিত জটিল কোয়েরি সমাধান করতে সাহায্য করে।
SQL-এর JOIN স্টেটমেন্ট ব্যবহার করা হয় একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন এবং তাদের মধ্যে তথ্য একত্রিত করার জন্য। INNER JOIN, LEFT JOIN, RIGHT JOIN, এবং FULL JOIN হল বিভিন্ন ধরনের JOIN, যা ডেটাবেস থেকে একাধিক টেবিলের তথ্য যুক্ত করার জন্য ব্যবহৃত হয়। প্রতিটি JOIN এর কার্যপ্রণালী আলাদা এবং তাদের মধ্যে পার্থক্য আছে।
১. INNER JOIN
INNER JOIN হল সবচেয়ে সাধারণ JOIN, যা দুটি টেবিলের মধ্যে শুধু সেই রেকর্ডগুলো ফিরিয়ে আনে, যেখানে দুই টেবিলের মধ্যে মিল পাওয়া যায়।
- কার্যপ্রণালী: দুটি টেবিলের মধ্যে সাধারণ কলামের মান মিলিয়ে কেবল সেই রেকর্ডগুলো নির্বাচিত হয়, যেগুলোর মধ্যে সম্পর্ক থাকে।
উদাহরণ:
SELECT employees.name, departments.name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;
এই কিউরিটি employees এবং departments টেবিলের মধ্যে department_id কলামের মানের ভিত্তিতে মিলিয়ে শুধু মিল থাকা রেকর্ডগুলি দেখাবে।
২. LEFT JOIN (LEFT OUTER JOIN)
LEFT JOIN বা LEFT OUTER JOIN হল এমন একটি JOIN, যা বাম (left) টেবিলের সব রেকর্ড এবং ডান (right) টেবিলের মিল থাকা রেকর্ডগুলো ফিরিয়ে আনে। যদি ডান টেবিলে মিল না পাওয়া যায়, তবে NULL মান ফিরিয়ে আনা হয়।
- কার্যপ্রণালী: বাম টেবিলের সব রেকর্ড দেখানো হয়, এবং যদি ডান টেবিলে সম্পর্কিত রেকর্ড না থাকে তবে NULL দেখানো হয়।
উদাহরণ:
SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
এই কিউরিটি employees টেবিলের সব রেকর্ড দেখাবে এবং যদি departments টেবিলের সাথে কোন সম্পর্ক না থাকে তবে NULL দেখাবে।
৩. RIGHT JOIN (RIGHT OUTER JOIN)
RIGHT JOIN বা RIGHT OUTER JOIN হল এমন একটি JOIN, যা ডান (right) টেবিলের সব রেকর্ড এবং বাম (left) টেবিলের মিল থাকা রেকর্ডগুলো ফিরিয়ে আনে। যদি বাম টেবিলে মিল না পাওয়া যায়, তবে NULL মান ফিরিয়ে আনা হয়।
- কার্যপ্রণালী: ডান টেবিলের সব রেকর্ড দেখানো হয়, এবং যদি বাম টেবিলে সম্পর্কিত রেকর্ড না থাকে তবে NULL দেখানো হয়।
উদাহরণ:
SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;
এই কিউরিটি departments টেবিলের সব রেকর্ড দেখাবে এবং যদি employees টেবিলের সাথে কোন সম্পর্ক না থাকে তবে NULL দেখাবে।
৪. FULL JOIN (FULL OUTER JOIN)
FULL JOIN বা FULL OUTER JOIN হল এমন একটি JOIN, যা দুটি টেবিলের সব রেকর্ডকে ফিরিয়ে আনে, এবং যেখানে সম্পর্কিত রেকর্ড না পাওয়া যায় সেখানে NULL দেখায়। এটি LEFT JOIN এবং RIGHT JOIN এর সংমিশ্রণ।
- কার্যপ্রণালী: বাম এবং ডান টেবিলের সব রেকর্ড দেখানো হয়, এবং যেসব রেকর্ডে সম্পর্ক না থাকে, সেখানে NULL দেখানো হয়।
উদাহরণ:
SELECT employees.name, departments.name
FROM employees
FULL OUTER JOIN departments
ON employees.department_id = departments.department_id;
এই কিউরিটি employees এবং departments টেবিলের সব রেকর্ড দেখাবে, এবং যদি কোন টেবিলে মিল না থাকে তবে NULL দেখাবে।
সারাংশ:
- INNER JOIN: শুধু মিল থাকা রেকর্ডগুলি।
- LEFT JOIN: বাম টেবিলের সব রেকর্ড, এবং মিল না থাকলে ডান টেবিলের জন্য NULL।
- RIGHT JOIN: ডান টেবিলের সব রেকর্ড, এবং মিল না থাকলে বাম টেবিলের জন্য NULL।
- FULL JOIN: উভয় টেবিলের সব রেকর্ড, মিল না থাকলে NULL।
SQL তে JOIN ব্যবহার করে একাধিক টেবিল থেকে সম্পর্কিত ডেটা একত্রিত করা যায়। JOIN এর মাধ্যমে আপনি একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করে তথ্য একত্র করতে পারেন। এতে আপনি এক বা একাধিক টেবিলের কলাম এবং রেকর্ড ব্যবহার করতে পারেন, যেগুলি কোনো একক সম্পর্কের মাধ্যমে সংযুক্ত।
SQL-এ বিভিন্ন ধরনের JOIN আছে, এবং প্রতিটি JOIN একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন এবং ডেটা আনতে ব্যবহৃত হয়।
JOIN-এর ধরন:
- INNER JOIN
- LEFT JOIN (LEFT OUTER JOIN)
- RIGHT JOIN (RIGHT OUTER JOIN)
- FULL JOIN (FULL OUTER JOIN)
১. INNER JOIN
INNER JOIN দুটি টেবিলের মধ্যে এমন রেকর্ডগুলো নির্বাচন করে যেখানে উভয় টেবিলের মধ্যে সম্পর্কিত তথ্য থাকে। অর্থাৎ, দুটি টেবিলের মিলিত ডেটা দেখানোর জন্য এটি ব্যবহার হয়।
INNER JOIN এর সিনট্যাক্স:
SELECT columns
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
উদাহরণ:
ধরা যাক, দুটি টেবিল আছে:
employees(কর্মচারীদের তথ্য)departments(বিভাগের তথ্য)
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;
এখানে:
employeesটেবিলেরdepartment_idকলাম এবংdepartmentsটেবিলেরdepartment_idকলামের মাধ্যমে সম্পর্ক স্থাপন করা হয়েছে।INNER JOINদিয়ে শুধু সেই কর্মচারীদের তথ্য পাওয়া যাবে, যাদের বিভাগ রয়েছে (যেহেতু উভয় টেবিলেই সম্পর্কিত তথ্য থাকতে হবে)।
২. LEFT JOIN (LEFT OUTER JOIN)
LEFT JOIN বা LEFT OUTER JOIN দিয়ে আপনি প্রথম (বাম) টেবিলের সব রেকর্ড এবং দ্বিতীয় (ডান) টেবিলের সম্পর্কিত রেকর্ডগুলি পাবেন। যদি দ্বিতীয় টেবিলে কোন সম্পর্কিত রেকর্ড না থাকে, তবে সেই কলামে NULL মান দেখানো হয়।
LEFT JOIN এর সিনট্যাক্স:
SELECT columns
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
উদাহরণ:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;
এখানে:
LEFT JOINব্যবহার করলেemployeesটেবিলের সব কর্মচারীদের তথ্য দেখা যাবে, এবং যেখানে সম্পর্কিত বিভাগ পাওয়া যাবে, সেখানেইdepartment_nameদেখাবে। যদি কোন কর্মচারীর বিভাগ না থাকে, তবে সেই কলামেNULLপ্রদর্শিত হবে।
৩. RIGHT JOIN (RIGHT OUTER JOIN)
RIGHT JOIN বা RIGHT OUTER JOIN হল LEFT JOIN এর বিপরীত। এতে ডান (RIGHT) টেবিলের সব রেকর্ড এবং বাম (LEFT) টেবিলের সম্পর্কিত রেকর্ডগুলি পাওয়া যাবে। যদি বাম টেবিলের কোন সম্পর্কিত রেকর্ড না থাকে, তবে সেই কলামে NULL মান দেখানো হয়।
RIGHT JOIN এর সিনট্যাক্স:
SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
উদাহরণ:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;
এখানে:
RIGHT JOINব্যবহার করলেdepartmentsটেবিলের সব বিভাগের তথ্য দেখা যাবে, এবং যেখানে কর্মচারী উপস্থিত থাকবেন, সেখানেই তাদের নাম এবং বিভাগ থাকবে। যেখানে কর্মচারী নেই, সেখানেNULLপ্রদর্শিত হবে।
৪. FULL JOIN (FULL OUTER JOIN)
FULL JOIN বা FULL OUTER JOIN উভয় টেবিলের সব রেকর্ড দেখায়, এবং যেখানে সম্পর্কিত রেকর্ড পাওয়া যায়, সেখানে তথ্য প্রদর্শিত হয়। যেখানে সম্পর্ক নেই, সেখানে NULL প্রদর্শিত হয়।
FULL JOIN এর সিনট্যাক্স:
SELECT columns
FROM table1
FULL JOIN table2
ON table1.column_name = table2.column_name;
উদাহরণ:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
FULL JOIN departments
ON employees.department_id = departments.department_id;
এখানে:
FULL JOINব্যবহার করলেemployeesএবংdepartmentsটেবিলের সব রেকর্ড প্রদর্শিত হবে। কোন টেবিলের সাথে সম্পর্কিত রেকর্ড না থাকলে, সেখানেNULLপ্রদর্শিত হবে।
JOIN-এর মাধ্যমে একাধিক টেবিলের ডেটা আনা
ধরা যাক, আপনি তিনটি টেবিলের মধ্যে ডেটা একত্রিত করতে চান:
employees: কর্মচারী সম্পর্কিত তথ্য।departments: বিভাগের তথ্য।projects: প্রকল্পের তথ্য।
JOIN-এর মাধ্যমে তিনটি টেবিলের ডেটা একত্রিত করা:
SELECT employees.first_name, employees.last_name, departments.department_name, projects.project_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id
INNER JOIN projects ON employees.employee_id = projects.employee_id;
এখানে:
- প্রথম
INNER JOINদিয়েemployeesএবংdepartmentsটেবিলের সম্পর্ক স্থাপন করা হয়েছে। - দ্বিতীয়
INNER JOINদিয়েemployeesএবংprojectsটেবিলের সম্পর্ক স্থাপন করা হয়েছে। - এটি কর্মচারী, তাদের বিভাগ এবং প্রকল্পের নাম একত্রে প্রদর্শন করবে।
সারাংশ
- INNER JOIN: শুধুমাত্র মিল থাকা রেকর্ড দেখায়।
- LEFT JOIN: বাম টেবিলের সব রেকর্ড দেখায়, ডান টেবিলের সম্পর্কিত রেকর্ড দেখায়।
- RIGHT JOIN: ডান টেবিলের সব রেকর্ড দেখায়, বাম টেবিলের সম্পর্কিত রেকর্ড দেখায়।
- FULL JOIN: উভয় টেবিলের সব রেকর্ড দেখায়, যেখানে সম্পর্ক নেই সেখানে
NULL।
এই JOIN প্রকারগুলি আপনাকে SQL-এ একাধিক টেবিল থেকে সম্পর্কযুক্ত ডেটা খুব সহজেই একত্রিত করতে সাহায্য করবে।
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 ডেটাবেসের কাঠামো এবং বিভিন্ন ধরনের সম্পর্ক বুঝতে গুরুত্বপূর্ণ টুলস হিসেবে কাজ করে।
Joins এবং Subqueries দুটোই SQL-এ ব্যবহৃত হয় একাধিক টেবিল থেকে তথ্য সংগ্রহ করতে, কিন্তু তাদের কাজ করার পদ্ধতি এবং ব্যবহারে কিছু মৌলিক পার্থক্য রয়েছে।
এখানে আমরা Joins এবং Subqueries এর মধ্যে পার্থক্যগুলি বিস্তারিতভাবে আলোচনা করবো:
1. Joins (জয়েনস)
JOIN SQL কমান্ডটি একাধিক টেবিলের মধ্যে সম্পর্ক তৈরি করে এবং সেগুলোর মধ্যে থাকা সম্পর্কিত তথ্য একসাথে নিয়ে আসে। যখন দুটি বা ততোধিক টেবিলের মধ্যে সম্পর্ক থাকে (যেমন: Foreign Key), তখন JOIN ব্যবহার করা হয় একাধিক টেবিল থেকে তথ্য সংগ্রহ করতে।
বিভিন্ন ধরনের JOIN:
- INNER JOIN: শুধুমাত্র সেগুলি নির্বাচন করে যেগুলোর মধ্যে উভয় টেবিলেই মিলে এমন রেকর্ড থাকে।
- LEFT JOIN (বা LEFT OUTER JOIN): প্রথম (বাম) টেবিলের সব রেকর্ড এবং দ্বিতীয় (ডান) টেবিলের মিল থাকা রেকর্ড নির্বাচন করে।
- RIGHT JOIN (বা RIGHT OUTER JOIN): দ্বিতীয় (ডান) টেবিলের সব রেকর্ড এবং প্রথম (বাম) টেবিলের মিল থাকা রেকর্ড নির্বাচন করে।
- FULL JOIN (বা FULL OUTER JOIN): উভয় টেবিলের সব রেকর্ড নির্বাচন করে, যেখানে মিলে এমন রেকর্ড থাকলে সেটা প্রদর্শন করা হয়।
JOIN উদাহরণ:
ধরা যাক, আমাদের দুটি টেবিল আছে:
employees(যেখানে কর্মচারীর তথ্য রয়েছে)departments(যেখানে বিভাগ সম্পর্কিত তথ্য রয়েছে)
INNER JOIN ব্যবহার করে কর্মচারী এবং বিভাগের তথ্য সংগ্রহ:
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;
এখানে, employees.department_id এবং departments.department_id এর মধ্যে সম্পর্ক তৈরি করে, এবং মিল থাকা রেকর্ডগুলো দেখানো হবে।
2. Subqueries (সাবকুয়েরি)
Subquery বা Nested Query হলো একটি কুয়েরি যা আরেকটি কুয়েরির ভিতরে থাকে। এটি একটি কুয়েরি যা অন্য কুয়েরির আউটপুটকে ইনপুট হিসেবে ব্যবহার করে। সাবকুয়েরি সাধারণত WHERE, FROM, অথবা SELECT ক্লজে ব্যবহার করা হয়।
Subquery উদাহরণ:
ধরা যাক, আমাদের employees টেবিলের মধ্যে যে কর্মচারীরা সর্বোচ্চ বেতন পায়, তাদের তথ্য দেখতে চাই।
SELECT name, salary
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);
এখানে, সাবকুয়েরি (SELECT MAX(salary) FROM employees) প্রথমে সর্বোচ্চ বেতন খুঁজে বের করবে এবং প্রধান কুয়েরি সেই বেতন গ্রহণ করা কর্মচারীর নাম এবং বেতন ফিরিয়ে দিবে।
Joins এবং Subqueries এর মধ্যে পার্থক্য:
| বিষয় | Joins | Subqueries |
|---|---|---|
| ব্যবহার | একাধিক টেবিলের মধ্যে সম্পর্ক তৈরি করতে ব্যবহৃত হয় | এক কুয়েরির আউটপুট অন্য কুয়েরিতে ইনপুট হিসেবে ব্যবহৃত হয় |
| প্রকারভেদ | INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN | Scalar, Row, Table Subqueries |
| পারফরমেন্স | সাধারণত দ্রুত, কারণ এটি একযোগে একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করে | মাঝে মাঝে ধীর হতে পারে, কারণ সাবকুয়েরি আলাদা কুয়েরি হিসেবে সম্পন্ন হয় |
| ফলাফল | একাধিক টেবিলের তথ্য একত্রিত করে একটি সিঙ্গল আউটপুট প্রদান করে | সাবকুয়েরির আউটপুট মূল কুয়েরির শর্ত হিসাবে ব্যবহার করা হয় |
| ব্যবহারের ক্ষেত্রে | যখন একাধিক টেবিলের মধ্যে সম্পর্ক থাকতে হয় | যখন একটি নির্দিষ্ট শর্তের ভিত্তিতে ডেটা নির্বাচন করতে হয় |
| নির্ভরতা | JOIN সাধারণত ডেটার মধ্যে সম্পর্ক নির্ভর করে | Subqueries এক কুয়েরির ভিতর অন্য কুয়েরির ফলাফল নির্ভর করে |
সংক্ষেপে:
- Joins সাধারণত একাধিক টেবিলের মধ্যে সম্পর্ক তৈরি করে এবং একযোগে তাদের তথ্য নিয়ে আসে।
- Subqueries একটি কুয়েরির ভিতরে অন্য কুয়েরি থাকতে পারে, যা মূল কুয়েরি সঠিকভাবে কাজ করতে সাহায্য করে, বিশেষ করে শর্তাবলী নির্ধারণ করতে।
উভয় পদ্ধতিরই ব্যবহার উপযোগী, তবে এটি নির্ভর করে আপনি কী ধরনের প্রশ্ন করতে চান এবং আপনার ডেটাবেসের কাঠামো কেমন।
Read more