মূল কন্টেন্টে যান
মডিউল 3 · 2-এর পাঠ 4কোর্সে 10/57~10 min
মডিউল পাঠ (2/4)

সবকিছু বাম দিকে রাখা: বাম যোগ দিন

পূর্ববর্তী পাঠের INNER JOIN এর একটি গুরুত্বপূর্ণ পার্শ্ব প্রতিক্রিয়া রয়েছে: এটি ড্রপ সারি যার কোন মিল নেই। যদি একজন কর্মচারীর কোন বিভাগ না থাকে (department_id হল NULL), তারা ফলাফল থেকে অদৃশ্য হয়ে যায়।

কখনও কখনও যে আপনি কি চান. প্রায়ই, যদিও, এটি হয় না: একটি এইচআর রিপোর্টে বিভাগ ছাড়া সমস্তকর্মচারীদের দেখা অপরিহার্য, এবং তারা কারা জানেন। এটাই LEFT JOIN এর জন্য (পুরোপুরি, LEFT OUTER JOIN)।

এটা কিভাবে কাজ করে

SQL
SELECT columns
FROM   table_a
LEFT JOIN table_b ON table_a.x = table_b.y;

ইংরেজিতে পড়ুন: "table_a এর সব সারি রাখুন; প্রতিটির জন্য চেষ্টা করুন table_b থেকে একটি সারি সংযুক্ত করুন; কোন মিল না থাকলে, থেকে কলাম পূরণ করুন table_b এর সাথে NULL"।

মূল শব্দটি হল LEFT: এর অর্থ "বাম টেবিল", অর্থাৎ লেখা FROM এর পরে। এর সমস্ত সারি বেঁচে থাকে, সর্বদা।

SQL
-- All employees, including those without a department:
SELECT e.first_name,
       e.last_name,
       d.name AS dipartimento
FROM   employees   AS e
LEFT JOIN departments AS d ON e.department_id = d.id;

আমাদের ডেটাসেটে এই ক্যোয়ারীটি 10 সারি প্রদান করে (প্রতিটি একজন কর্মচারী)। আন্দ্রেয়া কস্তা, যার department_id = NULL আছে, dipartimento = NULL এর সাথে উপস্থিত হয় অদৃশ্য হওয়ার পরিবর্তে।

"কোনও মিল নেই" সারি খোঁজা হচ্ছে

একটি খুব দরকারী ফলাফল: এর একটি কলামে IS NULL দিয়ে ফিল্টার করে ডানদিকের টেবিলে আপনি ঠিক সারিগুলি খুঁজে পাবেন কোনও মিল ছাড়াই:

SQL
-- Orphan employees: no department assigned
SELECT e.first_name, e.last_name
FROM   employees   AS e
LEFT JOIN departments AS d ON e.department_id = d.id
WHERE  d.id IS NULL;

এই কৌশলটি বাস্তব জগতে সর্বদা ব্যবহৃত হয়: "না সহ আমাকে অর্ডার খুঁজুন গ্রাহক", "কোনো রিভিউ ছাড়া পণ্য", "ব্যবহারকারী যারা কখনো লগইন করেননি ইন"

চেষ্টা করে দেখুন

ব্যায়াম#sql.m3.l2.e1
প্রচেষ্টা: 0লোড হচ্ছে...

কর্মচারীদের প্রথম নাম (first_name) এবং শেষ নাম (last_name) রিটার্ন করুন যাদের কোনো বিভাগ নেই। এক বা একাধিক সারি, দুই কলাম।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

যেখানে d.id IS NULL দিয়ে সম্পূর্ণ করুন — আপনি সেই সারিগুলি চান যেখানে বাম যোগদান একটি মিলিত বিভাগ খুঁজে পায়নি।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#sql.m3.l2.e2
প্রচেষ্টা: 0লোড হচ্ছে...

সমস্ত বিভাগ তালিকাভুক্ত করুন (departments.name) এবং তাদের পাশে কর্মচারীর সংখ্যা, এছাড়াও কোন কর্মচারী নেই এমন বিভাগ সহ (তাদের জন্য 0 দেখান)। ইঙ্গিত: বিভাগগুলি থেকে শুরু করুন এবং কর্মীদের সাথে একটি বাম যোগদান করুন, তারপরে + কাউন্ট দ্বারা গ্রুপ করুন৷

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

কোন মিল না থাকলে 0 গণনা করতে COUNT(e.id) (COUNT(*) নয়) ব্যবহার করুন: NULL-এর সাথে বাম যোগদানের সারির কারণে COUNT(*) 1 গণনা করবে।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