consultas_bdmusica

6

Click here to load reader

description

Consultas a una base de datos, la base de datos la podeis descargar previamente, el nombre del documento es bdmusica.txt, una vez descargada la importais a vuestro SGBD y ya podeis probar cada una de las consultas propuestas en este documento. A mi me pareció interesantísimo cuando lo hice, la verdad, disfruté.

Transcript of consultas_bdmusica

Page 1: consultas_bdmusica

Práctica 2 – ASGBD

1. ¿Cuántos discos hay?

SELECT COUNT(*) AS 'Total discos' FROM disco;

2. Selecciona el nombre de los grupos que no sean de España.SELECT nombre 

FROM grupo WHERE pais NOT LIKE "Espa?a";

3. Obtener el título de las canciones con más de 5 minutos de duración.

SELECT titulo FROM cancion 

WHERE duracion > 5;

4. Según los datos en la base de datos, obtener la lista de las distintas funciones que se puedenrealizar en un grupo.

SELECT funcion FROM pertenece 

GROUP BY funcion;

5. Selecciona el nombre y la sede de los clubes de fans con más de 500 socios.

SELECT nombre,sede FROM club 

WHERE num > 500;

6. Obtener el nombre y la sede de cada club de fans de grupos de España así como el nombre delgrupo al que admiran.

SELECT c.nombre AS club, sede, g.nombre AS grupo FROM club c, grupo g 

WHERE cod_gru IN (SELECT cod 

FROM grupo WHERE pais 

LIKE 'Espa?a') AND c.cod_gru = g.cod;

7. Obtener el nombre de los artistas que pertenezcan a un grupo de España.

SELECT a.nombre, g.nombre FROM artista a 

JOIN pertenece p JOIN grupo g on a.dni = p.dni 

AND p.cod = g.cod WHERE g.pais LIKE "Espa?a";

Page 2: consultas_bdmusica

8. Obtener el nombre de los discos que contienen alguna canción que dure más de 5 minutos.

SELECT DISTINCT nombre FROM disco d,esta e 

WHERE d.cod = e.cod AND e.can 

IN (SELECT cod FROM cancion 

WHERE duracion > 5);

9. Obtener los nombres de las canciones que dan nombre al disco en el que aparecen.

SELECT titulo FROM cancion c,esta e,disco d 

WHERE c.cod = e.can AND e.cod = d.cod 

AND c.titulo = d.nombre;

10. Obtener los nombres de compañías y direcciones postales de aquellas compañías que hangrabado algún disco que empiece por ‘A’.

SELECT c.nombre AS companyia, c.dir AS direccion FROM disco d, companyia c 

WHERE d.cod_comp = c.cod AND d.nombre 

LIKE "A%";

11. Obtener el nombre de los discos del grupo más viejo.

SELECT nombre FROM disco 

WHERE cod_gru = (SELECT cod 

FROM grupo ORDER BY fecha ASC 

LIMIT 1);

12. Obtener el nombre de los discos grabados por grupos con club de fans con más de 5000personas.

SELECT nombre FROM disco 

WHERE cod_gru IN (SELECT DISTINCT g.cod 

FROM grupo g, club c WHERE g.cod = c.cod_gru 

AND c.num > 5000);

Page 3: consultas_bdmusica

13. Obtener el nombre de los clubes con mayor número de fans indicando ese número.

SELECT nombre AS club, num AS fans FROM club 

ORDER BY num DESC;

14. Obtener el título de las canciones de mayor duración indicando la duración.

SELECT titulo, duracion FROM cancion 

ORDER BY duracion DESC;

15. Obtener el nombre de las compañías discográficas que no han trabajado con grupos españoles.

SELECT DISTINCT c.nombre FROM companyia c, disco d 

WHERE c.cod = d.cod_comp AND d.cod_gru NOT IN (SELECT cod 

FROM grupo WHERE pais 

LIKE "Espa?a");

16. Obtener el nombre de las compañías discográficas que solo han trabajado con grupos españoles.

SELECT DISTINCT c.nombre FROM companyia c, disco d 

WHERE c.cod = d.cod_comp AND d.cod_gru NOT 

IN (SELECT cod FROM grupo 

WHERE pais NOT LIKE "Espa?a");

17. Obtener el nombre y la dirección de aquellas compañías discográficas que hayan grabado todos los discos de algún grupo.INSERT INTO grupo VALUES(7,'grupo de prueba','date()','Francia'); //PRIMERO CREO UN GRUPO QUE SOLO SE RELACIONE CON UNA COMPAÑIAINSERT INTO disco VALUES(19,'disco de prueba','date()',5,7); //AHORA INSERTO UN DISCO DE ESE GRUPO//AHORA TENGO UN GRUPO CUYAS CANCIONES HAN SIDO GRABADAS POR UNA //ÚNICA COMPAÑIA, POR DEFECTO LA DB NO TIENE NINGÚN GRUPO ASÍ.SELECT c.nombre,c.dir AS direccion,COUNT(d.cod_comp) AS companyias 

FROM disco d,companyia c WHERE d.cod_comp = c.cod 

GROUP BY cod_gru HAVING companyias = 1;

Page 4: consultas_bdmusica

18. Obtener el nombre de los grupos que sean de España y la suma de sus fans.SELECT SUM(c.num) AS fans, g.nombre AS grupo 

FROM club c,grupo g WHERE cod_gru = g.cod 

AND cod_gru IN (SELECT cod 

FROM grupo WHERE pais 

LIKE "Espa?a") GROUP BY grupo;

19. Obtener para cada grupo con más de dos componentes el nombre y el número de componentes del grupo.SELECT g.nombre,COUNT(dni) AS componentes 

FROM pertenece p, grupo g WHERE p.cod=g.cod 

GROUP BY p.cod HAVING componentes >2 

ORDER BY componentes;

20. Obtener el número de discos de cada grupo.

SELECT g.nombre, COUNT(d.cod) AS discos FROM disco d, grupo g 

WHERE g.cod = d.cod_gru GROUP BY cod_gru;

21. Obtener el número de canciones que ha grabado cada compañía discográfica y su dirección.SELECT c.nombre AS Compañia,c.dir AS dirección,COUNT(ca.cod) AS canciones 

FROM companyia c,disco d,esta e,cancion ca WHERE c.cod = d.cod_comp 

AND d.cod = e.cod AND e.can = ca.cod 

GROUP BY c.nombre;

22. Obtener los nombre de los artistas de grupos con clubes de fans de más de 500 personas y que el grupo sea de Inglaterra.

SELECT g.nombre AS Grupo, a.nombre AS artista FROM grupo g, pertenece p, artista a 

WHERE g.cod = p.cod AND p.dni = a.dni 

AND g.cod IN (SELECT DISTINCT g.cod AS 'Grupo' 

FROM grupo g,club c WHERE pais 

LIKE "Inglaterra" AND g.cod = c.cod_gru 

AND c.num > 500);

Page 5: consultas_bdmusica

23. Obtener el título de las canciones de todos los discos del grupo U2.

SELECT c.titulo AS Títulos FROM grupo g,disco d,esta e,cancion c 

WHERE g.cod=d.cod_gru AND d.cod=e.cod 

AND e.can=c.cod;

24. El dúo dinámico por fin se jubila; para sustituirles se pretende hacer una selección sobre todos los pares de artistas de grupos españoles distintos tales que el primero sea voz y el segundo guitarra. Obtener dicha selección.

SELECT a.nombre, p.funcion, ar.nombre, pe.funcion FROM artista a,artista ar, pertenece p,pertenece pe 

WHERE a.dni = p.dni AND ar.dni = pe.dni 

AND p.funcion LIKE 'voz' 

AND pe.funcion LIKE 'guitarra' 

AND p.cod IN (SELECT cod 

FROM grupo WHERE pais 

LIKE "Espa?a") AND pe.cod 

IN (SELECT cod FROM grupo 

WHERE pais LIKE "Espa?a");

25. Obtener el nombre de los artistas que pertenecen a más de un grupo.

SELECT a.nombre, COUNT(g.cod) AS "pertenece a", g.nombre AS Grupo FROM artista a,pertenece p,grupo g 

WHERE a.dni=p.dni AND p.cod=g.cod 

GROUP BY a.nombre HAVING COUNT(g.cod)>1;

26. Obtener el título de la canción de mayor duración si es única.

SELECT titulo FROM cancion 

GROUP BY titulo HAVING COUNT(titulo)=1 

ORDER BY duracion DESC LIMIT 1;

//SI ES ÚNICA LA CANCION

Page 6: consultas_bdmusica

SELECT titulo FROM cancion 

GROUP BY duracion HAVING COUNT(duracion)=1 

ORDER BY duracion DESC LIMIT 1;

//SI ES ÚNICA LA DURACIÓN

27. Obtener el décimo (debe haber sólo 9 por encima de él) club con mayor número de fansindicando ese número.

SELECT * FROM club 

ORDER BY num DESC LIMIT 9,1;

28. Obtener el nombre de los artistas que tengan la función de bajo en un único grupo y que además éste tenga más de dos miembros.

SELECT a.nombre FROM artista a,pertenece p 

WHERE a.dni = p.dni AND p.funcion 

LIKE "bajo" AND p.cod 

IN (SELECT p.cod FROM pertenece p, artista a 

WHERE p.dni = a.dni GROUP BY p.cod 

HAVING COUNT(a.nombre) > 2) GROUP BY a.nombre 

HAVING COUNT(cod)=1;

29. ¿Cuál es la compañía discográfica que más canciones ha grabado?

SELECT c.nombre,SUM(e.can) AS canciones FROM companyia c, disco d,esta e 

WHERE c.cod = d.cod_comp AND d.cod = e.cod 

GROUP BY c.nombre ORDER BY canciones DESC 

LIMIT 1;