Sie sind auf Seite 1von 6

Prctica 2 ASGBD 1. Cuntos discos hay? SELECTCOUNT(*)AS'Totaldiscos' FROMdisco; 2. Selecciona el nombre de los grupos que no sean de Espaa.

. SELECTnombre FROMgrupo WHEREpaisNOTLIKE"Espa?a"; 3. Obtener el ttulo de las canciones con ms de 5 minutos de duracin. SELECTtitulo FROMcancion WHEREduracion>5; 4. Segn los datos en la base de datos, obtener la lista de las distintas funciones que se pueden realizar en un grupo. SELECTfuncion FROMpertenece GROUPBYfuncion; 5. Selecciona el nombre y la sede de los clubes de fans con ms de 500 socios. SELECTnombre,sede FROMclub WHEREnum>500; 6. Obtener el nombre y la sede de cada club de fans de grupos de Espaa as como el nombre del grupo al que admiran. SELECTc.nombreASclub,sede,g.nombreASgrupo FROMclubc,grupog WHEREcod_gru IN(SELECTcod FROMgrupo WHEREpais LIKE'Espa?a') ANDc.cod_gru=g.cod; 7. Obtener el nombre de los artistas que pertenezcan a un grupo de Espaa. SELECTa.nombre,g.nombre FROMartistaa JOINpertenecep JOINgrupogona.dni=p.dni ANDp.cod=g.cod WHEREg.paisLIKE"Espa?a";

8. Obtener el nombre de los discos que contienen alguna cancin que dure ms de 5 minutos. SELECTDISTINCTnombre FROMdiscod,estae WHEREd.cod=e.cod ANDe.can IN(SELECTcod FROMcancion WHEREduracion>5); 9. Obtener los nombres de las canciones que dan nombre al disco en el que aparecen. SELECTtitulo FROMcancionc,estae,discod WHEREc.cod=e.can ANDe.cod=d.cod ANDc.titulo=d.nombre; 10. Obtener los nombres de compaas y direcciones postales de aquellas compaas que han grabado algn disco que empiece por A. SELECTc.nombreAScompanyia,c.dirASdireccion FROMdiscod,companyiac WHEREd.cod_comp=c.cod ANDd.nombre LIKE"A%"; 11. Obtener el nombre de los discos del grupo ms viejo. SELECTnombre FROMdisco WHEREcod_gru =(SELECTcod FROMgrupo ORDERBYfechaASC LIMIT1); 12. Obtener el nombre de los discos grabados por grupos con club de fans con ms de 5000 personas. SELECTnombre FROMdisco WHEREcod_gru IN(SELECTDISTINCTg.cod FROMgrupog,clubc WHEREg.cod=c.cod_gru ANDc.num>5000);

13. Obtener el nombre de los clubes con mayor nmero de fans indicando ese nmero. SELECTnombreASclub,numASfans FROMclub ORDERBYnumDESC; 14. Obtener el ttulo de las canciones de mayor duracin indicando la duracin. SELECTtitulo,duracion FROMcancion ORDERBYduracionDESC; 15. Obtener el nombre de las compaas discogrficas que no han trabajado con grupos espaoles. SELECTDISTINCTc.nombre FROMcompanyiac,discod WHEREc.cod=d.cod_compANDd.cod_gruNOT IN(SELECTcod FROMgrupo WHEREpais LIKE"Espa?a"); 16. Obtener el nombre de las compaas discogrficas que solo han trabajado con grupos espaoles. SELECTDISTINCTc.nombre FROMcompanyiac,discod WHEREc.cod=d.cod_comp ANDd.cod_gruNOT IN(SELECTcod FROMgrupo WHEREpais NOTLIKE"Espa?a"); 17. Obtener el nombre y la direccin de aquellas compaas discogrficas que hayan grabado todos los discos de algn grupo. INSERTINTOgrupoVALUES(7,'grupodeprueba','date()','Francia'); //PRIMEROCREOUNGRUPOQUESOLOSERELACIONECONUNACOMPAIA INSERTINTOdiscoVALUES(19,'discodeprueba','date()',5,7); //AHORAINSERTOUNDISCODEESEGRUPO //AHORATENGOUNGRUPOCUYASCANCIONESHANSIDOGRABADASPORUNA //NICACOMPAIA,PORDEFECTOLADBNOTIENENINGNGRUPOAS. SELECTc.nombre,c.dirASdireccion,COUNT(d.cod_comp)AScompanyias FROMdiscod,companyiac WHEREd.cod_comp=c.cod GROUPBYcod_gru HAVINGcompanyias=1;

