EJERCICIO 1: Dada la siguiente estructura, realizar las consultas abajo
detalladas.
1. Obtener todos los datos de los empleados que se apellidan López y los que se apellidan
Pérez.
SELECT *
FROM empleados
WHERE apellidos IN ('López' , 'Pérez');
2. Obtener todos los datos de los empleados que trabajan para el departamento 37 y para el
departamento 77.
SELECT *
FROM empleados
WHERE codigo IN (37, 77);
3. Obtener todos los datos de los empleados cuyo apellido comience por P.
SELECT *
FROM empleados
WHERE apellidos LIKE 'P%';
4. Obtener el presupuesto total de todos los departamentos.
SELECT SUM(presupuesto)
FROM departamentos;
-- Si queremos el presupuesto de juntar todos los departamentos
SELECT presupuesto, nombre
FROM departamentos;
-- Si queremos el presupuesto de cada departamento por separado.
5. Obtener el número de empleados en cada departamento.
SELECT COUNT(*) AS NumeroEmpleados, departamentos
FROM empleados
GROUP BY departamentos;
6. Obtener un listado completo de empleados, incluyendo el nombre y apellidos del empleado,
junto al nombre y presupuesto de su departamento.
SELECT dni, [Link], apellidos, codigo, [Link], presupuesto
FROM empleados e
JOIN departamentos d
ON codigo = departamentos;
7. Obtener los nombre y apellidos de los empleados que trabajen en departamentos, cuyo
presupuesto sea mayor de 60.000€.
SELECT [Link], apellidos
FROM empleados e
JOIN departamentos d
ON codigo = departamentos
WHERE presupuesto > 60000;
8. Obtener los datos de los departamentos cuyo presupuesto es superior al presupuesto medio
de todos los departamentos.
SELECT codigo, presupuesto
FROM departamentos
GROUP BY codigo, presupuesto
HAVING presupuesto > (SELECT AVG(presupuesto) FROM departamentos);
9. Obtener los nombres (únicamente los nombres) de los departamentos que tienen más de dos
empleados
SELECT [Link]
FROM departamentos d
JOIN empleados e
ON codigo = departamentos
GROUP BY departamentos
HAVING COUNT(*) > 2;
EJERCICIO 2: Dada la siguiente estructura, realizar las consultas abajo
detalladas.
1. Obtener el valor medio de las cajas de cada almacén.
SELECT AVG(valor), almacen
FROM cajas
GROUP BY almacen;
2. Obtener los códigos de los almacenes en los cuales el valor medio de las cajas sea superior a
150€.
SELECT almacen
FROM cajas
GROUP BY almacen
HAVING AVG(valor) > 150;
3. Obtener el número de referencia de cada caja junto con el nombre de la ciudad en el que se
encuentra.
SELECT [Link], [Link]
FROM cajas c
JOIN almacenes a
ON [Link] = [Link];
4. Obtener los códigos de los almacenes que están saturados (los almacenes donde el número
de cajas es superior a la capacidad).
SELECT [Link]
FROM almacenes a
JOIN cajas c
ON [Link] = [Link]
GROUP BY [Link], [Link]
HAVING COUNT([Link]) > [Link];
EJERCICIO 3: Dada la siguiente estructura, realizar las consultas abajo
detalladas.
1. Obtener el precio medio al que se nos suministran las piezas.
SELECT AVG(precio), codigoPieza
FROM suministra
GROUP BY codigoPieza;
2. Obtener los nombre de los proveedores que suministran la pieza 1.
SELECT [Link]
FROM suministra s
JOIN proveedores pro
ON [Link] = [Link]
JOIN piezas p
ON [Link] = [Link]
WHERE [Link] = 1;
3. Obtener los nombre de los proveedores que suministran las piezas más caras, indicando el
nombre de la pieza y el precio al que la suministran.
SELECT [Link], [Link]
FROM suministra sum
JOIN proveedores pro
ON [Link] = [Link]
WHERE precio = (SELECT MAX(precio) FROM suministra);
4. Obtener los nombre de la piezas suministradas por el proveedor cuyo código es HAL.
SELECT [Link]
FROM suministra sum
JOIN proveedores pro
ON [Link] = [Link]
JOIN piezas p
ON [Link] = [Link]
WHERE id = 'HAL';
EJERCICIO 4: Dada la siguiente estructura, realizar las consultas abajo
detalladas.
1. Obtener 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 [Link], [Link], [Link], [Link]
FROM cientificos c
JOIN asignado_a a
ON [Link] = [Link]
JOIN proyecto p
ON [Link] = [Link];
2. Obtener el número de proyectos (mayor que 0) al que está asignado cada científico (mostrar
el DNI y el nombre).
SELECT [Link], [Link], COUNT([Link])
FROM cientificos c
JOIN asignado_a a
ON [Link] = [Link]
JOIN proyecto p
ON [Link] = [Link]
GROUP BY dni, proyecto
HAVING COUNT(proyecto) > 0;
3. Obtener el DNI y nombre de los científicos que se dedican a más de un proyecto y cuya
dedicación media a cada proyecto sea superior a las 80 horas.
SELECT [Link], [Link]
FROM cientificos c
JOIN asignado_a a ON [Link] = [Link]
JOIN (
SELECT proyecto, AVG(horas) AS avgHoras
FROM proyecto
GROUP BY proyecto
HAVING AVG(horas) > 80
) AS avg_proyectos
ON [Link] = avg_proyectos.proyecto
GROUP BY [Link], [Link]
HAVING COUNT([Link]) > 1;