الدرس 4 من 10

ربط ثلاثة جداول

هدف الدرس

JOIN بعد JOIN

01

الشرح

الطلب الواحد فيه عدّة منتجات، والمنتج الواحد يُباع في عدّة طلبات. علاقة كهذه — متعدّد إلى متعدّد — تُحفظ في جدول وسيط: كل صفّ في order_items بند واحد يحمل order_id وproduct_id والكمية qty.

وللوصول من الطلب إلى أسماء منتجاته تمرّ بالوسيط: كل JOIN يضيف جدولًا واحدًا بشرط ON خاصّ به، والسلسلة تُقرأ من أعلى إلى أسفل.

ومع ثلاثة جداول يتكرّر id فيها كلها، فكتابته بلا اسم جدوله توقف الاستعلام بخطأ ambiguous column name. اكتب اسم الجدول قبل كل عمود، وسمِّ الأعمدة المتشابهة بـAS: products.name AS product.

02

المطلوب

اعرض لكل بند: placed_on من الطلب، واسم المنتج باسم product، وqty — مرتّبة بالتاريخ.

معايير التصحيح

5 معايير
  1. الأعمدة placed_on و product و qty
  2. صفّ لكل بند
  3. product اسم لا رقم
  4. كل بند بتاريخه ومنتجه وكميته
  5. مرتّبة بالتاريخ
الجداول المتاحة في هذا الدرس
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);
query.sql
المخرجاتSQLite · sql.js

جارٍ تحميل SQLite…

–/5

يبدأ الفحص حين تجهز البيئة.

5 معايير في بطاقة «المطلوب».