الدرس 2 من 10
الربط اليساري
- 12 دقيقة
- 4 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
الربط بـ LEFT JOIN والفحص بـ IS NULL
الشرح
يُبقي LEFT JOIN كل صفوف الجدول الأيسر، وهو الجدول المذكور بعد FROM، سواء كان لها مطابق في الجدول الأيمن أم لم يكن، وإذا لم يوجد مطابق جاءت أعمدة الجدول الأيمن كلها NULL.
وبهذا تجيب عن سؤال لا يستطيع INNER JOIN أن يجيب عنه، وهو: من الذي لم يطلب شيئًا؟ فتربط العملاء بالطلبات، ثم تُبقي الصفوف التي جاء جانبها الأيمن فارغًا: WHERE orders.id IS NULL.
ولا تكتب = NULL، لأنّ NULL تعني غياب القيمة وليست قيمة، ومقارنتها بأيّ شيء لا تكون صحيحة أبدًا، فيرجع الاستعلام فارغًا دون أيّ رسالة خطأ تنبّهك.
المطلوب
اعرض name وcity للعملاء الذين لم يطلبوا شيئًا بعد.
الفحوص
4 فحوص- العمودان name وcity
- ظهر كل عميل ليس له طلبات
- لم يظهر أيّ عميل له طلب
- يظهر كل عميل مرّة واحدة
الجداول المتاحة في هذا الدرس
CREATE TABLE customers ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, city TEXT NOT NULL ); CREATE TABLE orders ( id INTEGER PRIMARY KEY, customer_id INTEGER REFERENCES customers(id), total INTEGER NOT NULL, placed_on TEXT NOT NULL ); INSERT INTO customers (id, name, city) VALUES (1, 'ليان', 'الرياض'), (2, 'خالد', 'جدة'), (3, 'ريم', 'الدمام'), (4, 'فهد', 'الرياض'); INSERT INTO orders (customer_id, total, placed_on) VALUES (1, 120, '2026-09-01'), (1, 80, '2026-09-12'), (2, 300, '2026-09-03'), (3, 45, '2026-09-20'), (2, 60, '2026-09-25'); INSERT INTO customers (id, name, city) VALUES (5, 'سارة', 'جدة'); CREATE TABLE products ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, price INTEGER NOT NULL ); CREATE TABLE order_items ( id INTEGER PRIMARY KEY, order_id INTEGER REFERENCES orders(id), product_id INTEGER REFERENCES products(id), qty INTEGER NOT NULL ); INSERT INTO products (id, name, price) VALUES (1, 'دفتر', 15), (2, 'قلم', 5), (3, 'حقيبة', 90), (4, 'آلة حاسبة', 60), (5, 'مصباح', 100); INSERT INTO order_items (order_id, product_id, qty) VALUES (1, 3, 1), (1, 1, 2), (2, 4, 1), (2, 2, 4), (3, 3, 2), (3, 4, 2), (4, 1, 3), (5, 1, 2), (5, 2, 6);