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

L'expression SQL FULL JOIN

Dans ce tutoriel, vous apprendrez comment utiliser SQL Full Join pour extraire des données de deux tables.

l'utilisation de la jointure complète

FULL JOIN renvoie toutes les lignes des tables de jointure, qu'elles correspondent ou non, ce qui signifie que la jointure complète combine LEFT JOINandRIGHT JOINcomplète jointe estune fonction de jointure externepar conséquent, il est également appeléfull outer join.

Le diagramme de Venn suivant explique comment fonctionne la jointure complète.

Note:Une jointure externe est une jointure qui contient des lignes dans le résultat, même si les lignes des deux tables à joindre peuvent ne pas correspondre.

Pour comprendre cela clairement, regardons ce qui suitemployeesanddepartmentsTableau.

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

Maintenant, supposons que vous ne vouliez检索所有雇员的姓名和可用部门的名称,regardless of whether they have a corresponding row in the other table, dans ce cas, vous pouvez utiliser la jointure complète, comme suit.

Les instructions suivantes relient les tables employee et department en utilisant le champ générique dept_id pour récupérer les détails de tous les départements et de tous les employés.

SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 FULL JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_name;

Certains bases de données (par exemple Oracle, MySQL) ne prennent pas en charge la jointure complète. Dans ce cas, vous pouvez utiliser l'opérateur UNION ALL pour combiner LEFT JOIN et RIGHT JOIN, comme suit :

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
UNION ALL
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 RIGHT JOIN departments AS t2
ON t1.dept_id = t2.dept_id ORDER BY emp_name;

Après l'exécution de la commande ci-dessus, vous obtiendrez la sortie suivante :

+--------+--------------+------------+------------------+
| emp_id | emp_name     | hire_date  | dept_name        |
+--------+--------------+------------+------------------+
|   NULL | NULL         | NULL       | Customer Service |
|      1 | Ethan Hunt   | 2001-05-01 | Human Resources  |
|      1 | Ethan Hunt   | 2001-05-01 | Human Resources  |
|      5 | Martin Blank | 2008-06-24 | NULL  |
|      4 | Rick Deckard | 2007-01-03 | Finance  |
|      4 | Rick Deckard | 2007-01-03 | Finance  |
|      3 | Sarah Connor | 2005-10-18 | Sales  |
|      3 | Sarah Connor | 2005-10-18 | Sales  |
|      2 | Tony Montana | 2002-07-15 | Administration  |
|      2 | Tony Montana | 2002-07-15 | Administration  |
+--------+--------------+------------+------------------+

As you can see, the results includedepartmentsandemployeesAll rows in the table.

Tip:In a join query, the left table is the table that appears first on the left side of the JOIN clause, and the right table is the table that appears first on the right side of the clause.

Note:When performing an outer join, if the DBMS (Database Management System) cannot match any rows, it will place NULL in the column to indicate that the data does not exist.