OUTER JOINకి కారణాలు

చెప్పాలంటే, మేము మా స్ప్రెడ్‌షీట్‌లను విలీనం చేసినప్పుడు ఇంకా క్లీనర్ లేనందున మా ఆఫీస్ క్లీనింగ్ టాస్క్‌లు మాయమైనప్పుడు మీకు గుర్తుందా?

మీరు ఇలాంటి ప్రశ్నను అమలు చేస్తే:

SELECT * FROM task

అప్పుడు మేము ఈ ఫలితాన్ని పొందుతాము:

id ఉద్యోగి_ఐడి పేరు గడువు
1 1 ఫ్రంటెండ్‌లో బగ్‌ను పరిష్కరించండి 2022-06-01
2 2 బ్యాకెండ్‌లో బగ్‌ను పరిష్కరించండి 2022-06-15
3 5 కాఫీ కొనండి 2022-07-01
4 5 కాఫీ కొనండి 2022-08-01
5 5 కాఫీ కొంటాను 2022-09-01
6 (శూన్య) కార్యాలయాన్ని శుభ్రం చేయండి (శూన్య)
7 4 జీవితం ఆనందించండి (శూన్య)
8 6 జీవితం ఆనందించండి (శూన్య)

Employee_id ద్వారా ఉద్యోగి పట్టికతో టాస్క్ టేబుల్‌లో చేరడానికి ప్రయత్నిస్తే "క్లియర్ ఆఫీస్" టాస్క్ అదృశ్యమవుతుంది.

ఈ సమస్యను పరిష్కరించడానికి, JOIN ఆపరేటర్‌కు వివిధ మాడిఫైయర్‌లు జోడించబడ్డాయి, ఇది అటువంటి అనాథ వరుసలను మరొక పట్టికలో జత లేకుండా నిల్వ చేయడానికి అనుమతిస్తుంది.

జాయిన్ ఆపరేటర్ యొక్క క్లాసిక్ ఫారమ్ గురించి నేను మీకు గుర్తు చేస్తాను:

table 1 JOIN table 2 ON condition

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

table 1 LEFT JOIN table 2 ON condition

మీరు చేరిన పట్టిక కుడి పట్టిక నుండి అన్ని అడ్డు వరుసలను కలిగి ఉండాలని మీరు కోరుకుంటే , మీరు వ్రాయాలి:

table 1 RIGHT JOIN table 2 ON
 condition

కార్యనిర్వాహకుడు లేని పనులు కోల్పోకుండా అన్ని పనులు మరియు ఉద్యోగులను మిళితం చేసే ప్రశ్నను వ్రాస్దాం. దీన్ని చేయడానికి, ఒక ప్రశ్నను వ్రాయండి:

SELECT * FROM employee e RIGHT JOIN task t ON e.id = t.emploee_id

మరియు ఈ ప్రశ్న యొక్క ఫలితం:

id పేరు వృత్తి జీతం వయస్సు చేరుతున్న తేదీ id ఉద్యోగి_ఐడి పేరు
1 ఇవనోవ్ ఇవాన్ ప్రోగ్రామర్ 100000 25 2012-06-30 1 1 ఫ్రంటెండ్‌లో బగ్‌ను పరిష్కరించండి
2 పెట్రోవ్ పీటర్ ప్రోగ్రామర్ 80000 23 2013-08-12 2 2 బ్యాకెండ్‌లో బగ్‌ను పరిష్కరించండి
4 రాబినోవిచ్ మోయిషా దర్శకుడు 200000 35 2015-05-12 7 4 జీవితం ఆనందించండి
5 కిరియెంకో అనస్తాసియా ఆఫీసు మేనేజర్ 40000 25 2015-10-10 3 5 కాఫీ కొనండి
5 కిరియెంకో అనస్తాసియా ఆఫీసు మేనేజర్ 40000 25 2015-10-10 4 5 కాఫీ కొనండి
5 కిరియెంకో అనస్తాసియా ఆఫీసు మేనేజర్ 40000 25 2015-10-10 5 5 కాఫీ కొనండి
6 వాస్కా పిల్లి 1000 3 2018-11-11 8 6 జీవితం ఆనందించండి
(శూన్య) (శూన్య) (శూన్య) (శూన్య) (శూన్య) (శూన్య) 6 (శూన్య) కార్యాలయాన్ని శుభ్రం చేయండి

