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.
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
Os dados presentes na Tabela do Departamento SQL Server são:
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
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 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.
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
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 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'
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'