الدرس 1 من 10

الربط بين جدولين

هدف الدرس

الربط الداخلي INNER JOIN

01

الشرح

قاعدة البيانات المصمّمة جيّدًا لا تكرّر اسم العميل في كل طلب، بل تحفظه مرّة واحدة في جدول customers، ويحمل الطلب رقم العميل فقط في العمود customer_id.

ثم يجمع JOIN بين الجدولين وقت الاستعلام هكذا: FROM orders JOIN customers ON customers.id = orders.customer_id.

والنوع الافتراضي هو INNER JOIN، وهو لا يُبقي إلا الصفوف التي لها مطابق في الجدولين، فالعميل الذي ليس له طلبات لا يظهر في النتيجة، وسنحلّ هذه المشكلة في الدرس التالي.

02

المطلوب

اعرض name وtotal لكل طلب، ورتّب النتيجة من الأكبر مبلغًا إلى الأصغر.

الفحوص

5 فحوص
  1. خمسة صفوف، في كل صفّ طلب واحد
  2. العمودان name وtotal
  3. مرتّبة تنازليًّا بمبلغ الطلب
  4. أكبر طلب لخالد بمبلغ 300
  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');
03

تلميحات

0/3
query.sql
المخرجاتSQLite (sql.js)

نحمّل بيئة SQLite الآن.

–/5

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

تجد 5 فحوص في بطاقة «المطلوب».