SQL JOIN সহজ উদাহরণসহ

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

দুটি 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 শর্ত ভুলে গেলে অজান্তে এটি হয়ে যেতে পারে।

সাধারণ ভুল

  1. Duplicate row। "এক" table-কে "অনেক" table-এর সাথে join করলে "এক" দিকটি পুনরাবৃত্ত হয়। Rima দুবার আসে। তখন authors-এর কোনো column SUM করলে দ্বিগুণ গুনবেন। সাবধানে aggregate করুন বা subquery ব্যবহার করুন।
  2. WHERE-এ ডান table ফিল্টার। LEFT JOIN ... WHERE ar.title = 'Caching' NULL row সরিয়ে দেয়, তাই নীরবে INNER JOIN-এর মতো আচরণ করে। শর্তটি ON-এ দিন: ON ar.author_id = a.id AND ar.title = 'Caching'।
  3. ভুল column বা unique নয় এমন column ধরে join, যা row-এর বিস্ফোরণ ঘটায়।
  4. 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)।

আরও পড়ুন

Recursion ও backtracking সহজ উদাহরণে

Recursion সমস্যার ছোট কপি সমাধান করে সমাধান করে। অনেক interview সমস্যায় ব্যবহৃত চিন্তার ধাপ ও backtracking টেমপ্লেট শিখুন।

Interview ও DSA•৩ মিনিটে পড়া