-- 1) Obtener los apellidos de los empleados
SELECT apellido FROM empleados;
-- 2) Obtener los apellidos de los empleados sin repeticiones.
SELECT DISTINCT apellido FROM empleados;
-- 3) Obtener todos los datos de los empleados que se apellidan 'Lopez'.
SELECT * FROM empleados WHERE apellido = 'Lopez';
-- 4) Obtener todos los datos de los empleados que se apellidan 'Lopez' y los que se
apellidan 'Henry'.
/* Con OR */
SELECT * FROM empleados
WHERE apellido = 'Lopez' OR apellido = 'Henry';
/* Con IN */
SELECT * FROM empleados
WHERE apellido IN ('Lopez', 'Henry');
-- 5) Obtener todos los datos de los empleados que trabajan para el departamento 4.
SELECT * FROM empleados
WHERE id_departamento = 4;
-- 6) Obtener todos los datos de los empleados que trabajan para el departamento 1 y
para el departamento 3.
/* Con OR */
SELECT * FROM empleados
WHERE id_departamento = 1 OR id_departamento = 3;
/* Con IN */
SELECT * FROM empleados
WHERE id_departamento IN (1,3);
-- 7) Obtener todos los datos de los empleados cuyo apellido comience por 'H'.
SELECT * FROM empleados
WHERE apellido LIKE 'H%';
-- 8) Obtener el presupuesto total de todos los departamentos.
SELECT SUM(presupuesto) as presupuesto_total FROM departamentos;
-- 9) Obtener el número de empleados en cada departamento.
SELECT id_departamento, COUNT(*) as numero_empleados
FROM empleados
GROUP BY id_departamento;
/* 10) Obtener un listado completo de empleados, incluyendo por cada empleado los datos
del empleado
y de su departamento. */
SELECT * FROM empleados as e
INNER JOIN departamentos as d ON e.id_departamento = d.id_departamento;
/* 11) Obtener un listado completo de empleados, incluyendo el nombre y apellido del
empleado junto al nombre y
presupuesto de su departamento. */
SELECT e.nombre, apellido, d.nombre, presupuesto
FROM empleados as e
INNER JOIN departamentos as d ON e.id_departamento = d.id_departamento;
/* 12) Obtener los nombres y apellidos de los empleados que trabajen en departamentos
cuyo
presupuesto sea mayor de 10000000*/
/* Sin subconsulta */
SELECT e.nombre, apellido
FROM empleados as e
INNER JOIN departamentos as d
ON e.id_departamento = d.id_departamento
AND d.presupuesto > 10000000;
/* Con subconsulta */
SELECT nombre, apellido FROM empleados
WHERE id_departamento IN (SELECT id_departamento FROM departamentos
WHERE presupuesto > 10000000);
/* 13) Obtener los datos de los departamentos cuyo presupuesto es superior al
presupuesto medio
de todos los departamentos. */
SELECT * FROM departamentos
WHERE presupuesto > (SELECT AVG(presupuesto)
FROM departamentos);
/* 14) Obtener los nombres (únicamente los nombres) de los departamentos que tienen más
de 5 empleados. */
/* Con subconsulta */
SELECT nombre FROM departamentos
WHERE id_departamento IN
(SELECT id_departamento
FROM empleados
GROUP BY id_departamento
HAVING COUNT(*) > 5);
/* Con INNER JOIN */
SELECT d.nombre
FROM empleados as e
INNER JOIN departamentos as d ON e.id_departamento = d.id_departamento
GROUP BY d.nombre
HAVING COUNT(*) > 5;
/* 15) Añadir un nuevo departamento: 'Calidad', con presupuesto de 30000000 y
id_departamento 5.
Añadir un empleado vinculado al departamento recién creado: Nombre: Esther, Apellido:
Vazquez, DNI: 89267109 */
INSERT INTO departamentos
VALUES ( 5 , 'Calidad' , 30000000);
INSERT INTO empleados
VALUES (24, 'Esther' , 'Vazquez' , 89267109 , 5);
/* 16) Aplicar un recorte presupuestario del 10 % a todos los departamentos. */
UPDATE departamentos SET presupuesto = presupuesto * 0.9;
/* 17) Reasignar a los empleados del departamento de Desarrollo Productivo y
Tecnológico (id_departamento = 1)
al departamento de Calidad (id_departamento = 5). */
UPDATE empleados SET id_departamento = 5 WHERE id_departamento = 1;
-- 18) Despedir (eliminar) a todos los empleados que trabajan para el departamento de
Calidad (id_departamento = 5).
DELETE FROM empleados
WHERE id_departamento = 5;
-- 19) Despedir a todos los empleados que trabajen para departamentos cuyo presupuesto
sea superior a los 15000000.
DELETE FROM empleados
WHERE id_departamento IN
(SELECT id_departamento FROM departamentos
WHERE presupuesto >= 15000000);
-- 20) Despedir a todos los empleados.
DELETE FROM empleados;
-- Aclaracion sobre la variable SQL_SAFE_UPDATES de MySQL
/* Un variable de sistema muy conocida dentro de los programadores de SQL es
SQL_SAFE_UPDATES, que sirve para poder
actualizar los datos en la base datos.
Para ello, utilizaremos el comando SET para modificar su valor booleano. Cuando la
variable tiene el valor 1,
el sistema no nos dejará modificar valores en la base de datos. Por eso mismo, cada vez
que queremos modificar
la base de datos debes asignar el valor asignado debe ser 0 en esta variable en MySQL
*/
set sql_safe_updates = 0;
select @@sql_safe_updates;