الانتقال إلى المحتوى الرئيسي
الوحدة 5 · الدرس 3 من 419/57 في الدورة~10 min
دروس الوحدة (3/4)

الانضمام الخارجي: العثور على "الثغرات"

في الوحدة 3 رأيت LEFT JOIN: احتفظ بـ جميع الصفوف على اليسار، حتى تلك بدون تطابق على اليمين (الذي يصبح NULL). في هذا الفصل نحن قم بتوسيع مجموعة الأدوات باستخدام RIGHT JOIN وFULL OUTER JOIN، وسنتعلم كيفية استخدامها للعثور على "الثقوب" في البيانات: صفوف في جدول واحد ليس لها نظير في الآخر.

الأنواع الثلاثة من OUTER JOIN

SQL
A LEFT  JOIN B  ON …  -- tutte le righe di A, con o senza match in B
A RIGHT JOIN B  ON …  -- tutte le righe di B, con o senza match in A
A FULL  JOIN B  ON …  -- tutte le righe di A *e* di B; NULL dove non c'è match

يمكن دائمًا إعادة كتابة A RIGHT JOIN B بالشكل B LEFT JOIN A بنفس الطريقة ON: إنها مسألة سهولة القراءة. العديد من الأساليب (بما في ذلك هذه الدورة) أفضّل دائمًا استخدام LEFT JOIN لتحقيق الاتساق.

نمط "مكافحة الانضمام": العثور على المفقودين

الاستخدام الأكثر شيوعًا لـ LEFT JOIN ليس "إثراء البيانات الموجودة على right"، ولكن **ابحث عن الصفوف الموجودة على اليسار والتي لا تحتوي على تطابق في صحيح **. يطلق عليه مكافحة الانضمام:

SQL
-- Prodotti senza nessuna recensione:
SELECT p.id, p.name
FROM   products p
LEFT JOIN reviews r ON r.product_id = p.id
WHERE  r.id IS NULL
ORDER BY p.id;

منطق النمط:

  1. LEFT JOIN يرفق مراجعات كل منتج، إن وجدت؛
  2. بالنسبة للمنتجات التي لا تحتوي على مراجعات، جميع الأعمدة r هي NULL؛
  3. WHERE r.id IS NULL يحتفظ فقط بهذه المنتجات.

التحقق من المفتاح: id IS NULL في العمود NOT NULL في الجدول الأيمن تعني "لم يكن هناك تطابق". غالبًا ما تقوم بالتصفية على PK باليد اليمنى الجدول على وجه التحديد لهذا السبب.

الانضمام الخارجي الكامل

FULL OUTER JOIN يبقي الجانبين بدون تطابق. ونادرا ما يستخدم، عادة للتحقق من سلامة البيانات:

SQL
SELECT c.id AS customer_id, o.id AS order_id
FROM   customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id
WHERE  c.id IS NULL OR o.id IS NULL;

الصفوف التي تحتوي على c.id IS NULL ستكون أوامر يتيمة (customer_id التي غير موجود في customers). أولئك الذين لديهم o.id IS NULL هم عملاء بدون أوامر. في مجموعة البيانات الخاصة بنا، تضمن المفاتيح الخارجية عدم وجود يتيم الطلبات موجودة؛ يبقى فقط العملاء الذين ليس لديهم طلبات.

جربه بنفسك

تمرين#sql.m5.l3.e1
المحاولات: 0جارٍ التحميل…

تجد جميع المنتجات والمنتجات التي لا تحتاج إلى مراجعة. اسم موسترا سولو لا كولونا. أوردينا لكل اسم.

جارٍ تحميل المحرر…
إظهار التلميح

نمط مكافحة الانضمام: LEFT JOIN يراجع su Product_id، poi حيث r.id IS NULL.

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#sql.m5.l3.e2
المحاولات: 0جارٍ التحميل…

لن تجد أي عملاء قد فقدوا أي ترتيب. البريد الإلكتروني موسترا. الترتيب لكل بريد إلكتروني.

جارٍ تحميل المحرر…
إظهار التلميح

نمط متقن للتشغيل السابق، سواء من العملاء أو الطلبات.

الحل متاح بعد 3 من المحاولات