AzLearn

CTEs باستخدام WITH

CTEs with WITH

مفهوم ~19 دقيقة

CTEs باستخدام WITH

CTE اختصار لـ Common Table Expression. تكتبها بـWITH name AS (...)، ثم تستخدم name كأنها جدول مؤقت داخل الاستعلام. الهدف الأساسي هو القراءة: تقسيم استعلام معقد إلى خطوات مسماة.

لا تستخدم CTE فقط لأنها تبدو متقدمة. استخدمها عندما تجعل السؤال أوضح: أولاً احسب الطلبات المدفوعة، ثم اجمعها، ثم اعرض الأعلى.

مثال عملي

query.sql

اسم paid_orders يشرح الخطوة الأولى. هذا أفضل من دفن الشرط في استعلام طويل.

CTEs المتكررة — Recursive CTEs

الـ CTE المتكررة تسمح لاستعلام بالإشارة إلى نفسه. هذا مفيد لهياكل الأشجار كالتصنيفات الهرمية أو الهياكل التنظيمية. الصيغة WITH RECURSIVE تضم جزأين:

  • Anchor (نقطة البداية): استعلام عادي يُرجع الصف الأول.
  • Recursive step (الخطوة المتكررة): يضم UNION ALL ويربط الجدول بالـ CTE نفسه.
query.sql

لماذا UNION ALL لا UNION؟ UNION يزيل التكرار؛ في الأشجار كل عقدة تظهر مرة واحدة بعمق مختلف، فـALL أصح وأسرع. استخدم UNION (بدون ALL) فقط إذا كنت تعالج رسماً بيانياً (graph) وتريد ضمان عدم تكرار نفس العقدة من مسارات مختلفة.

تحدي — Challenge