মডিউল পাঠ (2/4)
NULL হ্যান্ডলিং: IS NULL এবং COALESCE
employees ডেটাসেটে, আন্দ্রেয়া কস্তা বিশেষ: তার আছে
department_id = NULL আপনি ইতিমধ্যেই NULL (এর সাথে
LEFT JOIN), কিন্তু সময় এসেছে গুরুত্ব সহকারে নেওয়ার: NULL SQL এ
অন্য যেকোনো মান থেকে অন্যরকম আচরণ করুন এবং তাদের উপেক্ষা করা অন্যতম
প্রোডাকশন কোডে বাগগুলির প্রধান কারণ।
NULL শূন্য নয়, খালি স্ট্রিং নয়
NULL মানে অজানা / অনুপস্থিত মান। এটা 0 নয়, '' নয়, নয়
false এটা "আমি জানি না"। এটি থেকে একটি আশ্চর্যজনক সম্পত্তি অনুসরণ করে:
NULL কোনো কিছুর সমান নয়, এমনকি নিজেও নয়।
-- All these expressions return NULL (not true!):
SELECT NULL = NULL; -- NULL
SELECT NULL = 0; -- NULL
SELECT NULL <> 'qualcosa'; -- NULLসুনির্দিষ্ট পরিণতি: WHERE column = NULL কখনো কাজ করে না। আপনাকে অবশ্যই ব্যবহার করতে হবে
ডেডিকেটেড অপারেটর IS NULL / IS NOT NULL:
-- Employees without a department:
SELECT first_name, last_name
FROM employees
WHERE department_id IS NULL;
-- Employees WITH a department:
SELECT first_name, last_name
FROM employees
WHERE department_id IS NOT NULL;COALESCE — শূন্য ফলব্যাক
প্রায়শই আপনি NULL এর পরিবর্তে কিছু প্রদর্শন করতে চান যখন ডেটা
অনুপস্থিত: স্ট্রিং '(none)', শূন্য, একটি ডিফল্ট তারিখ। ফাংশন যে
ঠিক এটিই COALESCE(a, b, c, ...): এটি প্রথমটি ফেরত দেয়
নন-নাল আর্গুমেন্ট তালিকায়।
-- Show the department_id, or 0 if missing:
SELECT first_name, last_name, COALESCE(department_id, 0) AS dept
FROM employees;একটি LEFT JOIN এর সাথে মিলিত হয়ে রিপোর্টের জন্য এটি অবিশ্বাস্যভাবে শক্তিশালী হয়ে ওঠে:
SELECT e.first_name,
e.last_name,
COALESCE(d.name, '(nessun dipartimento)') AS dipartimento
FROM employees AS e
LEFT JOIN departments AS d ON e.department_id = d.id;ফলাফল: সমস্ত কর্মচারীরা ডিপার্টমেন্টের নাম বা স্পষ্টভাবে ফিরে এসেছে যাদের নেই তাদের জন্য লেবেল।
NULL এবং সমষ্টি
সমষ্টিগত ফাংশন উপেক্ষা করুন NULLs (COUNT(*) ছাড়া):
COUNT(department_id)শুধুমাত্র একটি মান সহ সারি গণনা করে;AVG(salary)গড়NULLকে উপেক্ষা করে — এটি তাদের 0 হিসাবে না বিবেচনা করে;SUM(...)যোগফল শুধুমাত্র অ-NULL মান।
এই আপনি কি চান প্রায় সবসময়. কিন্তু এটা জেনে রাখা ভালো: যদি আপনি হন
"মোট কর্মচারীর সংখ্যা" COUNT(*) ব্যবহার করা হচ্ছে, নয়
COUNT(department_id)
চেষ্টা করে দেখুন
প্রত্যেক কর্মচারীর জন্য, প্রথম নাম (প্রথম_নাম), পদবী (শেষ_নাম) এবং একটি কলাম 'dipartimento_id' দেখান যা তাদের বিভাগ_আইডি বা -1 বরাদ্দ না করলে সমান হয়। তিন কলাম, প্রতি কর্মী এক সারি।
ইঙ্গিত দেখান
NULL-কে -1 দিয়ে প্রতিস্থাপন করতে COALESCE(department_id, -1) ব্যবহার করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
সমস্ত কর্মচারীদের প্রথম নাম (first_name), পদবী (last_name) এবং বিভাগের নাম (departments.name) ফেরত দিন, যখন বিভাগটি অনুপস্থিত থাকে তখন '(nessuno)' দেখান। Left Join + COALESCE ব্যবহার করুন।
ইঙ্গিত দেখান
COALESCE(d.name, '(nessuno)') বাম যোগদান দ্বারা প্রবর্তিত NULL পরিচালনা করে।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