Hola a todos, hoy os dejo una serie de ejercicios de consultas MySQL de la base de datos Empleados y departamentos que hemos hecho en el canal de Youtube.
Todos los ejercicios que proponemos están resueltos en este mismo post, intenta hacerlo por ti mismo y si te quedas atascado puedes mirar la solución.
Recuerda, que no tiene por que estar igual tu solución con la del post, el objetivo es que aprendas no que me copies la solución.
Si tienes alguna duda, recuerda que puedes consultarnos escribiendo un comentario en este post o enviándonos un e-mail a administrador@discoduroderoer.es
Aquí os dejo la base de datos con la que vamos a trabajar.
Aquí te dejo un manual sobre como importar la base de datos.
Importar una base de datos o esquema en MySQL desde MySQL Workbench
Os dejo el modelo Entidad – Relación de la base de datos.

Al final de cada ejercicio, os muestro una foto con el resultado esperado.
1. Obtener los datos completos de los empleados.
|
1 2 |
select * from empleados; |

2. Obtener los datos completos de los departamentos.
|
1 2 |
select * from departamentos; |

3. Obtener los datos de los empleados con cargo ‘Secretaria’.
|
1 2 3 |
select * from empleados where lower(cargoE)='secretaria'; |
4. Obtener el nombre y salario de los empleados.
|
1 2 |
select nomemp, salemp from empleados; |

5. Obtener los datos de los empleados vendedores, ordenado por nombre.
|
1 2 3 4 |
select * from empleados where lower(cargoE)='vendedor' order by nomEmp asc; |

6. Listar el nombre de los departamentos.
|
1 2 |
select distinct nombreDPto from departamentos; |

7. Obtener el nombre y cargo de todos los empleados, ordenado por salario.
|
1 2 3 |
select nomEmp, cargoE, salemp from empleados order by salemp; |

8. Listar los salarios y comisiones de los empleados del departamento 2000, ordenado por comisión.
|
1 2 3 |
select salemp, comisione from empleados order by comisionE; |

9. Listar todas las comisiones.
|
1 2 |
select distinct comisione from empleados; |

10. Obtener el valor total a pagar que resulta de sumar a los empleados del departamento 3000 una bonificación de 500.000, en orden alfabético del empleado
|
1 2 3 4 |
select nomemp, salemp, (salemp+500000) as 'pago estimado' from empleados where codDepto = '3000' order by nomemp; |

11. Obtener la lista de los empleados que ganan una comisión superior a su sueldo.
|
1 2 3 |
select nomemp,salemp,comisione from empleados where comisionE > salEmp; |

12. Listar los empleados cuya comisión es menor o igual que el 30% de su sueldo.
|
1 2 3 |
select nomemp,salemp,comisione from empleados where comisionE <= (salEmp*0.3); |

13.Elabore un listado donde para cada fila, figure ‘Nombre’ y ‘Cargo’ antes del valor respectivo para cada empleado.
|
1 2 |
select nomemp as 'Nombre', cargoe as 'Cargo' from empleados; |

14. Hallar el salario y la comisión de aquellos empleados cuyo número de documento de identidad es superior al ‘19.709.802’.
|
1 2 3 |
select nDIEmp,salemp,comisione from empleados where nDIEmp > '19.709.802'; |

15. Muestra los empleados cuyo nombre empiece entre las letras J y Z (rango).
Liste estos empleados y su cargo por orden alfabético.
|
1 2 3 4 |
select nomemp, cargoe from empleados where lower(nomemp) > 'j' and lower(nomemp) < 'z' order by nomemp; |

16. Listar el salario, la comisión, el salario total (salario + comisión), documento de identidad del empleado y nombre, de aquellos empleados que tienen comisión superior a 1.000.000, ordenar el informe por el número del documento de identidad
|
1 2 3 4 5 6 7 |
select salemp, comisione, (salemp + comisione) as 'Salario total', ndiemp from empleados where comisione > 1000000 order by ndiemp; |

17. Obtener un listado similar al anterior, pero de aquellos empleados que NO tienen comisión
|
1 2 3 4 5 6 7 |
select salemp, comisione, (salemp + comisione) as 'Salario total', ndiemp from empleados where comisione = 0 order by ndiemp; |

18. Hallar los empleados cuyo nombre no contiene la cadena «MA»
|
1 2 3 |
select nomEmp from empleados where lower(nomEmp) not like '%ma%'; |

19. Obtener los nombres de los departamentos que no sean “Ventas” ni “Investigación” NI
‘MANTENIMIENTO’.
|
1 2 3 |
select nombreDpto from departamentos where lower(nombreDpto) not in ('ventas', 'investigación', 'mantenimiento'); |

