মডিউল পাঠ (2/4)
সবকিছু বাম দিকে রাখা: বাম যোগ দিন
পূর্ববর্তী পাঠের INNER JOIN এর একটি গুরুত্বপূর্ণ পার্শ্ব প্রতিক্রিয়া রয়েছে: এটি
ড্রপ সারি যার কোন মিল নেই। যদি একজন কর্মচারীর কোন বিভাগ না থাকে
(department_id হল NULL), তারা ফলাফল থেকে অদৃশ্য হয়ে যায়।
কখনও কখনও যে আপনি কি চান. প্রায়ই, যদিও, এটি হয় না: একটি এইচআর রিপোর্টে
বিভাগ ছাড়া সমস্তকর্মচারীদের দেখা অপরিহার্য,
এবং তারা কারা জানেন। এটাই LEFT JOIN এর জন্য (পুরোপুরি, LEFT OUTER JOIN)।
এটা কিভাবে কাজ করে
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 এর পরে। এর সমস্ত সারি বেঁচে থাকে, সর্বদা।
-- 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 দিয়ে ফিল্টার করে
ডানদিকের টেবিলে আপনি ঠিক সারিগুলি খুঁজে পাবেন কোনও মিল ছাড়াই:
-- 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;এই কৌশলটি বাস্তব জগতে সর্বদা ব্যবহৃত হয়: "না সহ আমাকে অর্ডার খুঁজুন গ্রাহক", "কোনো রিভিউ ছাড়া পণ্য", "ব্যবহারকারী যারা কখনো লগইন করেননি ইন"
চেষ্টা করে দেখুন
কর্মচারীদের প্রথম নাম (first_name) এবং শেষ নাম (last_name) রিটার্ন করুন যাদের কোনো বিভাগ নেই। এক বা একাধিক সারি, দুই কলাম।
ইঙ্গিত দেখান
যেখানে d.id IS NULL দিয়ে সম্পূর্ণ করুন — আপনি সেই সারিগুলি চান যেখানে বাম যোগদান একটি মিলিত বিভাগ খুঁজে পায়নি।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
সমস্ত বিভাগ তালিকাভুক্ত করুন (departments.name) এবং তাদের পাশে কর্মচারীর সংখ্যা, এছাড়াও কোন কর্মচারী নেই এমন বিভাগ সহ (তাদের জন্য 0 দেখান)। ইঙ্গিত: বিভাগগুলি থেকে শুরু করুন এবং কর্মীদের সাথে একটি বাম যোগদান করুন, তারপরে + কাউন্ট দ্বারা গ্রুপ করুন৷
ইঙ্গিত দেখান
কোন মিল না থাকলে 0 গণনা করতে COUNT(e.id) (COUNT(*) নয়) ব্যবহার করুন: NULL-এর সাথে বাম যোগদানের সারির কারণে COUNT(*) 1 গণনা করবে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