71 - Autocombinación |
Una agencia matrimonial almacena la información de sus clientes en una tabla llamada "clientes". 1- Elimine la tabla si existe y créela: if object_id('clientes') is not null drop table clientes; 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 enterior 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
if object_id('clientes') is not null drop table clientes; 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 informacion de los distintos equipos que jugarán. 1- Elimine la tabla, si existe y créela nuevamente: if object_id('equipos') is not null drop table equipos; 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'); 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 registros) 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 registros)
if object_id('equipos') is not null drop table equipos; 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;