شرح صفوف ومحتوى الفقرة
من أبرز المزايا الهندسية للتعبير الجدولي 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
);