উদাহরণসহ SQL JOIN ব্যাখ্যা (Inner, Left, Right, Full)
দুটি ছোট টেবিল, স্পষ্ট কোয়েরি ও সঠিক ফলাফল দিয়ে INNER, LEFT, RIGHT, FULL, CROSS ও SELF JOIN শিখুন।
- INNER JOIN: শুধু যে সারিগুলো দুই টেবিলেই মেলে।
- LEFT JOIN: বাম টেবিলের সব সারি এবং মিলে যাওয়াগুলো (না মিললে NULL)।
- RIGHT JOIN: ডান টেবিলের সব সারি এবং মিলে যাওয়াগুলো।
- FULL JOIN: দুই টেবিলের সব সারি, যেখানে সম্ভব মিলিয়ে।
- কী (key) দিয়ে join করুন, টেবিল অ্যালিয়াস ব্যবহার করুন এবং join কলামে ইনডেক্স দিন।
বাস্তব ডেটাবেস সবকিছু একটি টেবিলে রাখে না। গ্রাহকেরা এক টেবিলে, অর্ডার আরেক টেবিলে। “এই মাসে কোন গ্রাহক অর্ডার করেছেন?” প্রশ্নের উত্তর পেতে দুটিকে জুড়তে হয়, আর SQL JOIN ঠিক সেটাই করে।
এই গাইডটি হাতে-কলমে। join নতুনদের বিভ্রান্ত করে, কারণ একই দুটি টেবিল join-এর ধরন অনুযায়ী ভিন্ন ফল দেয়। ছোট ও বাস্তব ডেটা দেখলে বিষয়টি সহজ হয়ে যায়।
SQL JOIN ব্যাখ্যা: নমুনা টেবিল
customers
| id | name |
|---|---|
| 1 | Asha |
| 2 | Ben |
| 3 | Chitra |
orders
| id | customer_id | total |
|---|---|---|
| 101 | 1 | 250 |
| 102 | 1 | 120 |
| 103 | 2 | 90 |
| 104 | 9 | 40 |
Chitra-র কোনো অর্ডার নেই, আর অর্ডার 104 এমন এক গ্রাহককে (9) নির্দেশ করে যিনি নেই। এই দুই প্রান্তিক ঘটনা join-এর ধরনগুলোর পার্থক্য দেখায়।
INNER JOIN
INNER JOIN শুধু সেই সারিগুলো ফেরত দেয় যেখানে শর্ত দুই টেবিলেই সত্য। জোড়াহীন সারি বাদ পড়ে।
SELECT c.name, o.id AS order_id, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;
ফলাফল: Asha (101), Asha (102), Ben (103)। Chitra ও অর্ডার 104 নেই। শুধু সম্পর্কিত ডেটা দরকার হলে, যেমন গ্রাহকের বিবরণসহ অর্ডার, এটি ব্যবহার করুন। শুধু JOIN লেখার অর্থ INNER JOIN।
LEFT JOIN
LEFT JOIN বাম টেবিলের সব সারি রাখে এবং ডান টেবিলের মিলে যাওয়া সারি যোগ করে। না মিললে ডানের কলামগুলো NULL হয়।
SELECT c.name, o.id AS order_id, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
ফলাফল: Asha (101), Asha (102), Ben (103), Chitra (NULL, NULL)। এবার Chitra দেখা যাচ্ছে।
দ্রুত টিপ: যে গ্রাহকেরা কখনো অর্ডার করেননি তাঁদের খুঁজতে ডান দিকের NULL ফিল্টার করুন: WHERE o.id IS NULL থেকে Chitra পাওয়া যায়। টেস্টাররা এটি দিয়ে অনাথ বা হারানো রেকর্ড খোঁজেন।
RIGHT JOIN ও FULL JOIN
RIGHT JOIN হলো LEFT JOIN-এর আয়না-প্রতিচ্ছবি এবং ডান টেবিলের সব সারি রাখে। বেশিরভাগ মানুষ টেবিলের ক্রম বদলে LEFT JOIN ব্যবহার করেন, কারণ তা পড়তে স্বাভাবিক।
SELECT c.name, o.id AS order_id
FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;
ফলাফলে গ্রাহকের নাম NULL সহ অর্ডার 104 থাকে। FULL (OUTER) JOIN দুই টেবিলের সব সারি ফেরত দেয়: অর্ডারহীন Chitra এবং গ্রাহকহীন অর্ডার 104।
SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id;
PostgreSQL ও SQL Server এটি সমর্থন করে। MySQL করে না; LEFT JOIN ও RIGHT JOIN-কে UNION দিয়ে মিলিয়ে নিন। আরও জানতে PostgreSQL ম্যানুয়ালে একটি স্পষ্ট join টিউটোরিয়াল আছে।
| Join | শুধু বামের সারি | শুধু ডানের সারি | মিলে যাওয়া সারি |
|---|---|---|---|
| INNER | না | না | হ্যাঁ |
| LEFT | হ্যাঁ | না | হ্যাঁ |
| RIGHT | না | হ্যাঁ | হ্যাঁ |
| FULL | হ্যাঁ | হ্যাঁ | হ্যাঁ |
CROSS JOIN ও SELF JOIN
CROSS JOIN এক টেবিলের প্রতিটি সারিকে অন্য টেবিলের প্রতিটি সারির সঙ্গে জোড়া লাগায়: তিনজন গ্রাহক ও চারটি অর্ডারে বারোটি সারি হয়। এটি কম ব্যবহৃত, তবে সব সাইজ ও রঙের জন্য টেস্ট ডেটার মতো সমন্বয় তৈরিতে কাজে লাগে।
SELECT c.name, o.id
FROM customers c
CROSS JOIN orders o;
SELF JOIN অ্যালিয়াস ব্যবহার করে একটি টেবিলকে নিজের সঙ্গেই জোড়ে, যেমন প্রতিটি কর্মীর ম্যানেজার খুঁজে বের করতে।
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;
SQL JOIN: সাধারণ ভুল ও পারফরম্যান্স টিপস
- ON ক্লজ ভুলে যাওয়া অজান্তেই CROSS JOIN তৈরি করে এবং সারির সংখ্যা বিস্ফোরিত হয়।
- LEFT JOIN-এর পর WHERE-এ ডান টেবিল ফিল্টার করলে তা INNER JOIN হয়ে যায়; শর্তটি ON-এ রাখুন।
- অস্পষ্ট কলামের নাম: কলামের আগে টেবিল অ্যালিয়াস দিন।
- অনন্য নয় এমন কলামে join সারি বহুগুণ করে এবং মোট ফল ফুলিয়ে দেয়।
- join কলামে ইনডেক্স দিন, শুধু প্রয়োজনীয় কলাম নিন এবং ধীর কোয়েরি
EXPLAINদিয়ে যাচাই করুন।
টেস্টারদের জন্য join কেন গুরুত্বপূর্ণ
QA ইঞ্জিনিয়াররা UI বা API দিয়ে তৈরি ডেটা ঠিকমতো ডেটাবেসে পৌঁছেছে কি না যাচাই করতে এবং অনাথ রেকর্ড খুঁজতে join ব্যবহার করেন। আমাদের Postman দিয়ে API টেস্টিং গাইডের (ইংরেজি) সঙ্গে পড়ুন। মূল বিষয়ের জন্য নতুনদের জন্য SQL টিউটোরিয়াল (ইংরেজি) এবং নতুন ডেটা স্টোরের জন্য ভেক্টর ডেটাবেস (ইংরেজি) দেখুন। ডেটাবেস লোকালি চালাতে আমাদের Docker টিউটোরিয়াল (ইংরেজি) দেখুন।
শেষ কথা
এক লাইনে SQL JOIN: INNER শুধু মিলগুলো রাখে, LEFT বামের সব, RIGHT ডানের সব, আর FULL সবকিছু রাখে। কোয়েরি চালানোর আগে ফলাফল অনুমান করতে পারা পর্যন্ত দুটি ছোট টেবিলে অনুশীলন করুন; তারপর তিনটি টেবিল join করুন এবং join-এর সঙ্গে GROUP BY মেলান।
প্রশ্নোত্তর
INNER JOIN ও LEFT JOIN-এর পার্থক্য কী?
INNER JOIN শুধু দুই টেবিলে মিলে যাওয়া সারি ফেরত দেয়। LEFT JOIN বাম টেবিলের সব সারি ফেরত দেয় এবং না-মেলা ডান কলামগুলো NULL দিয়ে পূরণ করে।
কোন SQL JOIN সবচেয়ে দ্রুত?
কোনো ধরনই সবসময় সবচেয়ে দ্রুত নয়। পারফরম্যান্স নির্ভর করে ইনডেক্স, টেবিলের আকার ও এক্সিকিউশন প্ল্যানের ওপর। join কলামে ইনডেক্স দিন এবং প্ল্যান দেখুন।
MySQL কি FULL OUTER JOIN সমর্থন করে?
না। MySQL-এ একই ফল পেতে LEFT JOIN ও RIGHT JOIN-কে UNION দিয়ে মেলান।
SELF JOIN কীসের জন্য ব্যবহৃত হয়?
SELF JOIN একই টেবিলের সারিগুলোর মধ্যে তুলনা করে, যেমন একটি employees টেবিলে প্রতিটি কর্মীর ম্যানেজার খোঁজা।
আমার join কেন ডুপ্লিকেট সারি ফেরত দিচ্ছে?
join কলাম কোনো একটি টেবিলে অনন্য না হলে ডুপ্লিকেট হয়। আপনার কী যাচাই করুন বা join-এর আগে ডেটা একত্র (aggregate) করুন।
আরও শিখুন (ইংরেজি লেখা)
টেস্টিং, WordPress বা SEO-তে সাহায্য দরকার?
আমরা দলগুলোকে ভালো সফটওয়্যার প্রকাশ করতে এবং তাদের সাইট বড় করতে সাহায্য করি। আপনি কী নিয়ে কাজ করছেন জানান, আমরা পরবর্তী ধাপ সুপারিশ করব।
আরো গাইড পরীক্ষা, এআই এবং আধুনিক উন্নয়ন
এই নিবন্ধটি উপভোগ করেছেন? একটি বিষয় চয়ন করুন এবং সরাসরি আমাদের নতুন টিউটোরিয়ালগুলিতে যান।
