Articles

SQL CROSS JOIN

Posted on

El SQL Cross Join devuelve el producto cartesiano de ambas tablas. El producto cartesiano significa el número de filas presentes en la tabla 1 multiplicado por el número de filas presentes en la tabla 2. El Cross Join de SQL Server no requiere ninguna columna común para unir dos tablas. Veamos la representación visual del Cross Join para una mejor comprensión.

Gráfico SQL CROSS JOIN

Desde la captura de pantalla anterior, se puede entender fácilmente que SQL Server Cross join muestra el producto cartesiano de dos tablas. Significa que cada registro de la Tabla A se combina con cada registro de la Tabla B

Sintaxis de Cross Join de SQL Server

La sintaxis del Cross Join en SQL Server es

-- 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 ejemplo de Cross Join de SQL Server, utilizamos dos tablas (Empleado y Departamento). Los datos presentes en la Tabla Empleado

Ejemplo de CROSS JOIN de SQL Server

Los datos presentes en la Tabla Departamento de SQL Server son:

SQL CROSS JOIN

SQL Cross Join Select * Ejemplo

La siguiente consulta Cross Join mostrará todas las columnas existentes en un empleado & Tablas de departamentos

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

Si observa la captura de pantalla de Join de abajo, Está mostrando 120 registros. Significa que 15 filas del Empleado se multiplican por 8 filas en la tabla Departamento

SQL CROSS JOIN 3

NOTA: Le sugiero que seleccione nombres de columnas individuales. Por favor, evite la declaración SELECT * en Cross Join para evitar columnas no deseadas como id, DeptID, id, etc.

SQL Cross Join Select Few Columns Example

Como dijimos antes, por favor seleccione las columnas requeridas después de la declaración SELECT para evitar columnas no deseadas. La siguiente consulta cross join mostrará el producto cartesiano de las columnas presentes en las tablas Empleado y Departamento.

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

SQL Cross Join Columnas ambiguas

La consulta Transact anterior funcionará sin problemas si los nombres de las columnas de ambas tablas (Empleado y Departamento) son diferentes como en el caso anterior. ¿Qué pasa si tienen los mismos nombres de columna en ambas tablas? Bueno, con el enfoque especificado anteriormente, terminará con un error.

Déjame mostrarte un ejemplo práctico. Añadimos el id de la tabla departamento como una columna adicional a la consulta anterior.

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

Como ves, está lanzando un error: Nombre ambiguo de la columna id. Es porque la columna id está presente tanto en la tabla Empleado como en la tabla Departamento. Y SQL Server no sabe qué columna le está pidiendo que recupere.

SQL CROSS JOIN 5

Para resolver este tipo de problemas, siempre hay que utilizar el nombre de la tabla antes del nombre de la columna. La siguiente consulta Cross Join utiliza el nombre de la tabla ALIAS antes de los nombres de las columnas. Con este enfoque, podemos informar al Servidor que estamos buscando la columna id perteneciente a la tabla departamento.

Podemos escribir la consulta cross join anterior como:

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

Cross Join sin la palabra clave Join

También puede evitar la palabra clave CROSS JOIN para obtener el 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 Cláusula Where

Podemos utilizar la Cláusula Where junto con el cross join en la restricción del número de filas devueltas por el Cross Join. Aquí, usamos esa Cláusula WHERE junto con el 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 Join Order By Clause Ejemplo

El cross join nos permite utilizar Order By Clause para reordenar el orden de los registros.

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *