మాడ్యూల్ పాఠాలు (2/4)
NULLలను నిర్వహించడం: NULL మరియు COALESCE
employees డేటాసెట్లో, ఆండ్రియా కోస్టా ప్రత్యేకమైనది: అతను
department_id = NULL. మీరు ఇప్పటికే NULL (తో
LEFT JOIN), అయితే దీన్ని తీవ్రంగా పరిగణించాల్సిన సమయం ఆసన్నమైంది: NULLs in 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 ఫాల్బ్యాక్
డేటా ఉన్నప్పుడు మీరు తరచుగా NULLకి బదులుగా ఏదైనా డిస్ప్లే చేయాలనుకుంటున్నారు
లేదు: స్ట్రింగ్ '(none)', సున్నా, డిఫాల్ట్ తేదీ. ఆ ఫంక్షన్
సరిగ్గా ఇదే COALESCE(a, b, c, ...): ఇది మొదటిది అందిస్తుంది
జాబితాలో NULL కాని వాదన.
-- 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)సగటులుNULLsని విస్మరిస్తాయి — ఇది వాటిని కాదు 0గా పరిగణించదు;SUM(...)NULL కాని విలువలను మాత్రమే సమకూరుస్తుంది.
దాదాపు ఎల్లప్పుడూ మీరు కోరుకునేది ఇదే. కానీ తెలుసుకోవడం మంచిది: మీరు ఉంటే
"మొత్తం ఉద్యోగుల సంఖ్య" కోసం వెతుకుతోంది COUNT(*)ని ఉపయోగించండి, కాదు
COUNT(department_id).
దీనిని ప్రయత్నించండి
ప్రతి ఉద్యోగికి, మొదటి పేరు (మొదటి_పేరు), చివరి పేరు (చివరి_పేరు) మరియు వారి డిపార్ట్మెంట్_ఐడికి సమానమైన 'డిపార్టిమెంటో_ఐడి' కాలమ్ లేదా కేటాయించకపోతే -1ని చూపండి. మూడు నిలువు వరుసలు, ఒక్కో ఉద్యోగికి ఒక వరుస.
సూచనను చూపించు
NULLలను -1తో భర్తీ చేయడానికి COALESCE(department_id, -1)ని ఉపయోగించండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
అన్ని ఉద్యోగుల మొదటి పేరు (మొదటి_పేరు), చివరి పేరు (చివరి_పేరు) మరియు విభాగం పేరు (departments.name) అందించండి, డిపార్ట్మెంట్ తప్పిపోయినప్పుడు '(nessuno)'ని చూపుతుంది. LEFT JOIN + COALESCEని ఉపయోగించండి.
సూచనను చూపించు
COALESCE(d.name, '(nessuno)') LEFT JOIN ద్వారా ప్రవేశపెట్టబడిన NULLని నిర్వహిస్తుంది.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది