English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, vous apprendrez à utiliser l'inner join SQL pour extraire des données de deux tables.
INNER JOIN est le plus communType de connexion。Il ne retourne que les lignes qui correspondent dans les deux tables jointes. Le diagramme de Venn suivant explique comment fonctionne l'inner join.
Pour mieux comprendre cela, regardons ce qui suitemployeesetdepartments表。
+--------+--------------+------------+---------+ | 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 | Service client | | 3 | Finance | | 4 | Ressources humaines | | 5 | Ventes | +---------+------------------+ | |
Table : employees | Table : departments |
Maintenant, supposons que vous ne vouliez检索only检索分配给特定部门的员工的emp_id ,emp_name,hire_date和dept_name. Dans les faits, certains employés peuvent ne pas avoir été assignés à un département, par exemple nousemployeesLe cinquième employé de la table est « Martin Blank ». Mais ici, la question est de savoir comment récupérer des données à partir de deux tables dans la même requête SQL ?
Si vous voyez la table employees, vous remarquerez qu'elle contient une colonne nommée dept_id, qui sauvegarde l'ID du département attribué à chaque employé, c'est-à-dire en termes techniques, la colonne dept_id de la table employees est une clé étrangère de la table departments, donc nous allons utiliser cette colonne comme pont entre ces deux tables.
Ceci est un exemple où, en utilisant la colonne dept_id générique, la table employee et la table departments sont connectées pour rechercher l'ID, le nom, la date d'embauche et le département de l'employé. Il ne comprend pas les employés non affectés à un département.
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;
Astuce :Lors de la connexion de tables, ajoutez le nom de la table à chaque nom de colonne (par exemple employees.dept_id, departments.dept_id ou t1.dept_id, t2.dept_id Si vous utilisezAlias de table), pour éviter tout malentendu et confusion possible entre des colonnes homonymes dans des tables différentes.
Remarque :Pour économiser du temps, vous pouvez utiliserAlias de tableà la place de saisir un nom de table long. Par exemple, vous pouvez donner à la table employees l'alias t1et utilisez t1Pour se référer à la colonne emp_name, utilisez .emp_name au lieu de employees.emp_name. Après l'exécution de la commande ci-dessus, vous obtiendrez le résultat suivant :
+--------+--------------+------------+-----------------+ | 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 | +--------+--------------+------------+-----------------+
As you can see, the result set only contains employees with a dept_id value that also exists in the dept_id column of the department table.