49 - Autocombinación |
Una agencia matrimonial almacena la información de sus clientes en una tabla llamada "clientes". 1- Cree la tabla: create table clientes( nombre varchar(30), sexo char(1),--'f'=femenino, 'm'=masculino edad int, domicilio varchar(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 registros) 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 registros)Ver solución
create table clientes( nombre varchar(30), sexo char(1),--'f'=femenino, 'm'=masculino edad int, domicilio varchar(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 as cm cross join clientes cv where cm.sexo='f' and cv.sexo='m'; select cm.nombre,cm.edad,cv.nombre,cv.edad from clientes as 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 as 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- Cree la tabla: create table equipos( nombre varchar(30), barrio varchar(20), domicilio varchar(30), entrenador varchar(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'); 3- 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 registros) 4- Obtenga el mismo resultado empleando un "join". 5- Realice un "cross join" para combinar los equipos para que cada equipo juegue con cada uno de los otros una sola vez (6 registros)
create table equipos( nombre varchar(30), barrio varchar(20), domicilio varchar(30), entrenador varchar(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 as e1 cross join equipos as e2 where e1.nombre<>e2.nombre; select e1.nombre,e2.nombre,e1.barrio as sede from equipos as e1 join equipos as e2 on e1.nombre<>e2.nombre; select e1.nombre,e2.nombre,e1.barrio as sede from equipos as e1 cross join equipos as e2 where e1.nombre>e2.nombre;