What is the difference between CROSS JOIN and multiple tables in one FROM?  - Stack Overflow

CROSS JOIN

¿Te gustaría aprender Base de Datos con SQL Server?
Tenemos los diplomados que necesitas. ¡Haz clic aquí!

Hay tres tipos de combinaciones:
1) combinaciones internas.
2) combinaciones externas (left, right y full).
3) combinaciones cruzadas.

Las combinaciones cruzadas (cross join) muestran todas las combinaciones de todos los registros de las tablas combinadas. Para este tipo de join no se incluye una condición de enlace. Se genera el producto cartesiano en el que el número de filas del resultado es igual al número de registros de la primera tabla multiplicado por el número de registros de la segunda tabla, es decir, si hay 5 registros en una tabla y 6 en la otra, retorna 30 filas.

La sintaxis básica es ésta:

 select CAMPOS
  from TABLA1
  cross join TABLA2;

Veamos un ejemplo. Un pequeño restaurante almacena los nombres y precios de sus comidas en una tabla llamada “comidas” y en una tabla denominada “postres” los mismos datos de sus postres.

Si necesitamos conocer todas las combinaciones posibles para un menú, cada comida con cada postre, empleamos un “cross join”:

 select c.nombre as 'plato principal', p.nombre as 'postre'
  from comidas as c
  cross join postres as p;
SQL CROSS JOIN | Free Tutorials Plus

La salida muestra cada plato combinado con cada uno de los postres.

Como cualquier tipo de “join”, puede emplearse una cláusula “where” que condicione la salida.

Servidor de SQL Server instalado en forma local.

Ingresemos el siguiente lote de comandos en el SQL Server Management Studio:

if object_id('comidas') is not null
  drop table comidas;
if object_id('postres') is not null
  drop table postres;

create table comidas(
  codigo tinyint identity,
  nombre varchar(30),
  precio decimal(4,2)
);

create table postres(
  codigo tinyint identity,
  nombre varchar(30),
  precio decimal(4,2)
);

go

insert into comidas values('ravioles',5);
insert into comidas values('tallarines',4);
insert into comidas values('milanesa',7);
insert into comidas values('cuarto de pollo',6);

insert into postres values('flan',2.5);
insert into postres values('porcion torta',3.5);

-- Combinar los registros de ambas tablas para mostrar 
-- los distintos menúes que ofrece. Lo hacemos usando un "cross join":
select c.nombre as 'plato principal',
  p.nombre as 'postre',
  c.precio+p.precio as 'total'
  from comidas as c
  cross join postres as p;

Tenemos como resultado:

SQL Server Management Studio cross join

Principales tipos de JOINS en SQL

Los JOINs en SQL sirven para combinar filas de dos o más tablas basándose en un campo común entre ellas, devolviendo por tanto datos de diferentes tablas. Un JOIN se produce cuando dos o más tablas se juntan en una sentencia SQL.

Existen más tipos de joins en SQL que los que aquí se explican, como CROSSSELF JOIN, pero no todos ellos están soportados por todos los sistemas de bases de datos. Los más importantes son los siguientes:

  1. INNER JOIN: Devuelve todas las filas cuando hay al menos una coincidencia en ambas tablas.
  2. LEFT JOIN: Devuelve todas las filas de la tabla de la izquierda, y las filas coincidentes de la tabla de la derecha.
  3. RIGHT JOIN: Devuelve todas las filas de la tabla de la derecha, y las filas coincidentes de la tabla de la izquierda.
  4. OUTER JOIN: Devuelve todas las filas de las dos tablas, la izquierda y la derecha. También se llama FULL OUTER JOIN.

1. INNER JOIN

Selecciona todas las filas de las dos columnas siempre y cuando haya una coincidencia entre las columnas en ambas tablas. Es el tipo de JOIN más común.

SELECT nombreColumna(s)
FROM tabla1
INNER JOIN tabla2
ON tabla1.nombreColumna=table2.nombreColumna;

Se ve más claro utilizando una imagen:

SQL INNER JOIN

2. LEFT JOIN

Mantiene todas las filas de la tabla izquierda (la tabla1). Las filas de la tabla derecha se mostrarán si hay una coincidencia con las de la izquierda. Si existen valores en la tabla izquierda pero no en la tabla derecha, ésta mostrará null.

SELECT nombreColumna(s)
FROM tabla1
LEFT JOIN tabla2
ON tabla1.nombreColumna=tabla2.nombreColumna;

La representación en una imagen es:

SQL LEFT JOIN

3. RIGHT JOIN

Es igual que LEFT JOIN pero al revés. Ahora se mantienen todas las filas de la tabla derecha (tabla2). Las filas de la tabla izquierda se mostrarán si hay una coincidencia con las de la derecha. Si existen valores en la tabla derecha pero no en la tabla izquierda, ésta se mostrará null.

SELECT nombreColumna(s)
FROM tabla1
RIGHT JOIN tabla2
ON tabla1.nombreColumna=tabla2.nombreColumna;

La imagen que representa es:

SQL RIGHT JOIN

4. OUTER JOIN

OUTER FULL OUTER devuelve todas las filas de la tabla izquierda (tabla1) y de la tabla derecha (tabla2). Combina el resultado de los joins LEFT y RIGHT. Aparecerá null en cada una de las tablas alternativamente cuando no haya una coincidencia.

SELECT nombreColumna(s)
FROM tabla1
OUTER JOIN tabla2
ON tabla1.nombreColumna=tabla2.nombreColumna;

La imagen que representa es la siguiente:

SQL FULL OUTER JOIN

Te invitamos a ver todos los artículos que tenemos para ti, coméntanos que tal te pareció este articulo y compártelo con más personas.

¿Te gustaría aprender Base de Datos con SQL Server?
Tenemos los diplomados que necesitas. ¡Haz clic aquí!

About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
guest
0 Comments
Comentarios.
Ver todos los comentarios
0
¿Te gusta este articulo? por favor comentax
()
x