முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 4 · பாடம் 2 இன் 4பாடத்திட்டத்தில் 14/57~10 min
தொகுதி பாடங்கள் (2/4)

NULLகளைக் கையாளுதல்: NULL மற்றும் COALESCE

employees தரவுத்தொகுப்பில், ஆண்ட்ரியா கோஸ்டா சிறப்பு: அவர் department_id = NULL. நீங்கள் ஏற்கனவே NULL (உடன் LEFT JOIN), ஆனால் அதை தீவிரமாக எடுத்துக் கொள்ள வேண்டிய நேரம் வந்துவிட்டது: NULLs in SQL வேறு எந்த மதிப்பிலிருந்தும் ** வித்தியாசமாக** நடந்துகொள்வது, அவற்றைப் புறக்கணிப்பது ஒன்று உற்பத்தி குறியீட்டில் பிழைகள் ஏற்படுவதற்கான முக்கிய காரணங்கள்.

NULL என்பது பூஜ்ஜியம் அல்ல, வெற்று சரம் அல்ல

NULL என்றால் தெரியாத / விடுபட்ட மதிப்பு. இது 0 அல்ல, '' அல்ல, இல்லை false. அது "எனக்குத் தெரியாது". இதிலிருந்து ஒரு ஆச்சரியமான சொத்து பின்வருமாறு: NULL எதற்கும் சமமானதல்ல, தானே கூட.

SQL
-- 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:

SQL
-- 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 அல்லாத வாதம்.

SQL
-- Show the department_id, or 0 if missing:
SELECT first_name, last_name, COALESCE(department_id, 0) AS dept
FROM   employees;

ஒரு LEFT JOIN உடன் இணைந்தால், இது அறிக்கைகளுக்கு நம்பமுடியாத அளவிற்கு சக்தி வாய்ந்தது:

SQL
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).

முயற்சி செய்து பாருங்கள்

உடற்பயிற்சி#sql.m4.l2.e1
முயற்சிகள்: 0ஏற்றுகிறது…

ஒவ்வொரு பணியாளருக்கும், முதல் பெயர் (முதல்_பெயர்), கடைசி பெயர் (இறுதி_பெயர்) மற்றும் ஒரு நெடுவரிசை 'dipartimento_id' ஆகியவற்றைக் காட்டவும், இது அவர்களின் டிபார்ட்மென்ட்_ஐடி அல்லது -1 ஒதுக்கப்படாவிட்டால். மூன்று நெடுவரிசைகள், ஒரு பணியாளருக்கு ஒரு வரிசை.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

NULLகளை -1 உடன் மாற்ற, COALESCE(department_id, -1) ஐப் பயன்படுத்தவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

மதிப்பாய்வு பயிற்சி

உடற்பயிற்சி#sql.m4.l2.e2
முயற்சிகள்: 0ஏற்றுகிறது…

அனைத்து ஊழியர்களின் முதல் பெயர் (first_name), கடைசி பெயர் (last_name) மற்றும் துறைப் பெயர் (departments.name) ஆகியவற்றைத் தரவும், துறை இல்லாதபோது '(nessuno)' என்பதைக் காட்டும். LEFT JOIN + COALESCE ஐப் பயன்படுத்தவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

COALESCE(d.name, '(nessuno)') LEFT JOIN ஆல் அறிமுகப்படுத்தப்பட்ட NULL ஐக் கையாளுகிறது.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்