الانتقال إلى المحتوى الرئيسي
الوحدة 3 · الدرس 1 من 49/57 في الدورة~12 min
دروس الوحدة (1/4)

الانضمام إلى جدولين: INNER JOIN

حتى الآن قرأنا جدولًا واحدًا في كل مرة. ولكن في العالم الحقيقي، البيانات هي كذلك منتشرة عبر جداول متعددة ذات صلة: في مجموعة البيانات لدينا، على سبيل المثال، كل منها الموظف لديه department_id يشير إلى الجدول departments. لنرى اسم القسم (وليس فقط id) الذي نحتاجه للانضمام إلى جدولين. يُسمى عامل التشغيل الذي يقوم بذلك JOIN.

بناء الجملة الأساسي

SQL
SELECT columns
FROM   table_a
JOIN   table_b ON table_a.x = table_b.y;

اقرأ باللغة الإنجليزية: "خذ table_a، وأرفق table_b به عن طريق إقران كل الصف حيث table_a.x يساوي table_b.y". والنتيجة هي ** افتراضية جديدة الجدول ** مع أعمدة كليهما.

SQL
-- For each employee, also show the name of their department:
SELECT employees.first_name,
       employees.last_name,
       departments.name AS dipartimento
FROM   employees
JOIN   departments ON employees.department_id = departments.id;

الجزء بعد ON يسمى شرط الانضمام: وهو ما يخبرنا المحرك "هذان الصفان لهما نفس الشيء تقريبًا، قم بمحاذاةهما". في الغالبية العظمى من الحالات هي المساواة بين المفتاح الأساسي والأجنبي المفتاح (هنا departments.id وemployees.department_id).

الانضمام الداخلي، بالتفصيل

الكلمة الرئيسية الكاملة هي INNER JOIN، ولكن JOIN بحد ذاتها هي المعيار مرادف. تعني كلمة "Inner" أن الصفوف التي تحتوي على تطابق في كلاهما هي فقط يتم إرجاع الجداول:

  • إذا كان لدى الموظف department_id = NULL، فلن يظهر في نتيجة؛
  • إذا كان القسم ليس به موظفين لن يظهر في النتيجة.

أسماء الأعمدة المؤهلة

عندما يحتوي جدولان على أعمدة بنفس الاسم (يحتوي كلاهما هنا على id، و كلاهما لديه name إذا فكرت في الأمر)، فأنت بحاجة إلى تحديد الجدول يأتي العمود من خلال كتابة table.column. لتجنب تكرار الأسماء الطويلة، غالبًا ما يتم استخدام الأسماء المستعارة (لقد رأيتها في الوحدة 2):

SQL
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM   employees   AS e
JOIN   departments AS d ON e.department_id = d.id;

AS اختياري هنا أيضًا: FROM employees e يعمل بنفس الطريقة.

جربه

تمرين#sql.m3.l1.e1
المحاولات: 0جارٍ التحميل…

لكل موظف في قسم الهندسة إظهار الاسم الأول (الاسم الأول) والاسم الأخير (اسم العائلة) ومدينة القسم (departments.city). ثلاثة أعمدة، صف واحد لكل موظف.

جارٍ تحميل المحرر…
إظهار التلميح

أكمل شرط ON بالمساواة بين e.department_id وd.id، ثم حدد d.city كعمود ثالث.

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#sql.m3.l1.e2
المحاولات: 0جارٍ التحميل…

قم بإدراج الاسم الأول (الاسم الأول) والاسم الأخير (اسم العائلة) لجميع الموظفين الذين يعملون في قسم يقع في ميلانو. قم بالتصفية على الإدارات. المدينة، وليس على اسم القسم.

جارٍ تحميل المحرر…
إظهار التلميح

نفس JOIN كما في التمرين السابق، ولكن قم بالتصفية على d.city = 'Milano' بدلاً من اسم القسم.

الحل متاح بعد 3 من المحاولات