Common Table Expressions
تعبيرات الجدول المشترك: دليل شامل للمبتدئين
تُعد تعبيرات الجدول المشترك (Common Table Expressions أو CTEs) أداة قوية في لغة SQL تسمح للمستخدمين بتحديد استعلامات فرعية مؤقتة أو "مجموعات نتائج" ضمن استعلام SQL أكبر. تُستخدم هذه المجموعات المؤقتة لتسهيل قراءة الاستعلامات المعقدة، وتقليل التكرار، وتحسين الأداء في بعض الحالات. هذا المقال يهدف إلى تقديم شرح مفصل للمبتدئين حول CTEs، وكيفية استخدامها، وفوائدها.
ما هي تعبيرات الجدول المشترك؟
ببساطة، CTE هي مجموعة نتائج يتم تعريفها داخل استعلام SQL. تتشابه مع الاستعلامات الفرعية (Subqueries)، ولكنها توفر مزايا عديدة تجعلها أكثر فعالية وأسهل في الصيانة. بدلاً من كتابة استعلام فرعي متكرر في أماكن متعددة، يمكنك تعريفه مرة واحدة كـ CTE واستخدامه عدة مرات داخل الاستعلام الرئيسي.
تُستخدم كلمة مفتاحية `WITH` لتعريف CTE. يتبعها اسم لـ CTE، ثم تعريف الاستعلام الذي يحدد محتويات CTE، وأخيراً الاستعلام الرئيسي الذي يستخدم CTE.
بناء الجملة الأساسي
```sql WITH CTE_Name AS (
-- تعريف الاستعلام الفرعي هنا SELECT column1, column2 FROM table_name WHERE condition
) -- الاستعلام الرئيسي الذي يستخدم CTE_Name SELECT * FROM CTE_Name WHERE another_condition; ```
في هذا المثال، `CTE_Name` هو اسم CTE، والاستعلام داخل الأقواس يحدد البيانات التي ستكون موجودة في CTE. الاستعلام الرئيسي بعد ذلك يستخدم `CTE_Name` كأنه جدول عادي.
أمثلة عملية
لنفترض أن لدينا جدولين: `Orders` (طلبات) و `Customers` (عملاء).
Column Name | Data Type |
OrderID | INT |
CustomerID | INT |
OrderDate | DATE |
TotalAmount | DECIMAL |
Column Name | Data Type |
CustomerID | INT |
CustomerName | VARCHAR |
City | VARCHAR |
مثال 1: إيجاد الطلبات التي تتجاوز متوسط قيمة الطلب
بدون CTE، قد يكون الاستعلام معقدًا بعض الشيء:
```sql SELECT o.OrderID, o.OrderDate, o.TotalAmount FROM Orders o WHERE o.TotalAmount > (SELECT AVG(TotalAmount) FROM Orders); ```
باستخدام CTE، يصبح الاستعلام أكثر وضوحًا:
```sql WITH AverageOrder AS (
SELECT AVG(TotalAmount) AS AvgAmount FROM Orders
) SELECT o.OrderID, o.OrderDate, o.TotalAmount FROM Orders o, AverageOrder a WHERE o.TotalAmount > a.AvgAmount; ```
هنا، قمنا بتعريف CTE باسم `AverageOrder` لحساب متوسط قيمة الطلب. ثم استخدمنا هذا CTE في الاستعلام الرئيسي لتحديد الطلبات التي تتجاوز هذا المتوسط.
مثال 2: إيجاد العملاء الذين قدموا طلبات
```sql WITH CustomersWithOrders AS (
SELECT DISTINCT CustomerID FROM Orders
) SELECT c.CustomerName FROM Customers c WHERE c.CustomerID IN (SELECT CustomerID FROM CustomersWithOrders); ```
هذا الاستعلام يحدد العملاء الذين قاموا بتقديم طلبات باستخدام CTE `CustomersWithOrders` ثم يسترجع أسماءهم من جدول `Customers`.
فوائد استخدام تعبيرات الجدول المشترك
- القراءة والوضوح: CTEs تجعل الاستعلامات المعقدة أسهل في القراءة والفهم من خلال تقسيمها إلى أجزاء منطقية.
- إعادة الاستخدام: يمكن إعادة استخدام CTEs عدة مرات داخل نفس الاستعلام، مما يقلل من التكرار.
- الصيانة: إذا تغيرت منطق الاستعلام الفرعي، يمكنك تعديل CTE واحد فقط بدلاً من تعديل عدة أماكن في الاستعلام الرئيسي.
- الاستعلامات المتكررة: CTEs تسمح بإجراء الاستعلامات المتكررة (Recursive Queries)، وهو أمر ضروري لمعالجة البيانات الهرمية مثل أشجار البيانات (Data Trees).
- الأداء: في بعض الحالات، يمكن أن تساعد CTEs في تحسين أداء الاستعلامات، خاصةً عند استخدامها مع الفهارس (Indexes).
أنواع تعبيرات الجدول المشترك
- CTEs غير المتكررة: هذه هي CTEs التي لا تشير إلى نفسها. الأمثلة المذكورة أعلاه هي CTEs غير متكررة.
- CTEs المتكررة: تستخدم لمعالجة البيانات الهرمية أو البيانات التي لها علاقة ذاتية. تتطلب CTEs المتكررة شرط إنهاء لمنع الاستعلام من التشغيل إلى الأبد. مثال: إيجاد جميع الأجداد في شجرة العائلة.
اعتبارات الأداء
على الرغم من أن CTEs يمكن أن تحسن الأداء في بعض الحالات، إلا أنها ليست دائمًا الحل الأمثل. في بعض الحالات، قد يؤدي استخدام CTEs إلى أداء أسوأ بسبب الطريقة التي يعالج بها محرك قاعدة البيانات (Database Engine) الاستعلام. من المهم اختبار أداء الاستعلامات التي تستخدم CTEs ومقارنتها بالاستعلامات المكافئة التي تستخدم الاستعلامات الفرعية أو طرق أخرى.
أدوات التحليل والاستراتيجيات ذات الصلة
- تحليل البيانات (Data Analysis)
- تنقيب البيانات (Data Mining)
- تحسين الاستعلام (Query Optimization)
- فهم خطط التنفيذ (Understanding Execution Plans)
- تحليل التكلفة (Cost Analysis)
- تقسيم البيانات (Data Partitioning)
- Indexing Strategies (استراتيجيات الفهرسة)
- Normalization (التطبيع)
- Denormalization (إلغاء التطبيع)
- Data Warehousing (مستودعات البيانات)
- ETL Processes (عمليات ETL)
- Data Modeling (نمذجة البيانات)
- Business Intelligence (ذكاء الأعمال)
- OLAP Cubes (مكعبات OLAP)
- Data Visualization (تصور البيانات)
- Moving Averages (المتوسطات المتحركة)
- Bollinger Bands (نطاقات بولينجر)
- Fibonacci Retracements (نسب فيبوناتشي)
- MACD (مؤشر الماكد)
- RSI (مؤشر القوة النسبية)
- Volume Weighted Average Price (متوسط السعر المرجح بالحجم)
- Candlestick Patterns (أنماط الشموع اليابانية)
- Support and Resistance Levels (مستويات الدعم والمقاومة)
- Trend Following (متابعة الاتجاه)
- Breakout Trading (تداول الاختراق)
- Scalping (السلخ)
الخلاصة
تعتبر تعبيرات الجدول المشترك أداة قيمة في لغة SQL. فهي تحسن من قابلية قراءة الاستعلامات، وتسهل صيانتها، ويمكن أن تحسن الأداء في بعض الحالات. من خلال فهم بناء الجملة وأنواع CTEs، يمكن للمطورين ومحللي البيانات الاستفادة الكاملة من هذه الميزة القوية. لا تتردد في تجربة CTEs في استعلاماتك الخاصة واستكشاف إمكاناتها.
ابدأ التداول الآن
سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)
انضم إلى مجتمعنا
اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين