47 - Combinación externa completa (full join) |
Un club dicta clases de distintos deportes. Almacena la información en una tabla llamada "deportes" en la cual incluye el nombre del deporte y el nombre del profesor y en otra tabla llamada "inscriptos" que incluye el documento del socio que se inscribe, el deporte y si la matricula está paga o no. 1- Cree las tablas: create table deportes( codigo serial, nombre varchar(30), profesor varchar(30), primary key (codigo) ); create table inscriptos( documento char(8), codigodeporte smallint not null, matricula char(1) --'s'=paga 'n'=impaga ); 2- Ingrese algunos registros para ambas tablas: insert into deportes(nombre,profesor) values('tenis','Marcelo Roca'); insert into deportes(nombre,profesor) values('natacion','Marta Torres'); insert into deportes(nombre,profesor) values('basquet','Luis Garcia'); insert into deportes(nombre,profesor) values('futbol','Marcelo Roca'); insert into inscriptos values('22222222',3,'s'); insert into inscriptos values('23333333',3,'s'); insert into inscriptos values('24444444',3,'n'); insert into inscriptos values('22222222',2,'s'); insert into inscriptos values('23333333',2,'s'); insert into inscriptos values('22222222',4,'n'); insert into inscriptos values('22222222',5,'n'); 3- Muestre todos la información de la tabla "inscriptos", y consulte la tabla "deportes" para obtener el nombre de cada deporte (6 registros) 4- Empleando un "left join" con "deportes" obtenga todos los datos de los inscriptos (7 registros) 5- Obtenga la misma salida anterior empleando un "rigth join". 6- Muestre los deportes para los cuales no hay inscriptos, empleando un "left join" (1 registro) 7- Muestre los documentos de los inscriptos a deportes que no existen en la tabla "deportes" (1 registro) 8- Emplee un "full join" para obtener todos los datos de ambas tablas, incluyendo las inscripciones a deportes inexistentes en "deportes" y los deportes que no tienen inscriptos (8 registros)Ver solución
drop table if exists deportes; drop table if exists inscriptos; create table deportes( codigo serial, nombre varchar(30), profesor varchar(30), primary key (codigo) ); create table inscriptos( documento char(8), codigodeporte smallint not null, matricula char(1) --'s'=paga 'n'=impaga ); insert into deportes(nombre,profesor) values('tenis','Marcelo Roca'); insert into deportes(nombre,profesor) values('natacion','Marta Torres'); insert into deportes(nombre,profesor) values('basquet','Luis Garcia'); insert into deportes(nombre,profesor) values('futbol','Marcelo Roca'); insert into inscriptos values('22222222',3,'s'); insert into inscriptos values('23333333',3,'s'); insert into inscriptos values('24444444',3,'n'); insert into inscriptos values('22222222',2,'s'); insert into inscriptos values('23333333',2,'s'); insert into inscriptos values('22222222',4,'n'); insert into inscriptos values('22222222',5,'n'); select documento,d.nombre,matricula from inscriptos as i join deportes as d on codigodeporte=codigo; select documento,d.nombre,matricula from inscriptos as i left join deportes as d on codigodeporte=codigo; select documento,d.nombre,matricula from deportes as d right join inscriptos as i on codigodeporte=codigo; select nombre from deportes as d left join inscriptos as i on codigodeporte=codigo where codigodeporte is null; select documento from inscriptos as i left join deportes as d on codigodeporte=codigo where codigo is null; select documento,nombre,profesor,matricula from inscriptos as i full join deportes as d on codigodeporte=codigo;