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";
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);
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;
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);
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
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;