Common Table Expressions
تعبيرات الجداول المشتركة: دليل شامل للمبتدئين
مقدمة
تُعد تعبيرات الجداول المشتركة (Common Table Expressions أو CTEs) أداة قوية في لغة SQL تسمح لك بتحديد استعلام فرعي مؤقت ضمن استعلام أكبر. هذه الاستعلامات الفرعية المؤقتة تعمل كجداول افتراضية يمكن استخدامها داخل الاستعلام الرئيسي. توفر CTEs طريقة لتبسيط استعلامات SQL المعقدة، وتحسين قابليتها للقراءة، وإعادة استخدام منطق الاستعلام. هذا المقال موجه للمبتدئين ويهدف إلى شرح مفهوم CTEs بطريقة سهلة الفهم مع أمثلة عملية.
ما هي تعبيرات الجداول المشتركة؟
ببساطة، CTE هي مجموعة نتائج من استعلام SELECT، يتم تحديدها بشكل مؤقت وتستخدم داخل استعلام آخر. لا يتم تخزين CTE فعليًا في قاعدة البيانات مثل الجدول العادي. بدلاً من ذلك، يتم حسابها عند تنفيذ الاستعلام الرئيسي. تُعرف CTE أيضًا باسم "استعلامات الجدول الفرعية المسماة".
بناء الجملة (Syntax)
يتم تعريف CTE باستخدام الكلمة الرئيسية `WITH` متبوعة باسم CTE، ثم استعلام `SELECT` الذي يحدد مجموعة النتائج. الاستعلام الرئيسي الذي يستخدم CTE يأتي بعد تعريف CTE.
```sql WITH CTE_Name AS (
SELECT column1, column2 FROM Table_Name WHERE condition
) SELECT column1, column2 FROM CTE_Name WHERE another_condition; ```
- `WITH`: تشير إلى بداية تعريف CTE.
- `CTE_Name`: هو الاسم الذي تختاره لـ CTE. يجب أن يكون الاسم فريدًا داخل الاستعلام.
- `AS`: تفصل بين اسم CTE واستعلام `SELECT`.
- `SELECT ... FROM ... WHERE ...`: هو استعلام `SELECT` الذي يحدد مجموعة النتائج لـ CTE.
- الاستعلام الرئيسي: الاستعلام الذي يستخدم CTE.
لماذا تستخدم تعبيرات الجداول المشتركة؟
هناك العديد من الأسباب التي تجعلك تستخدم CTEs:
- القراءة وسهولة الصيانة: تساعد CTEs في تقسيم الاستعلامات المعقدة إلى أجزاء أصغر وأكثر قابلية للفهم، مما يجعلها أسهل في القراءة والصيانة.
- إعادة الاستخدام: يمكنك إعادة استخدام CTE عدة مرات داخل نفس الاستعلام الرئيسي، مما يقلل من تكرار التعليمات البرمجية.
- الاستعلامات المتكررة: تسمح CTEs بكتابة الاستعلامات المتكررة، وهي مفيدة للتعامل مع البيانات الهرمية مثل شجرة التنظيم.
- تحسين الأداء: في بعض الحالات، يمكن أن تؤدي CTEs إلى تحسين أداء الاستعلام، خاصةً عند استخدامها مع المؤشرات.
- التبسيط: يمكن أن تبسط CTEs الاستعلامات التي تتطلب عمليات تجميع أو حسابات معقدة.
أمثلة عملية
دعنا نفترض أن لدينا جدولين: `Customers` و `Orders`.
{{| class="wikitable" |+ جداول المثال |- | الجدول | الأعمدة | |---|---| | Customers | CustomerID, CustomerName, City | | Orders | OrderID, CustomerID, OrderDate, TotalAmount | }}
مثال 1: استرداد العملاء الذين لديهم طلبات بقيمة إجمالية تزيد عن 100 دولار
بدون CTE:
```sql SELECT c.CustomerName FROM Customers c WHERE c.CustomerID IN (SELECT o.CustomerID FROM Orders o WHERE o.TotalAmount > 100); ```
باستخدام CTE:
```sql WITH HighValueOrders AS (
SELECT CustomerID FROM Orders WHERE TotalAmount > 100
) SELECT c.CustomerName FROM Customers c WHERE c.CustomerID IN (SELECT CustomerID FROM HighValueOrders); ```
كما ترى، يجعل CTE الاستعلام أكثر وضوحًا من خلال فصل منطق تحديد الطلبات ذات القيمة العالية في CTE منفصل.
مثال 2: حساب متوسط قيمة الطلب لكل مدينة
```sql WITH CityOrderTotals AS (
SELECT c.City, SUM(o.TotalAmount) AS TotalOrderAmount FROM Customers c JOIN Orders o ON c.CustomerID = o.CustomerID GROUP BY c.City
) SELECT City, TotalOrderAmount, AVG(TotalOrderAmount) OVER () AS OverallAverage FROM CityOrderTotals; ```
هنا، تحسب CTE `CityOrderTotals` إجمالي قيمة الطلب لكل مدينة، ثم يستخدم الاستعلام الرئيسي هذه النتائج لحساب المتوسط العام.
أنواع CTEs
- CTEs غير المتكررة: هي الأكثر شيوعًا ولا تشير إلى نفسها داخل تعريفها.
- CTEs المتكررة: تستخدم في التعامل مع البيانات الهرمية. يجب أن تحتوي على شرط إنهاء لمنع حلقة لا نهائية.
الاستعلامات المتكررة (Recursive CTEs)
تسمح CTEs المتكررة بالاستعلام عن البيانات الهرمية، مثل هياكل الشجرة أو الرسوم البيانية. تتطلب هذه الأنواع من CTEs شرطًا أساسيًا (anchor member) وشرطًا تكراريًا (recursive member).
مثال (افتراضي): لنفترض أن لدينا جدول `Employees` يحتوي على `EmployeeID` و `ManagerID`. يمكننا استخدام CTE متكررة للعثور على جميع الموظفين الذين يتبعون مديرًا معينًا:
```sql WITH RECURSIVE EmployeeHierarchy AS (
-- شرط أساسي: تحديد المدير المباشر SELECT EmployeeID, ManagerID, 1 AS Level FROM Employees WHERE ManagerID = 1 -- المدير المباشر ذو المعرف 1
UNION ALL
-- شرط تكراري: تحديد الموظفين الذين يتبعون الموظفين في المستوى السابق SELECT e.EmployeeID, e.ManagerID, eh.Level + 1 FROM Employees e JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID
) SELECT EmployeeID, Level FROM EmployeeHierarchy; ```
اعتبارات الأداء
على الرغم من أن CTEs يمكن أن تحسن القراءة، إلا أنها لا تضمن دائمًا تحسين الأداء. في بعض الحالات، قد يتم تنفيذ CTEs بشكل أقل كفاءة من الاستعلامات الفرعية التقليدية. يعتمد الأداء الفعلي على نظام إدارة قواعد البيانات المستخدم وحجم البيانات وتعقيد الاستعلام. لتحسين الأداء، ضع في اعتبارك استخدام المؤشرات وفهم خطة الاستعلام.
الخلاصة
تعد تعبيرات الجداول المشتركة أداة قيمة لتبسيط استعلامات SQL وتحسين قابليتها للقراءة. إنها مفيدة بشكل خاص للاستعلامات المعقدة، والاستعلامات المتكررة، وإعادة استخدام منطق الاستعلام. من خلال فهم بناء الجملة وأنواع CTEs المختلفة، يمكنك الاستفادة من هذه الميزة القوية لتحسين كفاءة تطوير قاعدة البيانات.
روابط ذات صلة
- SQL
- الاستعلامات الفرعية
- الاستعلامات المتكررة
- المؤشرات
- نظام إدارة قواعد البيانات
- البيانات الهرمية
- تحليل البيانات
- تصميم قواعد البيانات
- تحسين الاستعلام
- تجميع البيانات
- البيانات
- الجدول
- العلاقات بين الجداول
- عمليات الربط (JOINs)
- التحليل الفني
- التحليل الأساسي
- استراتيجيات التداول
- إدارة المخاطر
- تحليل حجم التداول
- مؤشرات التداول
- الشموع اليابانية
- مستويات الدعم والمقاومة
- اتجاهات السوق
- التقلبات السعرية
- التحليل الموجي
ابدأ التداول الآن
سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)
انضم إلى مجتمعنا
اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين