ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 3 · 4లో పాఠం 2కోర్సులో 10/57~10 min
మాడ్యూల్ పాఠాలు (2/4)

అన్నింటినీ ఎడమవైపు ఉంచడం: ఎడమవైపు చేరండి

మునుపటి పాఠంలోని INNER JOIN ఒక ముఖ్యమైన దుష్ప్రభావాన్ని కలిగి ఉంది: ఇది పోలిక లేని అడ్డు వరుసలను డ్రాప్ చేస్తుంది. ఉద్యోగికి డిపార్ట్‌మెంట్ లేకపోతే (department_id NULL), అవి ఫలితం నుండి అదృశ్యమవుతాయి.

కొన్నిసార్లు మీరు కోరుకునేది అదే. తరచుగా, అయితే, ఇది కాదు: HR నివేదికలో డిపార్ట్‌మెంట్ లేని వారితో సహా అన్ని ఉద్యోగులను చూడటం చాలా అవసరం, మరియు వారు ఎవరో తెలుసుకోండి. దీని కోసం LEFT JOIN (పూర్తిగా, LEFT OUTER JOIN).

ఇది ఎలా పనిచేస్తుంది

SQL
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 తర్వాత. దాని వరుసలన్నీ ఎల్లప్పుడూ మనుగడలో ఉంటాయి.

SQL
-- 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తో ఫిల్టర్ చేయడం ద్వారా కుడివైపు పట్టికలో మీరు సరిగ్గా వరుసలు ఏ మ్యాచ్ లేకుండా కనుగొంటారు:

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

ఈ ట్రిక్ వాస్తవ ప్రపంచంలో ఎల్లవేళలా ఉపయోగించబడుతుంది: "నాకు సంఖ్యతో ఆర్డర్‌లను కనుగొనండి కస్టమర్", "రివ్యూలు లేని ఉత్పత్తులు", "ఎప్పుడూ లాగిన్ చేయని వినియోగదారులు లో".

దీనిని ప్రయత్నించండి

వ్యాయామం#sql.m3.l2.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

డిపార్ట్‌మెంట్ కేటాయించని ఉద్యోగుల మొదటి పేరు (మొదటి_పేరు) మరియు చివరి పేరు (చివరి_పేరు) తిరిగి ఇవ్వండి. ఒకటి లేదా అంతకంటే ఎక్కువ అడ్డు వరుసలు, రెండు నిలువు వరుసలు.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

d.id NULLతో ఉన్న ప్రదేశాన్ని పూర్తి చేయండి — ఎడమవైపు చేరడానికి సరిపోలే విభాగాన్ని కనుగొనని అడ్డు వరుసలు మీకు కావాలి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#sql.m3.l2.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

అన్ని డిపార్ట్‌మెంట్‌లను (departments.name) మరియు వాటి పక్కన ఉద్యోగులు లేని డిపార్ట్‌మెంట్‌లతో సహా ఉద్యోగుల సంఖ్యను జాబితా చేయండి (వాటికి 0 చూపించు). సూచన: డిపార్ట్‌మెంట్‌ల నుండి ప్రారంభించి, ఉద్యోగులతో ఎడమవైపు చేరి, ఆపై + COUNT ద్వారా గ్రూప్ చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

సరిపోలిక లేనప్పుడు 0ని లెక్కించడానికి COUNT(e.id) (COUNT(*) కాదు)ని ఉపయోగించండి: NULLతో ఎడమవైపు చేరిన అడ్డు వరుస కారణంగా COUNT(*) 1గా లెక్కించబడుతుంది.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది