دروس الوحدة (1/4)
الانضمام إلى جدولين: INNER JOIN
حتى الآن قرأنا جدولًا واحدًا في كل مرة. ولكن في العالم الحقيقي، البيانات هي كذلك
منتشرة عبر جداول متعددة ذات صلة: في مجموعة البيانات لدينا، على سبيل المثال، كل منها
الموظف لديه department_id يشير إلى الجدول departments. لنرى
اسم القسم (وليس فقط id) الذي نحتاجه للانضمام إلى
جدولين. يُسمى عامل التشغيل الذي يقوم بذلك JOIN.
بناء الجملة الأساسي
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". والنتيجة هي ** افتراضية جديدة
الجدول ** مع أعمدة كليهما.
-- 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):
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 يعمل بنفس الطريقة.
جربه
لكل موظف في قسم الهندسة إظهار الاسم الأول (الاسم الأول) والاسم الأخير (اسم العائلة) ومدينة القسم (departments.city). ثلاثة أعمدة، صف واحد لكل موظف.
إظهار التلميح
أكمل شرط ON بالمساواة بين e.department_id وd.id، ثم حدد d.city كعمود ثالث.
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
قم بإدراج الاسم الأول (الاسم الأول) والاسم الأخير (اسم العائلة) لجميع الموظفين الذين يعملون في قسم يقع في ميلانو. قم بالتصفية على الإدارات. المدينة، وليس على اسم القسم.
إظهار التلميح
نفس JOIN كما في التمرين السابق، ولكن قم بالتصفية على d.city = 'Milano' بدلاً من اسم القسم.
الحل متاح بعد 3 من المحاولات