आज हम कॉमन टेबल एक्सप्रेशन के बारे में जानने जा रहे हैं जो कि एक नई सुविधा है जिसे SQL सर्वर 2005 में पेश किया गया था और बाद के संस्करणों में भी उपलब्ध है।
सामान्य टेबल एक्सप्रेशन: - कॉमन टेबल एक्सप्रेशन को एक अस्थायी परिणाम सेट के रूप में या दूसरे शब्दों में SQL सर्वर में विचारों का एक विकल्प के रूप में परिभाषित किया जा सकता है। सामान्य तालिका अभिव्यक्ति केवल उस कथन के बैच में मान्य होती है जहाँ इसे परिभाषित किया गया था और अन्य सत्रों में इसका उपयोग नहीं किया जा सकता है।
CTE (सामान्य तालिका अभिव्यक्ति) घोषित करने का सिंटैक्स: -
with [Name of CTE]
as
(
Body of common table expression
)
एक उदाहरण लेते हैं: -
CREATE TABLE Employee([EID] [int] IDENTITY(10,5) NOT NULL,[Name] [varchar](50) NULL)
insert into Employee(Name) values('Neeraj')
insert into Employee(Name) values('dheeraj')
insert into Employee(Name) values('shayam')
insert into Employee(Name) values('vikas')
insert into Employee(Name) values('raj')
CREATE TABLE DEPT(EID INT,DEPTNAME VARCHAR(100))
insert into dept values(10,'IT')
insert into dept values(15,'Finance')
insert into dept values(20,'Admin')
insert into dept values(25,'HR')
insert into dept values(10,'Payroll')
मैंने दो टेबल कर्मचारी और विभाग बनाए हैं और प्रत्येक तालिका में 5 पंक्तियाँ डाली हैं। अब मैं इन तालिकाओं में शामिल होना चाहता हूं और इसे आगे उपयोग करने के लिए एक अस्थायी परिणाम तैयार करना चाहता हूं।
With CTE_Example(EID,Name,DeptName)
as
(
select Employee.EID,Name,DeptName from Employee
inner join DEPT on Employee.EID =DEPT.EID
)
select * from CTE_Example
एक-एक करके स्टेटमेंट के प्रत्येक लाइन को लें और समझें।
CTE को परिभाषित करने के लिए हम "क्लॉज़" के साथ लिखते हैं, फिर हम टेबल एक्सप्रेशन को एक नाम देते हैं, यहाँ मैंने "CTE_Example" नाम दिया है
फिर हम "अस" लिखते हैं और अपने कोड को दो कोष्ठक (---) में संलग्न करते हैं, हम संलग्न कोष्ठक में कई तालिकाओं में शामिल हो सकते हैं।
अंतिम पंक्ति में, मैंने CTE_Example से "Select *" का उपयोग किया है, हम कोड की अंतिम पंक्ति में कॉमन टेबल एक्सप्रेशन का उल्लेख कर रहे हैं, इसलिए हम कह सकते हैं कि इसका एक दृश्य जैसा है, जहाँ हम एक में दृश्य को परिभाषित और उपयोग कर रहे हैं बैच और CTE को स्थायी ऑब्जेक्ट के रूप में डेटाबेस में संग्रहीत नहीं किया जाता है। लेकिन यह एक दृश्य की तरह व्यवहार करता है। हम CTE पर डिलीट और अपडेट स्टेटमेंट कर सकते हैं और इसका सीधा असर उस टेबल पर पड़ेगा, जो CTE में इस्तेमाल की जा रही है। इस तथ्य को समझने के लिए एक उदाहरण लेते हैं।
With CTE_Example(EID,DeptName)
as
(
select EID,DeptName from DEPT
)
delete from CTE_Example where EID=10 and DeptName ='Payroll'
उपरोक्त कथन में हम CTE_Example से एक पंक्ति हटा रहे हैं और यह CTE में उपयोग की जा रही संदर्भित तालिका "DEPT" से डेटा को हटा देगा।