English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, vous apprendrez à utiliser la jointure gauche en SQL pour extraire des données de deux tables.
Une instruction LEFT JOIN retourne toutes les lignes de la table de gauche ainsi que les lignes de la table droite qui répondent aux conditions de jointure. La jointure gauche estune forme de jointure externe,par conséquent, elle est également appeléeleft outer join.D'autres variantes de jointure externe sontJointure droiteetJointure complète.
Le diagramme de Venn suivant explique comment fonctionne une jointure gauche.
Attention :Une jointure externe est une jointure qui inclut des lignes dans le résultat, même si les lignes des deux tables à joindre peuvent ne pas correspondre.
Pour mieux comprendre cela, regardons ce qui suitemployeesetdepartmentsTable.
+--------+--------------+------------+---------+ | 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èle | | 3 | Finance | | 4 | Ressources humaines | | 5 | Ventes | +---------+------------------+ | |
Table : employees | Table : departments |
Maintenant, supposons que vous vouliez récupérer l'ID, le nom et la date d'embauche de tous les employés ainsi que le nom de leur département, sans distinction de leur affectation à un département. Pour obtenir ce type de jeu de résultats, nous devons appliquer une jointure gauche.
La requête suivante utilise des champs communs pourles employés(employees)etdepartments(Départements)Les tables sont connectées pour récupérer l'ID des employés, le nom, la date d'embauche et le nom de leur département.dept_id。Il inclut également 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 LEFT JOIN departments AS t2 ON t1.dept_id = t2.dept_id ORDER BY emp_id;
Astuce :Dans une requête de jointure, la table de gauche est la table la plus à gauche apparue dans la clause JOIN, et la table de droite est la table la plus à droite apparue dans la clause.
Après avoir exécuté la commande ci-dessus, vous obtiendrez les sorties suivantes :
+--------+--------------+------------+-----------------+ | emp_id | emp_name | hire_date | dept_name | +--------+--------------+------------+-----------------+ | 1 | Ethan Hunt | 2001-05-01 | Ressources humaines | | 2 | Tony Montana | 2002-07-15 | Administration | | 3 | Sarah Connor | 2005-10-18 | Ventes | | 4 | Rick Deckard | 2007-01-03 | Finance | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+-----------------+
Comme vous pouvez le voir clairement, le LEFT JOIN inclutEmployétoutes les lignes du résultat de la requête dans la table (employees), peu importedepartmentsdans la tabledept_idColonne de correspondance.
Attention :Si une ligne est présente à gauche mais pas de correspondance dans la table de droite, les lignes de résultats associées contiendront NULL pour toutes les colonnes de la table de droite.