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

Sentença de CROSS JOIN SQL

Neste tutorial, você aprenderá como usar a junção cartesiana em SQL para obter dados de duas tabelas.

Usar junção cartesiana

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.