మాడ్యూల్ పాఠాలు (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 NULLతో ఉన్న ప్రదేశాన్ని పూర్తి చేయండి — ఎడమవైపు చేరడానికి సరిపోలే విభాగాన్ని కనుగొనని అడ్డు వరుసలు మీకు కావాలి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
అన్ని డిపార్ట్మెంట్లను (departments.name) మరియు వాటి పక్కన ఉద్యోగులు లేని డిపార్ట్మెంట్లతో సహా ఉద్యోగుల సంఖ్యను జాబితా చేయండి (వాటికి 0 చూపించు). సూచన: డిపార్ట్మెంట్ల నుండి ప్రారంభించి, ఉద్యోగులతో ఎడమవైపు చేరి, ఆపై + COUNT ద్వారా గ్రూప్ చేయండి.
సూచనను చూపించు
సరిపోలిక లేనప్పుడు 0ని లెక్కించడానికి COUNT(e.id) (COUNT(*) కాదు)ని ఉపయోగించండి: NULLతో ఎడమవైపు చేరిన అడ్డు వరుస కారణంగా COUNT(*) 1గా లెక్కించబడుతుంది.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది