தொகுதி பாடங்கள் (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 க்கு பதிலாக அடிக்கடி டிஸ்ப்ளே செய்ய வேண்டும்
விடுபட்டது: சரம் '(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).
முயற்சி செய்து பாருங்கள்
ஒவ்வொரு பணியாளருக்கும், முதல் பெயர் (முதல்_பெயர்), கடைசி பெயர் (இறுதி_பெயர்) மற்றும் ஒரு நெடுவரிசை 'dipartimento_id' ஆகியவற்றைக் காட்டவும், இது அவர்களின் டிபார்ட்மென்ட்_ஐடி அல்லது -1 ஒதுக்கப்படாவிட்டால். மூன்று நெடுவரிசைகள், ஒரு பணியாளருக்கு ஒரு வரிசை.
குறிப்பைக் காட்டு
NULLகளை -1 உடன் மாற்ற, COALESCE(department_id, -1) ஐப் பயன்படுத்தவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
அனைத்து ஊழியர்களின் முதல் பெயர் (first_name), கடைசி பெயர் (last_name) மற்றும் துறைப் பெயர் (departments.name) ஆகியவற்றைத் தரவும், துறை இல்லாதபோது '(nessuno)' என்பதைக் காட்டும். LEFT JOIN + COALESCE ஐப் பயன்படுத்தவும்.
குறிப்பைக் காட்டு
COALESCE(d.name, '(nessuno)') LEFT JOIN ஆல் அறிமுகப்படுத்தப்பட்ட NULL ஐக் கையாளுகிறது.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்