20. Obtener el nombre y el departamento de los empleados con cargo ‘Secretaria’ o ‘Vendedor’, que no trabajan en el departamento de “PRODUCCION”, cuyo salario es superior a $1.000.000, ordenados por fecha de incorporación.
|
1 2 3 4 5 |
select e.nomemp, d.nombreDpto from empleados e, departamentos d where e.codDepto=d.codDepto and (lower(e.cargoE)='secretaria' or lower(e.cargoE)='vendedor') and lower(d.nombreDpto)<>'produccción' and e.salEmp > 1000000 order by e.fecIncorporacion; |

21. Obtener información de los empleados cuyo nombre tiene exactamente 11 caracteres
|
1 2 3 |
select * from empleados where char_length(nomemp) = 11; |

22. Obtener información de los empleados cuyo nombre tiene al menos 11 caracteres
|
1 2 3 |
select * from empleados where char_length(nomemp) < 11; |

23. Listar los datos de los empleados cuyo nombre inicia por la letra ‘M’, su salario es mayor a $800.000 o reciben comisión y trabajan para el departamento de ‘VENTAS’
|
1 2 3 4 |
select e.nomEmp, d.nombreDpto, e.salEmp from empleados e, departamentos d where e.codDepto=d.codDepto and lower(e.nomEmp) like 'm%' and (e.salEmp > 800000 or e.comisionE>0) and lower(d.nombreDpto)<>'ventas'; |

24. Obtener los nombres, salarios y comisiones de los empleados que reciben un salario situado entre la mitad de la comisión la propia comisión.
|
1 2 3 |
select nomEmp, salEmp, comisionE from empleados where salEmp between (comisionE/2) and comisionE; |

25. Mostrar el salario más alto de la empresa.
|
1 2 3 |
select nomemp, max(salEmp) as 'Salario mayor' from empleados; |

26. Mostrar cada una de las comisiones y el número de empleados que las reciben. Solo si tiene comisión.
|
1 2 |
select comisionE, count(*) as 'Num empleados' from empleados group by comisionE having comisionE > 0; |

27. Mostrar el nombre del último empleado de la lista por orden alfabético.
|
1 2 |
select max(nomemp) as 'Mayor alfabeticamente' from empleados; |

28. Hallar el salario más alto, el más bajo y la diferencia entre ellos.
|
1 2 |
select max(salemp) as 'Salario mayor', min(salemp) as 'Salario menor', max(salemp) - min(salemp) as 'Diferencia' from empleados; |

29. Mostrar el número de empleados de sexo femenino y de sexo masculino, por departamento.
|
1 2 3 |
select codDepto, sexemp, count(*) from empleados group by codDepto, sexemp; |

30. Hallar el salario promedio por departamento.
|
1 2 3 |
select codDepto, avg(salemp) from empleados group by codDepto; |

31. Mostrar la lista de los empleados cuyo salario es mayor o igual que el promedio de la empresa. Ordenarlo por departamento.
|
1 2 3 |
select nDIEmp, salEmp from empleados where salemp >= (select avg(salemp) from empleados); |

32. Hallar los departamentos que tienen más de tres empleados. Mostrar el número de empleados de esos departamentos.
|
1 2 3 4 5 |
select d.codDepto, d.nombreDpto, count(*) as 'Num empleados' from departamentos d, empleados e where d.codDepto=e.codDepto group by d.codDepto having count(*) >= 3; |

33. Mostrar el código y nombre de cada jefe, junto al número de empleados que dirige. Solo los que tengan mas de dos empleados (2 incluido).
|
1 2 3 4 5 6 |
select j.nDIEmp, j.nomEmp, count(*) as 'Num Empleados' from empleados e, empleados j where e.jefeID=j.nDIEmp group by j.nomEmp having count(*)>=2 order by count(*) desc; |

34. Hallar los departamentos que no tienen empleados
|
1 2 3 4 5 |
select d.codDepto, d.nombreDpto from departamentos d, empleados e where d.codDepto=e.codDepto group by d.codDepto having count(*) = 0; |

35. Mostrar el nombre del departamento cuya suma de salarios sea la más alta, indicando el valor de la suma.
|
1 2 3 4 5 6 |
select d.nombreDpto, sum(e.salEmp) from departamentos d, empleados e where d.codDepto=e.codDepto group by d.nombreDpto order by sum(e.salEmp) desc limit 1; |

Os dejo videos donde realizo estas consultas:
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Hola, Me han pedido que liste a los empleados con sus salarios, pero que los salarios se reflejen en asteriscos *. Cómo hago para que los salarios aparezcan en asteriscos en vez de números. gracias
Agradeciendo tu aportación para incrementar nuestro conocimiento, solo un favor tendras el script de la base de datos para ver como se declaran los foreign key de las tablas, agraxdezco de antemano