English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá como usar a junção cartesiana em SQL para obter dados de duas tabelas.
Se não especificar a condição de junção ao conectar duas tabelas, o sistema de banco de dados combinará cada linha da primeira tabela com cada linha da segunda tabela. Este tipo de junção é chamado de junção cartesiana ou produto cartesiano. O diagrama de Venn a seguir ilustra como a junção cartesiana funciona.
Para facilitar a compreensão, vamos ver a seguiremployeesedepartmentsTabela.
+--------+--------------+------------+---------+ | 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 | Administração | | 2 | Serviço ao Cliente | | 3 | Finanças | | 4 | Recursos Humanos | | 5 | Vendas | +---------+------------------+ | |
Tabela: employees | Tabela: departments |
O número de linhas na junção cartesiana é o produto das linhas de cada tabela. Este é um exemplo simples de operação de junção cartesiana.
SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name FROM employees AS t1 CROSS JOIN departments AS t2;
Dica:A junção cartesiana cria o produto cartesiano ou multiplica todas as linhas de uma tabela por todas as linhas da outra tabela. Portanto, por exemplo, se uma tabela tiver5linhas, enquanto a outra tabela tem10linhas, então a consulta de junção cartesiana produzirá50 linhas, ou seja5e10do produto.
Executar o comando acima, você obterá o seguinte conjunto de resultados:
+--------+--------------+------------+------------------+ | emp_id | emp_name | hire_date | dept_name | +--------+--------------+------------+------------------+ | 1 | Ethan Hunt | 2001-05-01 | Administração | | 2 | Tony Montana | 2002-07-15 | Administração | | 3 | Sarah Connor | 2005-10-18 | Administração | | 4 | Rick Deckard | 2007-01-03 | Administração | | 5 | Martin Blank | 2008-06-24 | Administração | | 1 | Ethan Hunt | 2001-05-01 | Serviço ao Cliente | | 2 | Tony Montana | 2002-07-15 | Serviço ao Cliente | | 3 | Sarah Connor | 2005-10-18 | Serviço ao Cliente | | 4 | Rick Deckard | 2007-01-03 | Serviço ao Cliente | | 5 | Martin Blank | 2008-06-24 | Serviço ao Cliente | | 1 | Ethan Hunt | 2001-05-01 | Finanças | | 2 | Tony Montana | 2002-07-15 | Finanças | | 3 | Sarah Connor | 2005-10-18 | Finanças | | 4 | Rick Deckard | 2007-01-03 | Finanças | | 5 | Martin Blank | 2008-06-24 | Finanças | | 1 | Ethan Hunt | 2001-05-01 | Recursos Humanos | | 2 | Tony Montana | 2002-07-15 | Recursos Humanos | | 3 | Sarah Connor | 2005-10-18 | Recursos Humanos | | 4 | Rick Deckard | 2007-01-03 | Recursos Humanos | | 5 | Martin Blank | 2008-06-24 | Recursos Humanos | | 1 | Ethan Hunt | 2001-05-01 | Vendas | | 2 | Tony Montana | 2002-07-15 | Vendas | | 3 | Sarah Connor | 2005-10-18 | Vendas | | 4 | Rick Deckard | 2007-01-03 | Vendas | | 5 | Martin Blank | 2008-06-24 | Vendas | +--------+--------------+------------+------------------+
Como você vê, a função do cruzamento é menos eficaz do que o descrito nos capítulos anteriores. Como a consulta não especifica a condição de conexão, cada linha da tabela employees é combinada com cada linha da tabela departments. Portanto, a menos que você esteja certo de que deseja usar o produto cartesiano, não use o cruzamento.