تعد ميزة ربط الجداول إحدى أهم ميزات قاعدة البيانات. يسمح للمستخدم بإنشاء مجموعة جديدة من البيانات التي تم جمعها من ربط جدولين جنبًا إلى جنب ، ربط أعمدة الجدول الأول مع أعمدة الجدول الثاني.
نحتاج إلى ضم الجداول عندما تريد الاستعلام عن جدول واحد ، ثم إضافة معلومات إلى نتيجة عبارة SELECT لكل صف من جدول آخر.
يؤدي ربط جدولين بشكل فعال إلى إنشاء “الضرب الديكارتي” من استعلام مع جدولين ، مما ينتج عنه صفوف M * N في الإخراج الناتج (بافتراض أن الجدول الأول يحتوي على صفوف M والجدول الثاني يحتوي على صفوف N).
ومع ذلك ، عند الانضمام إلى جدولين ، يتم استخدام شرط الصلة الذي يحد من عدد الصفوف التي يتم إرجاعها إلى حالة علاقة بين الجدولين.
دعنا نرى مثالاً. لنفترض أن لدينا قاعدة بيانات تحتوي على العملاء والطلبات التي قام بها العملاء، يشير جدول الطلبات إلى الرقم التعريفي للعميل من جدول العميل لتتبع الطلب الذي تم إجراؤه بواسطة كل عميل. نود أن نرى جميع الطلبات التي قام بها عملاؤنا ، جنبًا إلى جنب مع أسماء العملاء.
CREATE TABLE customers ( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT ); CREATE TABLE orders ( id INTEGER PRIMARY KEY, customer_id INTEGER, product_name TEXT ); INSERT INTO customers (first_name, last_name) VALUES ("Ahmad", "Hicham"); INSERT INTO orders (customer_id, product_name) VALUES (last_insert_rowid(), "Coke"), (last_insert_rowid(), "Sprite"); .mode column .headers on SELECT product_name, first_name, last_name FROM orders JOIN customers ON orders.customer_id = customers.id;
سنحصل على النتيجة التالية عند التشغيل
product_name first_name last_name ------------ ---------- ---------- Coke Ahmad Hicham Sprite Ahmad Hicham
تمرين
اكتب استعلام SELECT الذي يحدد اسم المنتج والاسم الأول للعميل الذي اشترى المنتج ، فقط إذا كان اسم العميل هو Ahmad
CREATE TABLE customers ( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT ); CREATE TABLE orders ( id INTEGER PRIMARY KEY, customer_id INTEGER, product_name TEXT ); INSERT INTO customers (first_name, last_name) VALUES ("Ahmad", "Hicham"); INSERT INTO orders (customer_id, product_name) VALUES (last_insert_rowid(), "Coke"), (last_insert_rowid(), "Sprite"); INSERT INTO customers (first_name, last_name) VALUES ("Walid", "Yacine"); INSERT INTO orders (customer_id, product_name) VALUES (last_insert_rowid(), "Doritos"), (last_insert_rowid(), "Water"); - اكتب الرمز الخاص بك هنا
الحل
CREATE TABLE customers ( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT ); CREATE TABLE orders ( id INTEGER PRIMARY KEY, customer_id INTEGER, product_name TEXT ); INSERT INTO customers (first_name, last_name) VALUES ("Ahmad", "Hicham"); INSERT INTO orders (customer_id, product_name) VALUES (last_insert_rowid(), "Coke"), (last_insert_rowid(), "Sprite"); INSERT INTO customers (first_name, last_name) VALUES ("Walid", "Yacine"); INSERT INTO orders (customer_id, product_name) VALUES (last_insert_rowid(), "Doritos"), (last_insert_rowid(), "Water"); - اكتب الرمز الخاص بك هنا SELECT product_name, first_name FROM orders JOIN customers ON orders.customer_id = customers.id WHERE first_name = 'Ahmad';
سنحصل على النتيجة التالية عند التشغيل
Coke|Ahmad Sprite|Ahmadالدرس الثامن