logo

MySQL CROSS JOIN

MySQL CROSS JOIN é usado para combinar todas as possibilidades de duas ou mais tabelas e retornar o resultado que contém cada linha de todas as tabelas contribuintes. O CROSS JOIN também é conhecido como CARTESIAN JOIN, que fornece o produto cartesiano de todas as tabelas associadas. O produto cartesiano pode ser explicado como todas as linhas presentes na primeira tabela multiplicadas por todas as linhas presentes na segunda tabela. É semelhante ao Inner Join, onde a condição de join não está disponível com esta cláusula.

Podemos entendê-lo com a seguinte representação visual onde CROSS JOIN retorna todos os registros da tabela1 e tabela2, e cada linha é a combinação de linhas de ambas as tabelas.

MySQL CROSS JOIN

Sintaxe MySQL CROSS JOIN

A palavra-chave CROSS JOIN é sempre usada com a instrução SELECT e deve ser escrita após a cláusula FROM. A sintaxe a seguir busca todos os registros de ambas as tabelas de união:

lista de religiões
 SELECT column-lists FROM table1 CROSS JOIN table2; 

Na sintaxe acima, listas de colunas é o nome da coluna ou campo que você deseja retornar e tabela1 e tabela2 são o nome da tabela da qual você busca os registros.

Exemplo de CROSS JOIN do MySQL

Vejamos alguns exemplos para entender o funcionamento da cláusula Left Join ou Left Outer Join:

Cláusula CROSS JOIN para unir duas tabelas

Aqui, vamos criar duas tabelas 'clientes' e 'Contatos' que contém os seguintes dados:

Tabela: clientes

MySQL CROSS JOIN

Tabela: contatos

ex do nome de usuário
MySQL CROSS JOIN

Para buscar todos os registros de ambas as tabelas, execute a seguinte consulta:

 SELECT * FROM customers CROSS JOIN contacts; 

Após a execução bem-sucedida da consulta, a seguinte saída será exibida:

MySQL CROSS JOIN

Quando a instrução CROSS JOIN for executada, você observará que ela exibe 42 linhas. Isso significa que sete linhas da tabela de clientes são multiplicadas pelas seis linhas da tabela de contatos.

NOTA: Para evitar o resultado de colunas repetidas duas vezes, é recomendado usar nomes de colunas individuais em vez da instrução SELECT *.

Problema de colunas ambíguas no MySQL CROSS JOIN

Às vezes, precisamos buscar os registros das colunas selecionadas em várias tabelas. Essas tabelas podem conter alguns nomes de colunas semelhantes. Nesse caso, a instrução MySQL CROSS JOIN gera um erro: o nome da coluna é ambíguo. Isso significa que o nome da coluna está presente em ambas as tabelas e o MySQL fica confuso sobre qual coluna você deseja exibir. Os exemplos a seguir explicam isso mais claramente:

 SELECT customer_id, cust_name, income, order_id, price FROM customer CROSS JOIN orders; 

O CROSS JOIN acima gera um erro conforme mostrado na imagem abaixo:

MySQL CROSS JOIN

Este problema pode ser resolvido usando o nome da tabela antes do nome da coluna. A consulta acima pode ser reescrita como:

 SELECT customer.customer_id, customer.cust_name, customer.income, orders.order_id, orders.price FROM customer CROSS JOIN orders; 

Após executar a consulta acima, obteremos a seguinte saída:

convertendo int para double java
MySQL CROSS JOIN

LEFT JOIN com cláusula WHERE

A cláusula WHERE é usada para retornar o filtro resultado da tabela. O exemplo a seguir ilustra isso com a cláusula CROSS JOIN:

 SELECT customers.customer_id, customers.cust_name, customers.income, orders.order_id, orders.price FROM customers CROSS JOIN orders USING(customer_id) WHERE price&gt;1500 AND price<5000; < pre> <p>This statement gives the below result:</p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-7.webp" alt="MySQL CROSS JOIN"> <h3>MySQL CROSS JOIN Multiple Tables</h3> <p>We have already created two tables named &apos; <strong>customers&apos;</strong> and &apos; <strong>orders&apos;</strong> . Let us create one more table and name it as &apos; <strong>contacts&apos; that contains the following data:</strong> </p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-8.webp" alt="MySQL CROSS JOIN"> <p>Here, we are going to explain CROSS JOIN with LEFT JOIN using three tables. Execute the following statement to join the three table customers, orders, and contacts. In this statement, first CROSS JOIN completed between orders and contacts, and then LEFT JOIN executes according to the specified condition.</p> <pre> SELECT * FROM customer LEFT JOIN(orders CROSS JOIN contacts) ON customer.customer_id=contact_id ORDER BY income; </pre> <p>After successful execution of the above query, it will give the following output:</p> <img src="//techcodeview.com/img/mysql-tutorial/98/mysql-cross-join-9.webp" alt="MySQL CROSS JOIN"> <hr></5000;>

Após a execução bem-sucedida da consulta acima, a seguinte saída será obtida:

MySQL CROSS JOIN