انتقل إلى محتوى الدرس

Reusing CTEs Within One Query إعادة استخدام التعبير الجدولي

تعلّم التعبيرات الجدولية الشائعة WITH والاستعلامات العودية في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
8 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

من أبرز المزايا الهندسية للتعبير الجدولي CTE مقارنةً بالجدول المشتق التقليدي داخل FROM هي إمكانية إعادة استخدامه عدة مرات داخل الاستعلام الواحد:

  • تعريف واحد واستدعاءات متعددة: بينما يضطرك الجدول المشتق لنسخ الكود وتكراره إذا احتجته مرتين، يمكنك تعريف CTE مرة واحدة في الأعلى ثم الإشارة إليه مرتين أو أكثر بالاسم في الاستعلام الرئيسي.
  • التخزين المؤقت لمرة واحدة: عندما يُستدعى التعبير الجدولي عدة مرات في نفس الاستعلام، يحسب MySQL 8 نتيجته مرة واحدة فقط في جدول داخلي مؤقت ويعيد قراءتها بكفاءة.
SQL
-- Define department payroll once and compare each dept to the overall avg
WITH dept_payroll AS (
  SELECT department_id, SUM(salary) AS total_payroll
  FROM employees
  GROUP BY department_id
)
SELECT d1.department_id, d1.total_payroll
FROM dept_payroll AS d1
WHERE d1.total_payroll > (
  SELECT AVG(d2.total_payroll) FROM dept_payroll AS d2
);