52 - Combinaciones cruzadas (cross)


Problema:

Un pequeño restaurante tiene almacenados los nombres y precios de sus comidas en una tabla llamada "comidas" y en una tabla denominada "postres" los mismos datos de sus postres.

Eliminamos las tablas:

 drop table comidas;
 drop table postres;

Creamos las tablas:

 create table comidas(
  codigo number(2),
  nombre varchar2(30),
  precio number(4,2)
 );

 create table postres(
  codigo number(2),
  nombre varchar2(30),
  precio number(4,2)
 );

Ingresamos algunos registros:

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

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

El restaurante quiere 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"
  from comidas c
  cross join postres p;

La salida muestra cada plato combinado con cada uno de los postres. Se obtienen 8 registros.

En la siguiente combinación cruzada, agregamos una columna que calcula el precio total de cada menú:

 select c.nombre as "plato principal",
  p.nombre as "postre",
  c.precio+p.precio as "total"
  from comidas  c
  cross join postres p;

La salida muestra cada plato combinado con cada uno de los postres y el precio total de cada menú. Se obtienen 8 registros.

Ingresemos el siguiente lote de comandos en el Oracle SQL Developer:

 drop table comidas;
 drop table postres;

 create table comidas(
  codigo number(2),
  nombre varchar2(30),
  precio number(4,2)
 );

 create table postres(
  codigo number(2),
  nombre varchar2(30),
  precio number(4,2)
 );

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

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

 select c.nombre as "plato principal",
  p.nombre as "postre"
  from comidas c
  cross join postres p;

 select c.nombre as "plato principal",
  p.nombre as "postre",
  c.precio+p.precio as "total"
  from comidas  c
  cross join postres p;

La ejecución de este lote de comandos SQL genera una salida similar a:

SQL Developer cross join


Retornar