English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL INNER JOIN 语句

在本教程中,您将学习如何使用SQL内部联接从两个表中获取数据。

使用内部联接

INNER JOIN是最常见的连接类型。它仅返回在两个联接表中都匹配的行。下维恩图说明了内部联接的工作方式。

为了容易理解这一点,让我们来看看下面employeesdepartments表。

+--------+--------------+------------+---------+
| 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            |
+---------+------------------+
Tabelle: employees
Tabelle: departments

Angenommen, Sie möchten nur die emp_id, emp_name, hire_date und dept_name der Mitarbeiter abrufen, die einer bestimmten Abteilung zugewiesen sind. Da in der Praxis einige Mitarbeiter möglicherweise noch keiner Abteilung zugewiesen sind, zum BeispielemployeesDer fünfte Mitarbeiter in der Tabelle „Martin Blank“ . Aber hier ist die Frage, wie man Daten aus zwei Tabellen in einer SQL-Abfrage abruft?

Wenn Sie die Tabelle employees sehen, bemerken Sie, dass sie eine Spalte namens dept_id hat, die die ID der Abteilung speichert, der jeder Mitarbeiter zugewiesen ist. In technischen Begriffen ist die Spalte dept_id der Tabelle employees ein Fremdschlüssel der Tabelle departments, daher verwenden wir diesen Spaltenwert als Brücke zwischen beiden Tabellen.

Dies ist ein Beispiel, bei dem die Tabelle employee und die Tabelle departments über die universelle Spalte dept_id verbunden werden, um die ID, den Namen, das Einstellungsdatum und die Abteilung des Mitarbeiters abzurufen. Es enthält keine Mitarbeiter, die keiner Abteilung zugewiesen sind.

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;

Tipp:Tabelle verknüpft, fügen Sie vor jedem Spaltennamen den Namen der zugehörigen Tabelle hinzu (z.B. employees.dept_id, departments.dept_id oder t1.dept_id, t2.dept_id Wenn SieTabellenalias),um mögliche Conflikte und inkrementelle Fehler durch gleichnamige Spalten in verschiedenen Tabellen zu vermeiden.

Hinweis:Um Zeit zu sparen, können Sie in der Abfrage verwendenTabellenaliasanstelle der Eingabe eines langen Tabellennamens. Zum Beispiel können Sie der Tabelle employees den Alias t1, und verwenden Sie t1Um die Spalte emp_name anstelle von employees.emp_name zu referenzieren, erhalten Sie nach der Ausführung des obigen Befehls das folgende Ergebnis:

+--------+--------------+------------+-----------------+
| 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         |
+--------+--------------+------------+-----------------+

Wie Sie sehen können, enthält das Ergebnissatz nur Mitarbeiter mit einem dept_id-Wert, und dieser Wert ist auch in der dept_id-Spalte der Tabelle department vorhanden.