18. Obtener el nombre de los grupos que sean de Espaa y la suma de sus fans. SELECTSUM(c.num)ASfans,g.nombreASgrupo FROMclubc,grupog WHEREcod_gru=g.cod ANDcod_gru IN(SELECTcod FROMgrupo WHEREpais LIKE"Espa?a") GROUPBYgrupo; 19. Obtener para cada grupo con ms de dos componentes el nombre y el nmero de componentes del grupo. SELECTg.nombre,COUNT(dni)AScomponentes FROMpertenecep,grupog WHEREp.cod=g.cod GROUPBYp.cod HAVINGcomponentes>2 ORDERBYcomponentes; 20. Obtener el nmero de discos de cada grupo. SELECTg.nombre,COUNT(d.cod)ASdiscos FROMdiscod,grupog WHEREg.cod=d.cod_gru GROUPBYcod_gru; 21. Obtener el nmero de canciones que ha grabado cada compaa discogrfica y su direccin. SELECTc.nombreASCompaia,c.dirASdireccin,COUNT(ca.cod)AS canciones FROMcompanyiac,discod,estae,cancionca WHEREc.cod=d.cod_comp ANDd.cod=e.cod ANDe.can=ca.cod GROUPBYc.nombre; 22. Obtener los nombre de los artistas de grupos con clubes de fans de ms de 500 personas y que el grupo sea de Inglaterra. SELECTg.nombreASGrupo,a.nombreASartista FROMgrupog,pertenecep,artistaa WHEREg.cod=p.cod ANDp.dni=a.dni ANDg.cod IN(SELECTDISTINCTg.codAS'Grupo' FROMgrupog,clubc WHEREpais LIKE"Inglaterra" ANDg.cod=c.cod_gru ANDc.num>500);

23. Obtener el ttulo de las canciones de todos los discos del grupo U2. SELECTc.tituloASTtulos FROMgrupog,discod,estae,cancionc WHEREg.cod=d.cod_gru ANDd.cod=e.cod ANDe.can=c.cod; 24. El do dinmico por fin se jubila; para sustituirles se pretende hacer una seleccin sobre todos los pares de artistas de grupos espaoles distintos tales que el primero sea voz y el segundo guitarra. Obtener dicha seleccin. SELECTa.nombre,p.funcion,ar.nombre,pe.funcion FROMartistaa,artistaar,pertenecep,pertenecepe WHEREa.dni=p.dni ANDar.dni=pe.dni ANDp.funcion LIKE'voz' ANDpe.funcion LIKE'guitarra' ANDp.cod IN(SELECTcod FROMgrupo WHEREpais LIKE"Espa?a") ANDpe.cod IN(SELECTcod FROMgrupo WHEREpais LIKE"Espa?a"); 25. Obtener el nombre de los artistas que pertenecen a ms de un grupo. SELECTa.nombre,COUNT(g.cod)AS"pertenecea",g.nombreASGrupo FROMartistaa,pertenecep,grupog WHEREa.dni=p.dni ANDp.cod=g.cod GROUPBYa.nombre HAVINGCOUNT(g.cod)>1; 26. Obtener el ttulo de la cancin de mayor duracin si es nica. SELECTtitulo FROMcancion GROUPBYtitulo HAVINGCOUNT(titulo)=1 ORDERBYduracionDESC LIMIT1; //SIESNICALACANCION

SELECTtitulo FROMcancion GROUPBYduracion HAVINGCOUNT(duracion)=1 ORDERBYduracionDESC LIMIT1; //SIESNICALADURACIN 27. Obtener el dcimo (debe haber slo 9 por encima de l) club con mayor nmero de fans indicando ese nmero. SELECT* FROMclub ORDERBYnumDESC LIMIT9,1; 28. Obtener el nombre de los artistas que tengan la funcin de bajo en un nico grupo y que adems ste tenga ms de dos miembros. SELECTa.nombre FROMartistaa,pertenecep WHEREa.dni=p.dni ANDp.funcion LIKE"bajo" ANDp.cod IN(SELECTp.cod FROMpertenecep,artistaa WHEREp.dni=a.dni GROUPBYp.cod HAVINGCOUNT(a.nombre)>2) GROUPBYa.nombre HAVINGCOUNT(cod)=1; 29. Cul es la compaa discogrfica que ms canciones ha grabado? SELECTc.nombre,SUM(e.can)AScanciones FROMcompanyiac,discod,estae WHEREc.cod=d.cod_comp ANDd.cod=e.cod GROUPBYc.nombre ORDERBYcancionesDESC LIMIT1;