మా పట్టికకు మరొక అడ్డు వరుస జోడించబడింది మరియు ఆసక్తికరంగా, దానిలో చాలా NULL విలువలు ఉన్నాయి. "క్లీన్ ఆఫీస్" టాస్క్ కోసం ఎంప్లాయి టేబుల్ నుండి ఎగ్జిక్యూటర్ లేనందున, ఎంప్లాయ్ టేబుల్ నుండి తీసుకోబడిన మొత్తం డేటా NULLగా ప్రదర్శించబడుతుంది.

JOIN రకాలు

మొత్తం 4 రకాల JOINలు ఉన్నాయి. అవి క్రింది పట్టికలో ప్రదర్శించబడ్డాయి:

సంక్షిప్త ప్రవేశం సుదీర్ఘ ప్రవేశం వివరణ
1 చేరండి లోపలి చేరండి A మరియు B పట్టికలలో ఉన్న రికార్డులు మాత్రమే
2 ఎడమ చేరండి ఎడమవైపు చేరండి పట్టిక A నుండి జత లేని అన్ని అడ్డు వరుసలు తప్పనిసరిగా ఉండాలి
3 కుడి చేరండి కుడివైపు చేరండి పట్టిక B నుండి జత లేని అన్ని అడ్డు వరుసలు తప్పనిసరిగా ఉండాలి
4 బయట చేరండి పూర్తి బయట చేరండి A మరియు B పట్టికల నుండి బేస్ జతల అన్ని వరుసలు తప్పనిసరిగా ఉండాలి

సరళత కోసం, మేము పట్టికలను సెట్‌లుగా సూచిస్తే, అప్పుడు JOIN చిత్రంగా ప్రదర్శించబడుతుంది:

సెట్ ఖండన అంటే ఒక టేబుల్‌కి అది సూచించే మరొక పట్టిక నుండి సంబంధిత రికార్డు ఉంది.

ఇంటర్వ్యూ నుండి ప్రశ్న

కొన్నిసార్లు అనుభవం లేని ప్రోగ్రామర్లు ఇంటర్వ్యూలో చాలా సులభమైన ప్రశ్నతో పేల్చివేయబడతారు. మా పట్టికలను బట్టి, దానిని ఈ క్రింది విధంగా రూపొందించవచ్చు:

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

ఈ సమస్యను పరిష్కరించడానికి అనేక మార్గాలు ఉన్నాయి, కానీ నేను సరళమైన వాటితో ప్రారంభిస్తాను: ముందుగా, మీరు ఎడమ చేరికతో మా పట్టికలలో చేరవచ్చు, ఆపై తప్పిపోయిన డేటా NULLలతో ప్యాడ్ చేయబడిన అన్ని అడ్డు వరుసలను మినహాయించడానికి WHEREని ఉపయోగించండి.

SELECT * FROM employee e LEFT JOIN task t ON e.id = t.emploee_id  
WHERE t.id IS NULL 

మరియు ఈ ప్రశ్న యొక్క ఫలితం:

id పేరు వృత్తి జీతం వయస్సు చేరుతున్న తేదీ id ఉద్యోగి_ఐడి పేరు
3 ఇవనోవ్ సెర్గీ టెస్టర్ 40000 ముప్పై 2014-01-01 (శూన్య) (శూన్య) (శూన్య)

ఈ పరిష్కారం యొక్క ఏకైక ప్రతికూలత ఏమిటంటే, ఇక్కడ పట్టికలోని వరుసలు NULLని కలిగి ఉంటాయి మరియు షరతుల ప్రకారం మేము ఉద్యోగుల జాబితాను ప్రదర్శించాలి.

దీన్ని చేయడానికి, మీరు ఉద్యోగి పట్టిక యొక్క అవసరమైన నిలువు వరుసలను SELECTలో జాబితా చేయాలి లేదా మీరు వాటన్నింటినీ ప్రదర్శించాలనుకుంటే, మీరు ఈ క్రింది నిర్మాణాన్ని వ్రాయవచ్చు:

SELECT e.* FROM employee e, task t 

పూర్తి అభ్యర్థన ఇలా కనిపిస్తుంది:

SELECT e.*  
FROM employee e RIGHT JOIN task t ON e.id = t.emploee_id  
WHERE t.id IS NULL 

ఈ ప్రశ్న యొక్క ఫలితం:

id పేరు వృత్తి జీతం వయస్సు చేరుతున్న తేదీ
3 ఇవనోవ్ సెర్గీ టెస్టర్ 40000 ముప్పై 2014-01-01

హోంవర్క్ కోసం మిగిలిన పద్ధతులు మీకు మిగిలి ఉన్నాయి. వాటిని మీరే కనుగొనడంలో మీకు కలిగే ఆనందాన్ని నేను హరించడం ఇష్టం లేదు.