SQL مع جملة

Sql M Jmlt



عندما تتعمق في استعلامات SQL وقاعدة البيانات، فإن إحدى أقوى الميزات المذهلة التي ستواجهها هي تعبيرات الجدول الشائعة والتي تُعرف عمومًا باسم CTEs.

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

انضم إلينا في هذا البرنامج التعليمي بينما نستكشف طرق عمل تعبيرات الجدول الشائعة باستخدام عبارة 'With' والوظائف المدعومة.







متطلبات:

لأغراض العرض التوضيحي، سوف نستخدم ما يلي:



  1. MySQL الإصدار 8.0 وما فوق
  2. قاعدة بيانات نموذج ساكيلا

مع استيفاء المتطلبات المحددة، يمكننا المضي قدمًا لمعرفة المزيد حول CTEs وبند YOU.



SQL مع جملة

تتيح لنا جملة 'WTH' تحديد مجموعة نتائج مؤقتة واحدة أو أكثر تُعرف باسم 'تعبيرات الجدول الشائعة'.





يمكننا الإشارة إلى CTEs الناتجة في الاستعلام الرئيسي مثل أي جدول أو مجموعة نتائج أخرى. يلعب هذا دورًا حاسمًا في إنشاء استعلامات SQL معيارية.

على الرغم من أن بناء جملة CTE قد يختلف قليلاً وفقًا لمتطلباتك، إلا أن ما يلي يوضح بناء الجملة الأساسي لـ CTE في SQL:



مع cte_name (column1، column2، ...) AS (
- استعلام CTE
يختار ...
من ...
أين ...
)
- الاستعلام الرئيسي
يختار ...
من ...
انضم إلى cte_name ON ...
أين ...

نبدأ بالكلمة الأساسية 'With' التي تخبر قاعدة بيانات SQL التي نرغب في إنشاءها واستخدامها CTE.

بعد ذلك، نحدد اسم CTE الذي يسمح لنا بالرجوع إليه في استعلامات أخرى.

نحدد أيضًا قائمة اختيارية بأسماء الأعمدة إذا كانت CTE تتضمن الأسماء المستعارة للأعمدة.

بعد ذلك، ننتقل إلى تحديد استعلام CTE. يحتوي هذا على جميع المهام أو البيانات التي ينفذها CTE داخل قوسين.

وأخيرًا، نحدد الاستعلام الرئيسي الذي يشير إلى CTE.

مثال للاستخدام:

إحدى أفضل الطرق لفهم كيفية استخدام CTEs والعمل معها هي النظر إلى مثال عملي.

خذ على سبيل المثال نموذج قاعدة بيانات Sakila. لنفترض أننا نرغب في العثور على أفضل 10 عملاء لديهم أكبر عدد من الإيجارات.

ألق نظرة على CTE الموضح التالي.

استخدام SQL With Clause للعثور على أفضل 10 عملاء لديهم أعلى معدلات إيجار:

مع CustomerRentals AS (
حدد c.customer_id، c.first_name، c.last_name، COUNT(r.rental_id) AS rent_count
من العميل ج
انضم إلى تأجير r ON c.customer_id = r.customer_id
GROUP BY c.customer_id، c.first_name، c.last_name
)
يختار *
من العملاء الإيجارات
اطلب حسب rent_count DESC
الحد 10؛

في المثال الموضح، نبدأ بتعريف CTE جديد باستخدام الكلمة الأساسية OFF متبوعة بالاسم الذي نرغب في تعيينه لـ CTE. في هذه الحالة، نسميها 'تأجير العملاء'.

داخل هيكل CTE، نقوم بحساب عدد الإيجارات لكل عميل من خلال الانضمام إلى جدول العملاء والإيجارات.

أخيرًا، في الاستعلام الرئيسي، نختار جميع الأعمدة من CTE، ونرتب النتائج بناءً على عدد الإيجارات (ترتيب تنازلي)، ونقصر الإخراج على الصفوف العشرة الأولى فقط.

يتيح لنا ذلك جلب العملاء الذين لديهم أكبر عدد من الإيجارات كما هو موضح في المخرج التالي:

  تم إنشاء جدول بالأسماء الوصف تلقائيًا

CTEs العودية

في بعض الحالات الأخرى، قد تتعامل مع هياكل البيانات الهرمية. هذا هو المكان الذي تلعب فيه CTEs العودية.

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

نظرًا لعدم وجود بيانات هرمية يمكننا استخدامها في قاعدة بيانات Sakila لإثبات الاعتلال الدماغي المزمن المتكرر، فلنقم بإعداد مثال أساسي.

قسم إنشاء الجدول (
Department_id INT PRIMARY KEY AUTO_INCREMENT،
اسم القسم VARCHAR(255) ليس فارغًا،
parent_department_id INT،
المفتاح الخارجي (parent_department_id) المراجع القسم (department_id)
);
أدخل في القسم (department_name،parent_department_id)
قيم
('الشركة'، فارغة)،
('المالية'، 1)،
('الموارد البشرية'، 1)،
('المحاسبة'، 2)،
'التجنيد'، 3)،
('كشوف المرتبات'، 4)؛

في هذه الحالة، لدينا نموذج لجدول 'القسم' يحتوي على بعض البيانات العشوائية. للعثور على الهيكل الهرمي للأقسام، يمكننا استخدام CTE العودية على النحو التالي:

مع التسلسل الهرمي للقسم العودي AS (
حدد معرف_القسم، اسم_القسم، معرف_القسم_الأب
من القسم
حيث يكونparent_department_id فارغًا
الاتحاد الكل
حدد d.department_id، d.department_name، d.parent_department_id
من قسم د
انضم إلى التسلسل الهرمي للإدارة dh ON d.parent_department_id = dh.department_id
)
يختار *
من التسلسل الهرمي للإدارة؛

في هذه الحالة، يبدأ CTE العودي بالأقسام التي تحتوي على 'parent_department_id' NULL (الأقسام الجذرية) ويسترد الأقسام الفرعية بشكل متكرر.

خاتمة

في هذا البرنامج التعليمي، تعرفنا على الميزات الأساسية والمفيدة في قواعد بيانات SQL مثل تعبيرات الجدول الشائعة من خلال فهم كيفية التعامل مع الكلمة الأساسية 'With'.