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

రెండు పట్టికలు చేరడం: INNER JOIN

ఇప్పటి వరకు మనం ఒక్కో టేబుల్‌ని చదివాము. వాస్తవ ప్రపంచంలో అయితే, డేటా ** బహుళ సంబంధిత పట్టికలలో విస్తరించి**: మా డేటాసెట్‌లో, ఉదాహరణకు, ఒక్కొక్కటి ఉద్యోగి department_idని కలిగి ఉన్నాడు, అది departments పట్టికను సూచిస్తుంది. చూడటానికి డిపార్ట్‌మెంట్ యొక్క పేరు (మరియు దాని id మాత్రమే కాదు) మనం చేరాలి రెండు పట్టికలు. దీన్ని చేసే ఆపరేటర్‌ని JOIN అంటారు.

ప్రాథమిక వాక్యనిర్మాణం

SQL
SELECT columns
FROM   table_a
JOIN   table_b ON table_a.x = table_b.y;

ఆంగ్లంలో చదవండి: *"table_a తీసుకోండి, ప్రతి ఒక్కటి జత చేయడం ద్వారా దానికి table_bని జోడించండి అడ్డు వరుస table_a.x table_b.y"*కి సమానం. ఫలితం కొత్త వర్చువల్ రెండు నిలువు వరుసలతో పట్టిక.

SQL
-- For each employee, also show the name of their department:
SELECT employees.first_name,
       employees.last_name,
       departments.name AS dipartimento
FROM   employees
JOIN   departments ON employees.department_id = departments.id;

ON తర్వాత భాగాన్ని చేరిన స్థితి అంటారు: ఇది ఏమి చెబుతుంది ఇంజిన్ "ఈ రెండు వరుసలు దాదాపు ఒకే విధంగా ఉంటాయి, వాటిని వరుసలో ఉంచండి". లో చాలా సందర్భాలలో ఇది ప్రాథమిక కీ మరియు విదేశీ మధ్య సమానత్వం కీ (ఇక్కడ departments.id మరియు employees.department_id).

INNER JOIN, వివరంగా

పూర్తి కీవర్డ్ INNER JOIN, కానీ JOIN దాని స్వంత ప్రమాణం పర్యాయపదం. "అంతర్గతం" అంటే రెండింటిలో మ్యాచ్ ఉన్న అడ్డు వరుసలు మాత్రమే పట్టికలు తిరిగి ఇవ్వబడ్డాయి:

  • ఉద్యోగికి department_id = NULL ఉంటే, వారు లో కనిపించరు ఫలితం;
  • డిపార్ట్‌మెంట్‌లో ఉద్యోగులు లేకుంటే, అది ఫలితంలో కనిపించదు.

క్వాలిఫైయింగ్ కాలమ్ పేర్లు

రెండు పట్టికలు ఒకే పేరుతో నిలువు వరుసలను కలిగి ఉన్నప్పుడు (ఇక్కడ రెండూ id, మరియు రెండింటికీ name ఉంది, మీరు దాని గురించి ఆలోచిస్తే), మీరు ఏ పట్టికని పేర్కొనాలి table.column అని వ్రాయడం ద్వారా నిలువు వరుస వస్తుంది. పొడవైన పేర్లను పునరావృతం చేయకుండా ఉండటానికి, మారుపేర్లు తరచుగా ఉపయోగించబడతాయి (మీరు వాటిని మాడ్యూల్ 2లో చూసారు):

SQL
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM   employees   AS e
JOIN   departments AS d ON e.department_id = d.id;

AS ఇక్కడ కూడా ఐచ్ఛికం: FROM employees e అదే పని చేస్తుంది.

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

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

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

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

e.department_id మరియు d.id మధ్య సమానత్వంతో ON షరతును పూర్తి చేయండి, ఆపై d.cityని మూడవ నిలువు వరుసగా ఎంచుకోండి.

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

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

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

మిలానోలో ఉన్న డిపార్ట్‌మెంట్‌లో పని చేసే ఉద్యోగులందరి మొదటి పేరు (మొదటి_పేరు) మరియు చివరి పేరు (చివరి_పేరు) జాబితా చేయండి. డిపార్ట్‌మెంట్ పేరు మీద కాకుండా, డిపార్ట్‌మెంట్స్. సిటీలో ఫిల్టర్ చేయండి.

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

మునుపటి వ్యాయామం వలె చేరండి, కానీ డిపార్ట్‌మెంట్ పేరుకు బదులుగా d.city = 'మిలానో'లో ఫిల్టర్ చేయండి.

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