தொகுதி பாடங்கள் (2/4)
எல்லாவற்றையும் இடதுபுறத்தில் வைத்திருத்தல்: இடதுபுறம் சேர்
முந்தைய பாடத்தில் உள்ள INNER JOIN ஒரு முக்கியமான பக்க விளைவைக் கொண்டுள்ளது: அது
** பொருத்தம் இல்லாத வரிசைகளை இறக்குகிறது**. ஒரு பணியாளருக்கு எந்த துறையும் இல்லை என்றால்
(department_id என்பது NULL), அவை முடிவில் இருந்து மறைந்துவிடும்.
சில நேரங்களில் நீங்கள் விரும்புவது இதுதான். பெரும்பாலும், இருப்பினும், அது இல்லை: ஒரு HR அறிக்கையில்
துறை இல்லாதவர்கள் உட்பட அனைத்து பணியாளர்களையும் பார்ப்பது அவசியம்,
மற்றும் அவர்கள் யார் என்று தெரியும். அதுதான் 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;இந்த தந்திரம் நிஜ உலகில் எல்லா நேரத்திலும் பயன்படுத்தப்படுகிறது: "எனது ஆர்டர்களைக் கண்டுபிடி இல்லை வாடிக்கையாளர்", "மதிப்புரைகள் இல்லாத தயாரிப்புகள்", "எப்போதும் பதிவு செய்யாத பயனர்கள் இல்".
முயற்சி செய்து பாருங்கள்
ஒதுக்கப்பட்ட துறை இல்லாத ஊழியர்களின் முதல் பெயர் (முதல்_பெயர்) மற்றும் கடைசி பெயர் (இறுதி_பெயர்) திரும்பவும். ஒன்று அல்லது அதற்கு மேற்பட்ட வரிசைகள், இரண்டு நெடுவரிசைகள்.
குறிப்பைக் காட்டு
d.id IS NULL உடன் WHERE ஐ முடிக்கவும் - LEFT JOIN பொருந்தக்கூடிய துறையைக் கண்டறியாத வரிசைகள் உங்களுக்குத் தேவை.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
அனைத்து துறைகளையும் (departments.name) பட்டியலிடவும், அவற்றுக்கு அடுத்ததாக பணியாளர்களின் எண்ணிக்கை, பணியாளர்கள் இல்லாத துறைகள் உட்பட (அவற்றுக்கு 0 ஐக் காட்டு). உதவிக்குறிப்பு: துறைகளில் இருந்து தொடங்கி, ஊழியர்களுடன் இடதுபுறம் இணைந்து, பின்னர் குழுவாக + COUNT.
குறிப்பைக் காட்டு
எந்தப் பொருத்தமும் இல்லாதபோது 0 எண்ணுவதற்கு COUNT(e.id) (COUNT(*) அல்ல) ஐப் பயன்படுத்தவும்: NULL உடன் இடதுபுறம் சேரும் வரிசையின் காரணமாக COUNT(*) 1ஐக் கணக்கிடும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்