الدرس 2 من 10
الربط اليساري
- 12 دقيقة
- 4 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
LEFT JOIN و IS NULL
01
الشرح
LEFT JOIN يُبقي كل صفّ من الجدول الأيسر — المذكور بعد FROM — كان له مطابق في الأيمن أم لم يكن. وحيث لا مطابق، تأتي أعمدة الجدول الأيمن كلها NULL.
وهذا يجيب سؤالًا يعجز عنه INNER JOIN: من لم يطلب شيئًا؟ اربط العملاء بالطلبات، ثم أبقِ الصفوف التي جاء طرفها الأيمن فارغًا: WHERE orders.id IS NULL.
ولا تكتب = NULL: فـNULL غياب قيمة لا قيمة، ومقارنته بأيّ شيء لا تكون صحيحة أبدًا، فيرجع الاستعلام فارغًا بلا خطأ ينبّهك.
02
المطلوب
اعرض 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);