English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本教程中,您将学习如何使用SQL内部联接从两个表中获取数据。
INNER JOIN是最常见的连接类型。它仅返回在两个联接表中都匹配的行。下维恩图说明了内部联接的工作方式。
为了容易理解这一点,让我们来看看下面employees和departments表。
+--------+--------------+------------+---------+ | emp_id | emp_name | hire_date | dept_id | +--------+--------------+------------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 4 | | 2 | Tony Montana | 2002-07-15 | 1 | | 3 | Sarah Connor | 2005-10-18 | 5 | | 4 | Rick Deckard | 2007-01-03 | 3 | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administration | | 2 | Customer Service | | 3 | Finance | | 4 | Human Resources | | 5 | Sales | | +---------+------------------+ | |
جدول: employees | جدول: departments |
الآن، لنفترض أنك تحتاج إلى استخراج بيانات الموظفين المخصصة لقسم معين مثل emp_id،emp_name،hire_date وdept_name. لأنه في الواقع، قد لا يتم تخصيص بعض الموظفين لأي قسم، مثلنا فيemployeesالموظف الخامس في الجدول هو "Martin Blank". ولكن السؤال هو، كيف يمكننا استخراج بيانات من جدولين في نفس استعلام SQL؟
إذا رأيت جدول employees، ستلاحظ أنه يحتوي على عمود يُدعى dept_id يحتوي على ID القسم المخصص لكل موظف، أي أن عمود dept_id في جدول employees هو مفتاح خارجي لجدول departments، لذا سنستخدم هذا العمود كجسر بين الجدولين.
هذا مثال يوضح كيفية ربط جدول employee و جدول departments باستخدام عمود dept_id المشترك لاستخراج معلومات الموظفين مثل id،اسم الموظف،تاريخ التوظيف وإسم القسم. ويشمل ذلك الموظفين الذين لم يتم تخصيصهم لأي قسم.
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name FROM employees AS t1 INNER JOIN departments AS t2 ON t1.dept_id = t2.dept_id ORDER BY emp_id;
إشارة:عند ربط الجداول، قم بإضافة اسم الجدول المتبقي أمام كل اسم عمود (مثل employees.dept_id،departments.dept_id أو t1.dept_id،t2.dept_id إذا كنت تستخدمالاسم المختصر للجدول)، لتجنب أي تضارب في الأسماء أو أخطاء في الأسماء المكررة في جدولين مختلفين.
ملاحظة:للإسراع في البحث، يمكنك استخدامالاسم المختصر للجدولبديلًا عن إدخال اسم طويل للمجال. على سبيل المثال، يمكنك منح جدول employees لقب别名 t1، واستخدام t1.emp_name بدلاً من employees.emp_name لاستدعاء عمود emp_name. بعد تنفيذ الأمر المذكور أعلاه، ستحصل على النتيجة التالية:
+--------+--------------+------------+-----------------+ | emp_id | emp_name | hire_date | dept_name | +--------+--------------+------------+-----------------+ | 1 | Ethan Hunt | 2001-05-01 | Human Resources | | 2 | Tony Montana | 2002-07-15 | Administration | | 3 | Sarah Connor | 2005-10-18 | Sales | | 4 | Rick Deckard | 2007-01-03 | Finance | +--------+--------------+------------+-----------------+
كما ترون، يحتوي مجموعة النتائج فقط على الموظفين الذين يحملون قيمة dept_id، ويجب أن تكون هذه القيمة موجودة أيضًا في عمود dept_id في جدول department.