Ejercicios SQL Manipulacion Datos Solucion PDF
Ejercicios SQL Manipulacion Datos Solucion PDF
Ejercicios SQL Manipulacion Datos Solucion PDF
1. La Tienda de Informática
/* Con BETWEEN */
SELECT * FROM ARTICULOS WHERE Precio BETWEEN 60 AND 120
1.4. Obtener el nombre y el precio en pesetas (es decir, el precio en euros
multiplicado por 166'386).
SELECT Nombre, Precio * 166.386 AS PrecioPtas FROM ARTICULOS
1.5. Seleccionar el precio medio de todos los productos.
SELECT AVG(Precio) FROM ARTICULOS
1.6. Obtener el precio medio de los artículos cuyo código de fabricante sea 2.
SELECT AVG(Precio) FROM ARTICULOS WHERE Fabricante = 2
1.7. Obtener el número de artículos cuyo precio sea mayor o igual a 180 €.
SELECT COUNT(*) FROM ARTICULOS WHERE Precio >= 180
1.8. Obtener el nombre y precio de los artículos cuyo precio sea mayor o igual a 180
€ y ordenarlos descendentemente por precio, y luego ascendentemente por
nombre.
SELECT Nombre, Precio
FROM ARTICULOS
WHERE Precio >= 180
ORDER BY Precio DESC, Nombre
1.9. Obtener un listado completo de artículos, incluyendo por cada articulo los
datos del articulo y de su fabricante.
SELECT *
FROM ARTICULOS, FABRICANTES
WHERE ARTICULOS.Fabricante = FABRICANTES.Codigo
/* Con IN */
SELECT *
FROM EMPLEADOS
WHERE Apellidos IN ('López', 'Pérez')
2.5. Obtener todos los datos de los empleados que trabajan para el departamento
14.
SELECT * FROM EMPLEADOS WHERE Departamento = 14
2.6. Obtener todos los datos de los empleados que trabajan para el departamento
37 y para el departamento 77.
/* Con OR */
SELECT *
FROM EMPLEADOS
WHERE Departamento = 37 OR Departamento = 77
/* Con IN */
SELECT *
FROM EMPLEADOS
WHERE Departamento IN (37,77)
2.7. Obtener todos los datos de los empleados cuyo apellido comience por 'P'.
SELECT * FROM EMPLEADOS WHERE Apellidos LIKE 'P%'
2.8. Obtener el presupuesto total de todos los departamentos.
SELECT SUM(Presupuesto) FROM DEPARTAMENTOS
/* Con Subconsulta */
SELECT Nombre
FROM PELICULAS
WHERE Codigo NOT IN (
SELECT Pelicula FROM SALAS WHERE Pelicula IS NOT NULL )
4.6. Añadir una nueva película 'Uno, Dos, Tres', para mayores de 7 años.
INSERT INTO PELICULAS(Nombre,CalificacionEdad)
VALUES('Uno, Dos, Tres', 7)
4.7. Hacer constar que todas las películas no calificadas han sido calificadas 'no
recomendables para menores de 13 años'.
UPDATE PELICULAS SET CalificacionEdad=13
WHERE CalificacionEdad IS NULL
4.8. Eliminar todas las salas que proyectan películas recomendadas para todos los
públicos.
DELETE FROM SALAS
WHERE Pelicula IN (
SELECT Codigo FROM PELICULAS WHERE CalificacionEdad = 0)
/* Con subconsulta */
SELECT Nombre
FROM PROVEEDORES
WHERE Id IN (
SELECT IdProveedor FROM SUMINISTRA WHERE CodigoPieza = 1)
6.5. Obtener los nombres de las piezas suministradas por el proveedor cuyo código
es HAL.
/* Sin subconsulta */
SELECT PIEZAS.Nombre
FROM PIEZAS, SUMINISTRA
WHERE PIEZAS.Codigo = SUMINISTRA.CodigoPieza
AND SUMINISTRA.IdProveedor = 'HAL'
/* Con subconsulta IN */
SELECT Nombre
FROM PIEZAS
WHERE Codigo IN (
SELECT CodigoPieza
FROM SUMINISTRA
WHERE IdProveedor = 'HAL')
7.1. Sacar una relación completa de los científicos asignados a cada proyecto.
Mostrar DNI, nombre del científico, identificador del proyecto y nombre del
proyecto.
SELECT DNI, NomApels, Id, Nombre
FROM CIENTIFICOS C, ASIGNADO_A A, PROYECTO P
WHERE C.DNI = A.Cientifico
AND A.Proyecto = P.Id
7.2. Obtener el número de proyectos al que está asignado cada científico (mostrar
el DNI y el nombre).
SELECT DNI, NomApels, COUNT(Proyecto)
FROM CIENTIFICOS LEFT JOIN ASIGNADO_A
ON CIENTIFICOS.DNI = ASIGNADO_A.Cientifico
GROUP BY DNI, NomApels
7.3. Obtener el número de científicos asignados a cada proyecto (mostrar el
identificador de proyecto y el nombre del proyecto).
SELECT Id, Nombre, COUNT(Proyecto)
FROM PROYECTO LEFT JOIN ASIGNADO_A
ON PROYECTO.Id = ASIGNADO_A.Proyecto
GROUP BY Id, Nombre
7.4. Obtener el número de horas de dedicación de cada científico.
SELECT DNI,NomApels, SUM(Horas)
FROM CIENTIFICOS C, ASIGNADO_A A, PROYECTO P
WHERE C.DNI = A.Cientifico
AND A.Proyecto = P.Id
GROUP BY DNI,NomApels
9.1. Obtener el DNI y nombre de aquellos investigadores que han realizado más de
una a reserva.
/* Juntando tablas */
SELECT I.DNI, NomApels
FROM INVESTIGADORES I LEFT JOIN RESERVA R
ON R.DNI = I.DNI
GROUP BY I.DNI, NomApels
HAVING COUNT(R.DNI) > 1
/* Con subconsulta */
SELECT DNI, NomApels
FROM INVESTIGADORES
WHERE DNI IN (
SELECT DNI FROM RESERVA GROUP BY DNI HAVING COUNT(*) > 1 )
/* Con EXISTS */
SELECT DNI, NomApels
FROM INVESTIGADORES I
WHERE EXISTS (
SELECT *
FROM RESERVA R, EQUIPOS E
WHERE R.NumSerie = E.NumSerie
AND R.DNI = I.DNI
AND I.Facultad <> E.Facultad )
9.4. Obtener los nombres de las facultades en las que ningún investigador ha
realizado una reserva.
SELECT Nombre
FROM FACULTAD
WHERE Codigo IN (
SELECT Facultad
FROM INVESTIGADORES I LEFT JOIN RESERVA R
ON I.DNI = R.DNI
GROUP BY Facultad
HAVING COUNT(R.DNI) = 0 )
/* Con subconsulta IN */
SELECT NumSerie, Nombre
FROM EQUIPOS
WHERE NumSerie NOT IN ( SELECT NumSerie FROM RESERVA )
/* Con EXISTS */
SELECT NumSerie, Nombre
FROM EQUIPOS E
WHERE NOT EXISTS (
SELECT * FROM RESERVA R WHERE R.NumSerie = E.NumSerie )