البرمجة

التعابير الجدولية الشائعة في SQL

التعابير الجدولية الشائعة (Common Table Expressions) في SQL

تعدّ التعابير الجدولية الشائعة أو ما يُعرف بالـ CTEs (Common Table Expressions) من الأدوات القوية في لغة الاستعلامات الهيكلية SQL، والتي تستخدم لتنظيم الاستعلامات بشكل أفضل، وتحسين وضوح الكود، وتوفير مرونة أكبر عند التعامل مع البيانات. تساعد هذه الميزة في بناء استعلامات معقدة بطريقة قابلة لإعادة الاستخدام بسهولة، مما يجعل صيانة الكود أسهل ويقلل من التكرار.

تعتبر التعابير الجدولية الشائعة بمثابة استعلامات مؤقتة يتم تعريفها في بداية الاستعلام الأكبر، ويمكن أن تحتوي على جداول أو مجموعات من البيانات يمكن الإشارة إليها لاحقًا في الاستعلام الأصلي. في هذا المقال، سيتم تناول مفهوم التعابير الجدولية الشائعة في SQL، وكيفية استخدامها، وفوائدها، وبعض الأمثلة التطبيقية التي توضح استخدامها في الحياة العملية.

1. تعريف CTEs

التعبير الجدولي الشائع هو استعلام مؤقت يمكن استخدامه داخل استعلام آخر، ويُعرف من خلال الكلمة المفتاحية WITH، تليها اسم التعبير الجدولي ثم الاستعلام الذي يعيد مجموعة من البيانات. يسمح هذا النوع من التعابير بتقسيم الاستعلامات المعقدة إلى أجزاء أصغر وأكثر قابلية للفهم.

تعدّ CTEs وسيلة مثالية لإنشاء استعلامات مرنة تُستخدم لأغراض متعددة مثل التصفية، التجميع، والانضمام بين الجداول في استعلام واحد.

2. بناء CTEs

يتم بناء التعبير الجدولي الشائع باستخدام الكلمة المفتاحية WITH، يليها اسم التعبير الجدولي، ثم الاستعلام الذي سيُنفّذ داخل التعبير. الصيغة العامة للتعبير الجدولي الشائع هي كالتالي:

sql
WITH cte_name AS ( SELECT column1, column2, ... FROM table_name WHERE condition ) SELECT * FROM cte_name;

في هذا المثال:

  • cte_name: هو اسم التعبير الجدولي الشائع الذي يتم تعريفه.

  • داخل الأقواس (): يتم كتابة استعلام SQL العادي الذي يُرجع البيانات.

  • يمكن استخدام الاسم الذي اخترته للتعبير الجدولي cte_name داخل الاستعلام الأساسي.

3. استخدامات CTEs

يمكن استخدام CTEs في العديد من الحالات داخل SQL لتحقيق أهداف متنوعة. فيما يلي بعض الاستخدامات الشائعة لهذه الميزة:

3.1. تسهيل الاستعلامات المعقدة

أحد الاستخدامات الأساسية لـ CTEs هو تبسيط الاستعلامات المعقدة. في كثير من الأحيان، يتم استخدام CTEs لتقسيم الاستعلامات الكبيرة والمعقدة إلى أجزاء أصغر يمكن فهمها بسهولة. بدلاً من تكرار أجزاء الاستعلام نفسه، يمكنك استخدام CTE لتخزين النتائج المؤقتة واستخدامها في أماكن متعددة ضمن الاستعلام الرئيسي.

3.2. الاستعلامات المتدرجة

تُستخدم CTEs أيضًا لتنفيذ الاستعلامات المتدرجة أو الاستعلامات الهرمية مثل استعلامات شجرة البيانات أو العلاقات الأبناء والآباء. على سبيل المثال، إذا كانت لديك بيانات تتعلق بالعلاقات الهرمية (مثل موظفين ومديريهم)، يمكنك استخدام CTE لبناء التسلسل الهرمي بشكل أكثر وضوحًا.

sql
WITH EmployeeHierarchy 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 EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID ) SELECT * FROM EmployeeHierarchy;

في هذا المثال، يتم استخدام CTE لبناء التسلسل الهرمي للموظفين والمديرين.

3.3. تحسين الأداء

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

3.4. التكرار في الاستعلامات

