SQL

تعلم لغة الاستعلام البنائية ( SQL ) – الدرس السابع ربط الجداول Joining tables

تعد ميزة ربط الجداول إحدى أهم ميزات قاعدة البيانات. يسمح للمستخدم بإنشاء مجموعة جديدة من البيانات التي تم جمعها من ربط جدولين جنبًا إلى جنب ، ربط أعمدة الجدول الأول مع أعمدة الجدول الثاني.

نحتاج إلى ضم الجداول عندما تريد الاستعلام عن جدول واحد ، ثم إضافة معلومات إلى نتيجة عبارة 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
الدرس الثامن





Leave a Reply