دروس الوحدة (1/4)
الصلات على ثلاثة جداول أو أكثر
في الوحدة 3 قمت بربط جدولين. في بيانات العالم الحقيقي تقريبا
منتشرة دائمًا عبر ثلاثة أو أكثر من الجداول المرتبطة بمفاتيح خارجية: to
أجب عن سؤال عمل عليك اجتياز سلسلة العلاقات.
هذا هو بالضبط ما يفعله الجدول المتعدد JOIN.
من هذه الوحدة فصاعدًا، سنستخدم مجموعة البيانات ecommerce (العملاء،
الفئات، المنتجات، الطلبات، عناصر الطلب، المراجعات). يمكنك استكشافها من
الملعب عن طريق تحديد ecommerce من مجموعة البيانات
منتقي.
بناء الجملة: سلسلة من الصلات
SELECT colonne
FROM tabella_a
JOIN tabella_b ON tabella_a.x = tabella_b.y
JOIN tabella_c ON tabella_b.z = tabella_c.w
[JOIN tabella_d ON …]
…;يضيف كل JOIN "رابطًا" إلى السلسلة: يأخذ المحرك الوسيط
نتيجة عمليات JOIN السابقة وإرفاق الجدول التالي بها.
-- Per ogni riga d'ordine: cliente, prodotto e quantità.
SELECT c.email,
p.name AS prodotto,
oi.quantity
FROM orders AS o
JOIN customers AS c ON o.customer_id = c.id
JOIN order_items AS oi ON oi.order_id = o.id
JOIN products AS p ON oi.product_id = p.id;ثلاثة JOINs، أربعة جداول. تحتوي النتيجة على صف واحد لكل order_items — لكل منهما
المنتج في كل طلب - غني بالبريد الإلكتروني للعميل واسم المنتج.
الترتيب المنطقي
يقوم المحرك بربط الجداول من اليسار إلى اليمين. يمكن لشرط JOIN أن
قم بالرجوع إلى أي جدول تم تقديمه بالفعل أعلاه. لسهولة القراءة:
- ضع "الجدول الرئيسي" للسؤال أولاً (هنا
orders)؛ - قم بإضافة الآخرين بالترتيب الذي قمت بزيارتهم به من خلال اتباع العلاقات.
المجاميع عبر سلاسل JOIN
يتم دمج JOINs المتعددة مع GROUP BY لإنتاج التقارير:
-- Spesa totale per cliente (solo ordini consegnati):
SELECT c.email,
SUM(oi.quantity * oi.unit_price) AS total
FROM customers AS c
JOIN orders AS o ON o.customer_id = c.id
JOIN order_items AS oi ON oi.order_id = o.id
WHERE o.status = 'delivered'
GROUP BY c.email
ORDER BY total DESC;لا تحتاج إلى JOIN products هنا: كل ما تحتاجه (quantity،
unit_price) موجود بالفعل في order_items. القاعدة الأساسية: ** لا تضف الجداول
لا تستخدمها** — فهي تضر بالأداء وسهولة القراءة.
جربه بنفسك
لكل طلب من الطلبات المرسلة (الحالة = "تم التسليم")، عرض البريد الإلكتروني للعميل، اسم المنتج والكمية. ثلاثة كولون. Ordina per id ordine crescente e id prodotto crescente.
إظهار التلميح
ثلاث وصلات: الطلبات ← العملاء على معرف_الزبون، الطلبات ← عناصر_الطلب على معرّف_الطلب، عناصر_الطلب ← المنتجات على معرف_المنتج.
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
أعلى 3 عملاء لكل طلب إجماليًا (حجم الكمية * سعر_الوحدة) خاص بهم فقط. العمود المستحق: إجمالي البريد الإلكتروني. الترتيب لكل انخفاض إجمالي، الحد هو 3.
إظهار التلميح
لا نخدم منتجات JOIN: الكمية وسعر الوحدة موجودان في الطلب_العناصر.
الحل متاح بعد 3 من المحاولات