في بعض الأحيان، يُمكن أن يحتوي الاستعلام على جزء مكرر يظهر في عدة أماكن. باستخدام CTE، يمكنك كتابة هذا الجزء مرة واحدة واستخدامه في أماكن متعددة داخل الاستعلام نفسه، مما يُسهم في تقليل التكرار ويحسن من وضوح الكود.

4. أنواع CTEs

4.1. CTEs القابلة للتحديث (Updatable CTEs)

في بعض الأحيان، قد تحتاج إلى تحديث البيانات داخل CTE. عند استخدام CTE في استعلام UPDATE أو DELETE، يمكنك تعديل البيانات المؤقتة داخل الـ CTE. على سبيل المثال، إذا كنت تستخدم CTE لاسترجاع مجموعة معينة من البيانات التي تحتاج إلى تحديثها، يمكنك القيام بذلك بطريقة مبسطة دون الحاجة لكتابة استعلامات معقدة.

sql
WITH EmployeeCTE AS ( SELECT EmployeeID, Salary FROM Employees WHERE Department = 'Sales' ) UPDATE Employees SET Salary = Salary * 1.05 WHERE EmployeeID IN (SELECT EmployeeID FROM EmployeeCTE);

4.2. CTEs المتكررة (Recursive CTEs)

الـ Recursive CTEs هي نوع خاص من CTEs التي تستخدم لاسترجاع البيانات التي تُبنى تدريجيًا عبر عدة تكرارات. تُستخدم عادةً لاستعلامات هرمية أو تسلسلية. تتضمن هذه الـ CTEs قسمين رئيسيين: الجزء الأساسي أو الأساس، والجزء الذي يتم تكراره أو توسيعه.

الصيغة العامة لـ Recursive CTE هي:

sql
WITH RECURSIVE cte_name AS ( SELECT initial_columns FROM table_name WHERE initial_condition UNION ALL SELECT recursive_columns FROM table_name JOIN cte_name ON condition ) SELECT * FROM cte_name;

مثال على استخدام CTE متكرر لاسترجاع هيكل هرمي:

sql
WITH RECURSIVE EmployeeHierarchy 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 EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID ) SELECT * FROM EmployeeHierarchy;

في هذا المثال، يتم استخدام CTE متكرر لاسترجاع كل الموظفين في المنظمة بدءًا من المدير الأعلى، مرورًا بالمديرين والموظفين التابعين لهم.

5. فوائد CTEs

5.1. تحسين قابلية القراءة

تُسهم CTEs في تحسين قابلية قراءة الاستعلامات. حيث تتيح لك كتابة استعلامات معقدة بطريقة منطقية ومقسمة إلى أجزاء أصغر، مما يجعل من السهل فهمها وتعديلها في المستقبل.

5.2. تقليل التكرار

تسمح لك CTEs بتقليل التكرار في الاستعلامات، بحيث يمكنك كتابة جزء من الاستعلام مرة واحدة ثم إعادة استخدامه في أجزاء مختلفة من الاستعلام نفسه.

5.3. تحسين الصيانة

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

6. قيود CTEs

على الرغم من فوائدها العديدة، إلا أن هناك بعض القيود المرتبطة باستخدام CTEs في SQL:

  1. قيود الأداء: في بعض الأحيان، يمكن أن تؤدي CTEs إلى انخفاض في الأداء مقارنة باستخدام الاستعلامات الفرعية التقليدية، خاصة عندما يتم استخدامها بشكل مفرط أو عند التعامل مع كميات ضخمة من البيانات.

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

  3. القيود على التكرار: في بعض الأحيان، قد لا يمكن استخدام CTEs بشكل متكرر مع بعض الاستعلامات بسبب وجود مشاكل مع التكرار أو تعارضات مع الجداول المؤقتة.

7. خلاصة

تُعتبر التعابير الجدولية الشائعة (CTEs) أداة قوية وفعّالة في SQL، مما يساعد المطورين على كتابة استعلامات أكثر وضوحًا وتنظيمًا. تسمح CTEs بتحسين الكود من خلال تقليل التكرار، تسهيل التعامل مع الاستعلامات المعقدة، وتحقيق مرونة أكبر في العمل مع البيانات. يمكن استخدام CTEs بطريقة بسيطة أو متكررة، حسب احتياجات المستخدم، لتحسين الأداء والكود البرمجي بشكل عام.