53 - Autocombinación |
Una agencia matrimonial almacena la información de sus clientes en una tabla llamada "clientes".
1- Elimine la tabla y créela:
drop table clientes; create table clientes( nombre varchar2(30), sexo char(1),--'f'=femenino, 'm'=masculino edad number(2), domicilio varchar2(30) );
2- Ingrese los siguientes registros:
insert into clientes values('Maria Lopez','f',45,'Colon 123');
insert into clientes values('Liliana Garcia','f',35,'Sucre 456');
insert into clientes values('Susana Lopez','f',41,'Avellaneda 98');
insert into clientes values('Juan Torres','m',44,'Sarmiento 755');
insert into clientes values('Marcelo Oliva','m',56,'San Martin 874');
insert into clientes values('Federico Pereyra','m',38,'Colon 234');
insert into clientes values('Juan Garcia','m',50,'Peru 333');
3- La agencia necesita la combinación de todas las personas de sexo femenino con las de sexo masculino. Use un "cross join" (12 filas)
4- Obtenga la misma salida anterior pero realizando un "join"
5- Realice la misma autocombinación que el punto 3 pero agregue la condición que las parejas no tengan una diferencia superior a 5 años (5 filas)
Ver solución
drop table clientes;
create table clientes(
nombre varchar2(30),
sexo char(1),--'f'=femenino, 'm'=masculino
edad number(2),
domicilio varchar2(30)
);
insert into clientes values('Maria Lopez','f',45,'Colon 123');
insert into clientes values('Liliana Garcia','f',35,'Sucre 456');
insert into clientes values('Susana Lopez','f',41,'Avellaneda 98');
insert into clientes values('Juan Torres','m',44,'Sarmiento 755');
insert into clientes values('Marcelo Oliva','m',56,'San Martin 874');
insert into clientes values('Federico Pereyra','m',38,'Colon 234');
insert into clientes values('Juan Garcia','m',50,'Peru 333');
select cm.nombre,cm.edad,cv.nombre,cv.edad
from clientes cm
cross join clientes cv
where cm.sexo='f' and cv.sexo='m';
select cm.nombre,cm.edad,cv.nombre,cv.edad
from clientes cm
join clientes cv
on cm.nombre<>cv.nombre
where cm.sexo='f' and cv.sexo='m';
select cm.nombre,cm.edad,cv.nombre,cv.edad
from clientes cm
cross join clientes cv
where cm.sexo='f' and cv.sexo='m' and
cm.edad-cv.edad between -5 and 5;
Varios clubes de barrio se organizaron para realizar campeonatos entre ellos. La tabla llamada "equipos" guarda la información de los distintos equipos que jugarán.
1- Elimine la tabla y créela nuevamente:
drop table equipos; create table equipos( nombre varchar2(30), barrio varchar2(20), domicilio varchar2(30), entrenador varchar2(30) );
2- Ingrese los siguientes registros:
insert into equipos values('Los tigres','Gral. Paz','Sarmiento 234','Juan Lopez');
insert into equipos values('Los leones','Centro','Colon 123','Gustavo Fuentes');
insert into equipos values('Campeones','Pueyrredon','Guemes 346','Carlos Moreno');
insert into equipos values('Cebollitas','Alberdi','Colon 1234','Luis Duarte');
4- Cada equipo jugará con todos los demás 2 veces, una vez en cada sede. Realice un "cross join" para combinar los equipos teniendo en cuenta que un equipo no juega consigo mismo (12 filas)
5- Obtenga el mismo resultado empleando un "join".
6- Realice un "cross join" para combinar los equipos para que cada equipo juegue con cada uno de los otros una sola vez (6 filas)
drop table equipos;
create table equipos(
nombre varchar2(30),
barrio varchar2(20),
domicilio varchar2(30),
entrenador varchar2(30)
);
insert into equipos values('Los tigres','Gral. Paz','Sarmiento 234','Juan Lopez');
insert into equipos values('Los leones','Centro','Colon 123','Gustavo Fuentes');
insert into equipos values('Campeones','Pueyrredon','Guemes 346','Carlos Moreno');
insert into equipos values('Cebollitas','Alberdi','Colon 1234','Luis Duarte');
select e1.nombre,e2.nombre,e1.barrio as sede
from equipos e1
cross join equipos e2
where e1.nombre<>e2.nombre;
5- Obtenga el mismo resultado empleando un "join":
select e1.nombre,e2.nombre,e1.barrio as 'sede'
from equipos e1
join equipos e2
on e1.nombre<>e2.nombre;
select e1.nombre,e2.nombre,e1.barrio as sede
from equipos e1
cross join equipos e2
where e1.nombre>e2.nombre;