SQL JOIN সহজ উদাহরণসহ
JOIN দুটি table-এর row একত্র করে। প্রতিটি ধরন ছোট উদাহরণসহ এবং ভুল ফলের কারণ হওয়া ভুলগুলো জানুন।

JOIN সম্পর্কিত column ধরে দুটি table-এর row একত্র করে। আমাদের উদাহরণে দুটি table।
authors
| id | name |
|---|---|
| 1 | Rima |
| 2 | Karim |
| 3 | Sumon |
articles
| id | title | author_id |
|---|---|---|
| 10 | Intro to SQL | 1 |
| 11 | Caching | 1 |
| 12 | Indexes | 2 |
| 13 | Draft (no author) | NULL |
INNER JOIN
শুধু যে row দুই table-এই মেলে।
SELECT a.name, ar.title
FROM authors a
INNER JOIN articles ar ON ar.author_id = a.id;
ফল: Rima-র দুটি article, Karim-এর একটি। Sumon (কোনো article নেই) ও draft (কোনো author নেই) বাদ।
LEFT JOIN
বাম table-এর সব row, সাথে ডান থেকে মিলে যাওয়াগুলো। মিল না থাকলে ডানের column NULL।
SELECT a.name, ar.title
FROM authors a
LEFT JOIN articles ar ON ar.author_id = a.id;
এবার Sumon আসে, title = NULL সহ। "সব author, article না থাকলেও" দেখাতে এটি ব্যবহার করুন।
মিল নেই এমন row খোঁজা:
SELECT a.name
FROM authors a
LEFT JOIN articles ar ON ar.author_id = a.id
WHERE ar.id IS NULL; -- article নেই এমন author
RIGHT JOIN
LEFT JOIN-এর উল্টো: ডান table-এর সব row। বেশিরভাগ মানুষ table-এর ক্রম বদলে LEFT JOIN-ই ব্যবহার করে।
FULL OUTER JOIN
দুই table-এর সব row, যেখানে সম্ভব মিলিয়ে। Sumon এবং draft দুটোই দেখায়। সব database-এ নেই (পুরোনো MySQL-এ নেই)।
CROSS JOIN
একটি table-এর প্রতিটি row অন্যটির প্রতিটি row-র সাথে (Cartesian product)। ৩ author x ৪ article = ১২ row। বিরল, সংমিশ্রণ বানাতে কাজে লাগে। ON শর্ত ভুলে গেলে অজান্তে এটি হয়ে যেতে পারে।
সাধারণ ভুল
- Duplicate row। "এক" table-কে "অনেক" table-এর সাথে join করলে "এক" দিকটি পুনরাবৃত্ত হয়। Rima দুবার আসে। তখন authors-এর কোনো column
SUMকরলে দ্বিগুণ গুনবেন। সাবধানে aggregate করুন বা subquery ব্যবহার করুন। - WHERE-এ ডান table ফিল্টার।
LEFT JOIN ... WHERE ar.title = 'Caching'NULL row সরিয়ে দেয়, তাই নীরবে INNER JOIN-এর মতো আচরণ করে। শর্তটিON-এ দিন:ON ar.author_id = a.id AND ar.title = 'Caching'। - ভুল column বা unique নয় এমন column ধরে join, যা row-এর বিস্ফোরণ ঘটায়।
- NULL ভুলে যাওয়া:
NULL = NULLসত্য নয়, তাই NULL key-র row কখনো মেলে না।
Performance
Join column-এ index থাকলে join দ্রুত (index পর্ব দেখুন)। articles.author_id-এর মতো foreign key সবসময় index করুন।
মূল কথা: শুধু মিলের জন্য INNER, বামের সব রাখতে LEFT, আর duplicate এবং ডান table-এ WHERE ফিল্টার থেকে সাবধান।
Backend ও Database সিরিজ, পর্ব ১ (SQL ও transaction): 1 নম্বর (মোট 4)।


