68 - Vistas |
Un club dicta cursos de distintos deportes. Almacena la información en varias tablas. El director no quiere que los empleados de administración conozcan la estructura de las tablas ni algunos datos de los profesores y socios, por ello se crean vistas a las cuales tendrán acceso. 1- Crear las tablas: create table socios( documento char(8) not null, nombre varchar(40), domicilio varchar(30), primary key (documento) ); create table profesores( documento char(8) not null, nombre varchar(40), domicilio varchar(30), primary key (documento) ); create table cursos( numero serial, deporte varchar(20), dia varchar(15), documentoprofesor char(8), primary key (numero) ); create table inscriptos( documentosocio char(8) not null, numero smallint not null, matricula char(1), primary key (documentosocio,numero) ); 2- Ingrese algunos registros para todas las tablas: insert into socios values('30000000','Fabian Fuentes','Caseros 987'); insert into socios values('31111111','Gaston Garcia','Guemes 65'); insert into socios values('32222222','Hector Huerta','Sucre 534'); insert into socios values('33333333','Ines Irala','Bulnes 345'); insert into profesores values('22222222','Ana Acosta','Avellaneda 231'); insert into profesores values('23333333','Carlos Caseres','Colon 245'); insert into profesores values('24444444','Daniel Duarte','Sarmiento 987'); insert into profesores values('25555555','Esteban Lopez','Sucre 1204'); insert into cursos(deporte,dia,documentoprofesor) values('tenis','lunes','22222222'); insert into cursos(deporte,dia,documentoprofesor) values('tenis','martes','22222222'); insert into cursos(deporte,dia,documentoprofesor) values('natacion','miercoles','22222222'); insert into cursos(deporte,dia,documentoprofesor) values('natacion','jueves','23333333'); insert into cursos(deporte,dia,documentoprofesor) values('natacion','viernes','23333333'); insert into cursos(deporte,dia,documentoprofesor) values('futbol','sabado','24444444'); insert into cursos(deporte,dia,documentoprofesor) values('futbol','lunes','24444444'); insert into cursos(deporte,dia,documentoprofesor) values('basquet','martes','24444444'); insert into inscriptos values('30000000',1,'s'); insert into inscriptos values('30000000',3,'n'); insert into inscriptos values('30000000',6,null); insert into inscriptos values('31111111',1,'s'); insert into inscriptos values('31111111',4,'s'); insert into inscriptos values('32222222',8,'s'); 3- Cree una vista en la que aparezca el nombre y documento del socio, el deporte, el día y el nombre del profesor. 4- Muestre la información contenida en la vista. 5- Realice una consulta a la vista donde muestre la cantidad de socios inscriptos en cada deporte ordenados por cantidad. 6- Muestre (consultando la vista) los cursos (deporte y día) para los cuales no hay inscriptos. 7- Muestre los nombres de los socios que no se han inscripto en ningún curso (consultando la vista) 8- Muestre (consultando la vista) los profesores que no tienen asignado ningún deporte aún. 9- Muestre (consultando la vista) el nombre y documento de los socios que deben matrículas. 10- Consulte la vista y muestre los nombres de los profesores y los días en que asisten al club para dictar sus clases. 11- Muestre la misma información anterior pero ordenada por día. 12- Muestre todos los socios que son compañeros en tenis los lunes.Ver solución
drop table if exists secciones socios; drop table if exists empleados profesores; drop table if exists empleados cursos; drop table if exists empleados inscriptos; create table socios( documento char(8) not null, nombre varchar(40), domicilio varchar(30), primary key (documento) ); create table profesores( documento char(8) not null, nombre varchar(40), domicilio varchar(30), primary key (documento) ); create table cursos( numero serial, deporte varchar(20), dia varchar(15), documentoprofesor char(8), primary key (numero) ); create table inscriptos( documentosocio char(8) not null, numero smallint not null, matricula char(1), primary key (documentosocio,numero) ); insert into socios values('30000000','Fabian Fuentes','Caseros 987'); insert into socios values('31111111','Gaston Garcia','Guemes 65'); insert into socios values('32222222','Hector Huerta','Sucre 534'); insert into socios values('33333333','Ines Irala','Bulnes 345'); insert into profesores values('22222222','Ana Acosta','Avellaneda 231'); insert into profesores values('23333333','Carlos Caseres','Colon 245'); insert into profesores values('24444444','Daniel Duarte','Sarmiento 987'); insert into profesores values('25555555','Esteban Lopez','Sucre 1204'); insert into cursos(deporte,dia,documentoprofesor) values('tenis','lunes','22222222'); insert into cursos(deporte,dia,documentoprofesor) values('tenis','martes','22222222'); insert into cursos(deporte,dia,documentoprofesor) values('natacion','miercoles','22222222'); insert into cursos(deporte,dia,documentoprofesor) values('natacion','jueves','23333333'); insert into cursos(deporte,dia,documentoprofesor) values('natacion','viernes','23333333'); insert into cursos(deporte,dia,documentoprofesor) values('futbol','sabado','24444444'); insert into cursos(deporte,dia,documentoprofesor) values('futbol','lunes','24444444'); insert into cursos(deporte,dia,documentoprofesor) values('basquet','martes','24444444'); insert into inscriptos values('30000000',1,'s'); insert into inscriptos values('30000000',3,'n'); insert into inscriptos values('30000000',6,null); insert into inscriptos values('31111111',1,'s'); insert into inscriptos values('31111111',4,'s'); insert into inscriptos values('32222222',8,'s'); create view vista_club as select s.nombre as socio,s.documento as docsocio,s.domicilio as domsocio,c.deporte,dia, p.nombre as profesor, matricula from socios as s full join inscriptos as i on s.documento=i.documentosocio full join cursos as c on i.numero=c.numero full join profesores as p on c.documentoprofesor=p.documento; select *from vista_club; select deporte,dia,count(socio) as cantidad from vista_club where deporte is not null group by deporte,dia order by cantidad; select deporte,dia from vista_club where socio is null and deporte is not null; select socio from vista_club where deporte is null and socio is not null; select profesor from vista_club where deporte is null and profesor is not null; select socio, docsocio from vista_club where deporte is not null and matricula <> 's'; select distinct profesor,dia from vista_club where profesor is not null; select distinct profesor,dia from vista_club where profesor is not null order by dia; select socio from vista_club where deporte='tenis' and dia='lunes';