Articles

SQL CROSS JOIN

Posted on

O SQL Cross Join devolve o produto cartesiano de ambas as tabelas. Produto cartesiano significa Número de Linhas presentes na Tabela 1 Multiplicado pelo Número de Linhas presentes na Tabela 2. O SQL Server Cross Join não requer qualquer coluna comum para juntar duas tabelas. Vejamos a representação visual do Cross Join para melhor compreensão.

SQL CROSS JOIN Chart

Da captura de ecrã acima, pode facilmente compreender que o SQL Server Cross join exibe o produto cartesiano de duas tabelas. Isto significa que cada registo da Tabela A é combinado com cada registo Tabela B

SQL Cross Join Syntax

A sintaxe do Cross Join no SQL Server é

-- SQL Server Cross Join SyntaxSELECT Table1.Column(s), Table2.Column(s),FROM Table1 CROSS JOIN Table2 --OR We can Simply Write it asSELECT Table1. Column(s), Table2. Column(s),FROM Table1, Table2 

Para este exemplo do Cross Join no SQL Server, usamos duas tabelas (Empregado e Departamento). Dados presentes na Tabela de Empregados

SQL CROSS JOIN Example

Os dados presentes na Tabela do Departamento SQL Server são:

SQL CROSS JOIN

SQL Cross Join Select * Exemplo

A seguinte consulta cross Join exibirá todas as colunas existentes num empregado & Tabelas de departamento

-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT * FROM CROSS JOIN ;

Se observar a imagem abaixo Junte-se à imagem de ecrã, Está a exibir 120 registos. Significa 15 linhas do Empregado multiplica por 8 linhas na tabela do Departamento

SQL CROSS JOIN 3

NOTE: Sugiro que seleccione nomes de colunas individuais. Por favor evite SELECT * Statement in Cross Join para evitar colunas indesejadas como id, DeptID, id, etc.

SQL Cross Join Select Few Columns Example

Como dissemos antes, por favor seleccione as colunas necessárias após a declaração SELECT para evitar colunas indesejadas. A seguinte consulta de cross join exibirá o produto cartesiano das colunas presentes nas tabelas Employee and Department.

-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT , ,FROM CROSS JOIN 
SQL CROSS JOIN 4

SQL Cross Join Colunas ambíguas

Acima A consulta Transact funcionará sem falhas se os nomes das colunas de ambas as tabelas (Empregado e Departamento) forem diferentes como acima. O que acontece se tiverem os mesmos nomes de coluna em ambas as tabelas? Bem, com a abordagem acima especificada, acabará por ter um erro.

Deixe-me mostrar-lhe um exemplo prático. Adicionámos id da tabela de departamento como uma coluna adicional à consulta acima.

-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT , ,id ,FROM CROSS JOIN 

Como vê, está a atirar um erro: ID da coluna ambígua. É porque a coluna id está presente tanto na tabela Empregado como na tabela de departamento. E o SQL Server não sabe qual a coluna que está a pedir para recuperar.

SQL CROSS JOIN 5

Para resolver este tipo de problemas, tem sempre de usar o nome da tabela antes do nome da coluna. A seguinte consulta Cross Join utiliza o nome da tabela ALIAS antes do nome da coluna. Através desta abordagem, podemos informar o Servidor que estamos à procura da coluna id pertencente à tabela de departamento.

Podemos escrever a consulta de cross join acima como:

-- SQL Server Cross Join ExampleSELECT Emp. ,Emp. ,Dept.id ,Dept.FROM AS EmpCROSS JOIN AS Dept
SQL CROSS JOIN 6

Cross Join without Join keyword

P>É possível também evitar a palavra-chave CROSS JOIN para obter o resultado.

-- SQL Server Cross Join ExampleSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp,CROSS JOIN AS Dept--OR We Can simply Write it asSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp, AS Dept
SQL CROSS JOIN 1

SQL Cross Join Where Clause

Podemos usar a cláusula Where Clause juntamente com a Cross Join para restringir o número de filas devolvidas pela Cross Join. Aqui, utilizamos a Cláusula ONDE, juntamente com a Cross Join.

-- SQL Server Cross Join ExampleSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp, AS DeptWHERE Dept. = 'Software Developer'
SQL CROSS JOIN 2

Cross Exemplo de Junção por Ordem por Cláusula

A junção cruzada permite-nos utilizar a Ordem por Cláusula para reordenar a ordem dos registos.

-- SQL Server Cross Join ExampleSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp, AS DeptWHERE Dept. = 'Software Developer'
SQL CROSS JOIN 7

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *