CTE (Common Table Expression) হলো T-SQL-এ একটি শক্তিশালী ফিচার যা একটি অনুক্রমিক বা লজিক্যাল কোয়েরি তৈরি করতে ব্যবহৃত হয়। এটি একটি অস্থায়ী রেজাল্ট সেট তৈরি করে, যা পরে পুরো কুয়েরি বা স্টোরড প্রসিডিউরের মধ্যে পুনঃব্যবহার করা যায়। CTE ব্যবহার করে একাধিক অংশে কোড ভাগ করে, এবং লজিক্যালভাবে সেগুলি একত্রিত করা যায়, যা কোডের পাঠযোগ্যতা এবং রক্ষণাবেক্ষণ সহজ করে।
CTE এর সিনট্যাক্স
WITH CTE_Name AS
(
SELECT column1, column2, ...
FROM table_name
WHERE condition
)
SELECT column1, column2
FROM CTE_Name;
- WITH: এটি CTE এর ঘোষণা শুরু করে।
- CTE_Name: CTE এর জন্য একটি নাম যা পরবর্তী কোয়েরি ব্যবহার করবে।
- SELECT: CTE-এ যে ডেটা থাকবে, তা নির্বাচন করতে ব্যবহৃত হয়।
- CTE এর পর, আপনি একটি SELECT স্টেটমেন্ট চালাতে পারেন যা CTE-এ সঞ্চিত ডেটা ব্যবহার করবে।
CTE এর প্রয়োজনীয়তা
কোডের পাঠযোগ্যতা উন্নত করা:
- CTE ব্যবহার করে আপনি কোডটি বেশি পরিষ্কার এবং সহজে পাঠযোগ্য করতে পারেন, কারণ এটি অস্থায়ী টেবিল তৈরি করতে সাহায্য করে যা আপনার কুয়েরি কোডকে ছোট এবং আরও বোধগম্য করে তোলে।
উদাহরণ:
WITH DepartmentSales AS ( SELECT Department, SUM(SalesAmount) AS TotalSales FROM Sales GROUP BY Department ) SELECT Department, TotalSales FROM DepartmentSales WHERE TotalSales > 10000;রিকার্সিভ কোয়েরি:
- CTE ব্যবহার করে রিকার্সিভ কোয়েরি লেখা যায়, যেখানে একটি কোয়েরি নিজেকে পুনরাবৃত্তি (recursive) করতে পারে। এটি হায়ারারকিক্যাল ডেটা যেমন অর্গানাইজেশনাল স্ট্রাকচার বা ফোল্ডার স্ট্রাকচার এর জন্য উপযুক্ত।
উদাহরণ:
WITH RecursiveCTE AS ( SELECT EmployeeID, ManagerID, Name FROM Employees WHERE ManagerID IS NULL UNION ALL SELECT e.EmployeeID, e.ManagerID, e.Name FROM Employees e INNER JOIN RecursiveCTE r ON e.ManagerID = r.EmployeeID ) SELECT * FROM RecursiveCTE;এখানে:
- প্রথমে
ManagerID IS NULLশর্তের মাধ্যমে শীর্ষ কর্মকর্তাদের নির্বাচিত করা হয়েছে। - তারপর
UNION ALLদিয়ে এটি পুনরাবৃত্তি (recursive) করে, যেখানে প্রতিটি কর্মচারীর ManagerID অনুযায়ী তাদের ম্যানেজারের অধীনে কর্মচারী নির্বাচন করা হয়।
পুনঃব্যবহারযোগ্য লজিক:
- CTE ব্যবহার করে একই লজিক একাধিক জায়গায় পুনরায় ব্যবহার করা যেতে পারে। এটি কোডের পুনঃব্যবহারযোগ্যতা বাড়ায় এবং ভুলের সম্ভাবনা কমিয়ে দেয়।
উদাহরণ:
WITH SalesData AS ( SELECT ProductID, SUM(SalesAmount) AS TotalSales FROM Sales GROUP BY ProductID ) SELECT ProductID, TotalSales FROM SalesData WHERE TotalSales > 5000;- জটিল কুয়েরি সহজ করা:
- CTE ব্যবহারের মাধ্যমে একাধিক অংশের জটিল কুয়েরি সহজ করা যায়। এটি আপনার কুয়েরি গঠনকে আরও পরিষ্কার করে তোলে এবং সাবকোয়েরির সংখ্যা কমাতে সাহায্য করে।
গণনা ও বিশ্লেষণ সহজ করা:
- CTE ব্যবহার করে আপনি সহজেই একাধিক সিলেক্ট কুয়েরি বা গণনা করতে পারেন, যেমন অ্যাগ্রিগেট ফাংশন (SUM, AVG, COUNT) বা অন্যান্য জটিল বিশ্লেষণ।
উদাহরণ:
WITH DepartmentSales AS ( SELECT Department, SUM(SalesAmount) AS TotalSales FROM Sales GROUP BY Department ) SELECT Department, TotalSales FROM DepartmentSales WHERE TotalSales > (SELECT AVG(TotalSales) FROM DepartmentSales);- স্টোরড প্রসিডিউর বা ফাংশনের মধ্যে ব্যবহার:
- CTE ব্যবহার করা যায় স্টোরড প্রসিডিউর বা ফাংশনের মধ্যে, যা পুনরায় ব্যবহারযোগ্য এবং কার্যকরী কোড তৈরি করতে সাহায্য করে।
CTE এর সুবিধা
- কোড সহজ ও পরিষ্কার রাখা: CTE ব্যবহার করে জটিল কোয়েরি সহজ করে তোলা যায় এবং কোড পুনঃব্যবহারযোগ্য হয়।
- রিকার্সিভ কুয়েরি সমাধান: CTE ব্যবহার করে সহজে রিকার্সিভ কুয়েরি করা যায়, যা হায়ারারকিক্যাল ডেটা মডেলিংয়ে সহায়ক।
- পুনঃব্যবহারযোগ্য লজিক: একই কোড একাধিকবার ব্যবহার করা যায়, যেমন
WITHস্টেটমেন্টে সংজ্ঞায়িত এক্সপ্রেশন বা গণনা পুনরায় ব্যবহার করা।
সারাংশ
CTE (Common Table Expression) T-SQL-এ একটি শক্তিশালী ফিচার যা কোডের পাঠযোগ্যতা, রিকার্সিভ কোয়েরি, এবং ডেটার পুনঃব্যবহারযোগ্যতা বাড়ায়। CTE ব্যবহার করে আমরা অস্থায়ী টেবিল তৈরি করতে পারি, যা পরে পুরো কুয়েরি বা স্টোরড প্রসিডিউরের মধ্যে পুনঃব্যবহার করা যায়। CTE-এর প্রয়োজনীয়তা বিশেষত জটিল কোয়েরি বা ডেটা বিশ্লেষণের ক্ষেত্রে, যেখানে ডেটা প্রক্রিয়া করা সহজ এবং দক্ষভাবে পরিচালনা করা যায়।
Read more