Common Table Expressions

From binaryoption
Jump to navigation Jump to search
Баннер1

تعبيرات الجدول المشترك: دليل شامل للمبتدئين

تُعد تعبيرات الجدول المشترك (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` (عملاء).

هيكل جدول Orders
Column Name Data Type
OrderID INT
CustomerID INT
OrderDate DATE
TotalAmount DECIMAL
هيكل جدول Customers
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 ومقارنتها بالاستعلامات المكافئة التي تستخدم الاستعلامات الفرعية أو طرق أخرى.

أدوات التحليل والاستراتيجيات ذات الصلة

الخلاصة

تعتبر تعبيرات الجدول المشترك أداة قيمة في لغة SQL. فهي تحسن من قابلية قراءة الاستعلامات، وتسهل صيانتها، ويمكن أن تحسن الأداء في بعض الحالات. من خلال فهم بناء الجملة وأنواع CTEs، يمكن للمطورين ومحللي البيانات الاستفادة الكاملة من هذه الميزة القوية. لا تتردد في تجربة CTEs في استعلاماتك الخاصة واستكشاف إمكاناتها.

ابدأ التداول الآن

سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)

انضم إلى مجتمعنا

اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين

Баннер