52 - Combinaciones cruzadas (cross) |
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.
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: