SQLలో, WITH నిబంధనను CTE అని కూడా అంటారు. ఇది ఒక ప్రశ్నలో తాత్కాలిక ఫలితాల సెట్లను సృష్టించడానికి మాకు సహాయపడే శక్తివంతమైన లక్షణం. CTEల యొక్క ఒక ప్రధాన పాత్ర సంక్లిష్ట ప్రశ్నలను చిన్న మరియు పునర్వినియోగ సబ్క్వెరీలుగా సులభతరం చేయడం. ఇది దీర్ఘకాలంలో కోడ్ను మరింత చదవగలిగేలా మరియు నిర్వహించగలిగేలా చేయడానికి సహాయపడుతుంది.
క్లాజ్ మరియు సపోర్టెడ్ ఫంక్షనాలిటీని ఉపయోగించి మేము కామన్ టేబుల్ ఎక్స్ప్రెషన్ల పనితీరును అన్వేషిస్తున్నప్పుడు ఈ ట్యుటోరియల్లో మాతో చేరండి.
అవసరాలు:
ప్రదర్శన ప్రయోజనాల కోసం, మేము ఈ క్రింది వాటిని ఉపయోగిస్తాము:
- MySQL వెర్షన్ 8.0 మరియు అంతకంటే ఎక్కువ
- సకిలా నమూనా డేటాబేస్
అందించిన అవసరాలను తీర్చడంతో, మేము CTEలు మరియు నిబంధనతో మరింత తెలుసుకోవడానికి కొనసాగవచ్చు.
నిబంధనతో SQL
సాధారణ పట్టిక వ్యక్తీకరణలు అని పిలువబడే ఒకటి లేదా అంతకంటే ఎక్కువ తాత్కాలిక ఫలితాల సెట్లను నిర్వచించడానికి నిబంధనతో కూడిన నిబంధన మమ్మల్ని అనుమతిస్తుంది.
మేము ఇతర పట్టిక లేదా ఫలితాల సెట్ వంటి ప్రధాన ప్రశ్నలో ఫలిత CTEలను సూచించవచ్చు. మాడ్యులర్ SQL ప్రశ్నలను రూపొందించడంలో ఇది కీలక పాత్ర పోషిస్తుంది.
మీ అవసరాలను బట్టి CTE యొక్క వాక్యనిర్మాణం కొద్దిగా మారవచ్చు, కిందివి SQLలో CTE యొక్క ప్రాథమిక వాక్యనిర్మాణాన్ని చూపుతాయి:
cte_name (నిలువు వరుస1, నిలువు వరుస2, ...) AS (
-- CTE ప్రశ్న
ఎంచుకోండి ...
నుండి ...
ఎక్కడ ...
)
-- ప్రధాన ప్రశ్న
ఎంచుకోండి ...
నుండి ...
cte_nameలో చేరండి...
ఎక్కడ ...
మేము CTEని సృష్టించాలనుకుంటున్న మరియు ఉపయోగించాలనుకుంటున్న SQL డేటాబేస్కు చెప్పే కీవర్డ్తో ప్రారంభిస్తాము.
తరువాత, మేము CTE కోసం పేరును నిర్దేశిస్తాము, ఇది ఇతర ప్రశ్నలలో దానిని సూచించడానికి అనుమతిస్తుంది.
CTE కాలమ్ మారుపేర్లను కలిగి ఉంటే మేము కాలమ్ పేర్ల యొక్క ఐచ్ఛిక జాబితాను కూడా పేర్కొంటాము.
తరువాత, మేము CTE ప్రశ్నను నిర్వచించడాన్ని కొనసాగిస్తాము. ఇది ఒక జత కుండలీకరణాల్లో జతచేయబడిన అన్ని టాస్క్లు లేదా CTE నిర్వహించే డేటాను కలిగి ఉంటుంది.
చివరగా, మేము CTEని సూచించే ప్రధాన ప్రశ్నను పేర్కొంటాము.
ఉదాహరణ వినియోగం:
CTEలను ఎలా ఉపయోగించాలో మరియు ఎలా పని చేయాలో అర్థం చేసుకోవడానికి ఉత్తమ మార్గాలలో ఒకటి ఆచరణాత్మక ఉదాహరణను చూడటం.
ఉదాహరణకు సకిలా నమూనా డేటాబేస్ తీసుకోండి. మేము అత్యధిక సంఖ్యలో రెంటల్స్తో టాప్ 10 కస్టమర్లను కనుగొనాలనుకుంటున్నాము.
కింది చూపిన CTEని పరిశీలించండి.
అత్యధిక అద్దె గణనలతో టాప్ 10 కస్టమర్లను కనుగొనడానికి SQL విత్ క్లాజ్ని ఉపయోగించడం:
కస్టమర్ రెంటల్స్ AS తో (SELECT c.customer_id, c.first_name, c.last_name, COUNT(r.rental_id) AS rental_count
కస్టమర్ నుండి సి
c.customer_id = r.customer_idలో అద్దెకు చేరండి
c.customer_id, c.first_name, c.last_name ద్వారా గ్రూప్
)
ఎంచుకోండి *
కస్టమర్ రెంటల్స్ నుండి
Rental_count DESC ద్వారా ఆర్డర్ చేయండి
పరిమితి 10;
ఇచ్చిన ఉదాహరణలో, మేము CTEకి కేటాయించాలనుకుంటున్న పేరుతో పాటుగా కీవర్డ్తో కొత్త CTEని నిర్వచించడం ద్వారా ప్రారంభిస్తాము. ఈ సందర్భంలో, మేము దానిని 'కస్టమర్ రెంటల్స్' అని పిలుస్తాము.
CTE బాడీ లోపల, మేము కస్టమర్ మరియు అద్దెల పట్టికలో చేరడం ద్వారా ప్రతి కస్టమర్ కోసం అద్దె గణనను గణిస్తాము.
చివరగా, ప్రధాన ప్రశ్నలో, మేము CTE నుండి అన్ని నిలువు వరుసలను ఎంచుకుంటాము, అద్దె గణన (అవరోహణ క్రమం) ఆధారంగా ఫలితాలను ఆర్డర్ చేస్తాము మరియు అవుట్పుట్ను కేవలం టాప్ 10 వరుసలకు పరిమితం చేస్తాము.
కింది అవుట్పుట్లో చూపిన విధంగా అత్యధిక సంఖ్యలో రెంటల్స్తో కస్టమర్లను పొందేందుకు ఇది మమ్మల్ని అనుమతిస్తుంది:
పునరావృత CTEలు
కొన్ని ఇతర సందర్భాల్లో, మీరు క్రమానుగత డేటా నిర్మాణాలతో వ్యవహరిస్తూ ఉండవచ్చు. ఇక్కడే పునరావృత CTEలు అమలులోకి వస్తాయి.
ఉదాహరణకు మనం క్రమానుగత సంస్థను నావిగేట్ చేయాలనుకునే లేదా చెట్టు లాంటి నిర్మాణాన్ని సూచించాలనుకున్న సందర్భాన్ని తీసుకుందాం. పునరావృత CTEని సృష్టించడానికి మేము పునరావృత కీవర్డ్తో ఉపయోగించవచ్చు.
పునరావృత CTEని ప్రదర్శించడానికి సకిలా డేటాబేస్లో మనం ఉపయోగించగల క్రమానుగత డేటా లేనందున, ఒక ప్రాథమిక ఉదాహరణను సెటప్ చేద్దాం.
పట్టిక విభాగాన్ని సృష్టించండి (డిపార్ట్మెంట్_ఐడి INT PRIMARY కీ AUTO_INCREMENT,
శాఖ_పేరు VARCHAR(255) శూన్యం కాదు,
parent_department_id INT,
విదేశీ కీ (పేరెంట్_డిపార్ట్మెంట్_ఐడి) రిఫరెన్స్ డిపార్ట్మెంట్ (డిపార్ట్మెంట్_ఐడి)
);
విభాగంలోకి చొప్పించండి (డిపార్ట్మెంట్_పేరు, పేరెంట్_డిపార్ట్మెంట్_ఐడి)
విలువలు
('కార్పొరేట్', NULL),
('ఫైనాన్స్', 1),
('HR', 1),
('అకౌంటింగ్', 2),
'రిక్రూటింగ్', 3),
('పేరోల్', 4);
ఈ సందర్భంలో, మేము కొన్ని యాదృచ్ఛిక డేటాతో నమూనా 'డిపార్ట్మెంట్' పట్టికను కలిగి ఉన్నాము. విభాగాల యొక్క క్రమానుగత నిర్మాణాన్ని కనుగొనడానికి, మేము ఈ క్రింది విధంగా పునరావృత CTEని ఉపయోగించవచ్చు:
రికర్సివ్ డిపార్ట్మెంట్ హైరార్కీ AS (డిపార్ట్మెంట్_ఐడి, డిపార్ట్మెంట్_పేరు, పేరెంట్_డిపార్ట్మెంట్_ఐడిని ఎంచుకోండి
విభాగం నుండి
ఎక్కడ parent_department_id శూన్యం
యూనియన్ అన్ని
SELECT d.department_id, d.department_name, d.parent_department_id
డిపార్ట్మెంట్ నుండి డి
dh.parent_department_id = dh.department_idలో డిపార్ట్మెంట్లో చేరండి.
)
ఎంచుకోండి *
డిపార్ట్మెంట్ హైరార్కీ నుండి;
ఈ సందర్భంలో, పునరావృత CTE అనేది NULL “parent_department_id” (రూట్ డిపార్ట్మెంట్లు) కలిగిన విభాగాలతో ప్రారంభమవుతుంది మరియు పిల్లల విభాగాలను పునరావృతంగా తిరిగి పొందుతుంది.
ముగింపు
ఈ ట్యుటోరియల్లో, కీవర్డ్తో ఎలా పని చేయాలో అర్థం చేసుకోవడం ద్వారా కామన్ టేబుల్ ఎక్స్ప్రెషన్స్ వంటి SQL డేటాబేస్లలో అత్యంత ప్రాథమిక మరియు ఉపయోగకరమైన ఫీచర్ల గురించి మేము తెలుసుకున్నాము.