English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, vous apprendrez à utiliser la jointure croisée SQL pour extraire des données de deux tables.
Si vous ne spécifiez pas les conditions de jointure lors de la connexion de deux tables, le système de base de données fusionnera chaque ligne de la première table avec chaque ligne de la deuxième table. Ce type de jointure est appelé jointure croisée ou produit cartésien. Le diagramme de Venn suivant explique comment fonctionne la jointure croisée.
Pour mieux comprendre cela, regardons ce qui suit :employeesetdepartmentstable.
+--------+--------------+------------+---------+ | 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 |
Le nombre de lignes dans la jointure croisée est le produit des nombres de lignes de chaque table. Voici un exemple simple de l'opération de jointure croisée.
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name FROM employees AS t1 CROSS JOIN departments AS t2;
Astuce :La jointure croisée créera un produit cartésien ou multipliera toutes les lignes d'une table par toutes les lignes de l'autre table. Par conséquent, par exemple, si une table a5lignes, tandis que l'autre table a10lignes, alors la requête de jointure croisée produira50 lignes, c'est-à-dire5et10du produit.
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 | Administration | | 2 | Tony Montana | 2002-07-15 | Administration | | 3 | Sarah Connor | 2005-10-18 | Administration | | 4 | Rick Deckard | 2007-01-03 | Administration | | 5 | Martin Blank | 2008-06-24 | Administration | | 1 | Ethan Hunt | 2001-05-01 | Service client | | 2 | Tony Montana | 2002-07-15 | Service client | | 3 | Sarah Connor | 2005-10-18 | Service client | | 4 | Rick Deckard | 2007-01-03 | Service client | | 5 | Martin Blank | 2008-06-24 | Service client | | 1 | Ethan Hunt | 2001-05-01 | Finance | | 2 | Tony Montana | 2002-07-15 | Finance | | 3 | Sarah Connor | 2005-10-18 | Finance | | 4 | Rick Deckard | 2007-01-03 | Finance | | 5 | Martin Blank | 2008-06-24 | Finance | | 1 | Ethan Hunt | 2001-05-01 | Ressources humaines | | 2 | Tony Montana | 2002-07-15 | Ressources humaines | | 3 | Sarah Connor | 2005-10-18 | Ressources humaines | | 4 | Rick Deckard | 2007-01-03 | Ressources humaines | | 5 | Martin Blank | 2008-06-24 | Ressources humaines | | 1 | Ethan Hunt | 2001-05-01 | Ventes | | 2 | Tony Montana | 2002-07-15 | Ventes | | 3 | Sarah Connor | 2005-10-18 | Ventes | | 4 | Rick Deckard | 2007-01-03 | Ventes | | 5 | Martin Blank | 2008-06-24 | Ventes | +--------+--------------+------------+------------------+
Comme vous le voyez, l'effet de l'intersection croisée est inférieur à celui des chapitres précédents. Comme la requête n'a pas spécifié les conditions de connexion, chaque ligne de la table employees est fusionnée avec chaque ligne de la table departments. Par conséquent, ne pas utiliser l'intersection croisée sauf si vous êtes sûr d'utiliser le produit cartésien.