Introducción práctica a bases de datos relacionales y SQL
Jan 19, 2025
¡Bienvenido! Es un placer tenerte por aquí.
En este post vamos a ver cómo configurar el gestor de bases de datos MySQL y a crear una base de datos para almacenar información de empleados.
¡Todo ello en tan solo 5 minutos! Una vez hecho esto, te dejaré algunos ejercicios de SQL con su solución para que puedas practicar.
¡Vamos a ello! 🚀
Contenidos
- Instalación y configuración de MySQL.
- Ejercicios (enunciado).
- Ejercicios (solución).
✅Instalación de MySQL
Si quieres aprender a trabajar con bases de datos, primero habrá que conseguir tener acceso a una, ¿no?
Además, me imagino lo que estarás pensando, "esto va a ser muy complicado", "me voy a llevar toda la tarde para hacer esto", "esto solo lo saben hacer personas que saben de informática"...
¡En absoluto! Dame 5 minutos y vas tener tu propia base de datos funcionando en tu equipo.
Lo que vamos a hacer es lo siguiente:
- Descarga el instalador de la base de datos: https://dev.mysql.com/downloads/.
- Vamos a instalar MySQL Server y MySQL Workbench.
- Vamos a crear una base de datos para almacenar datos de empleados. Para ello, descarga esta carpeta comprimida (click aquí).
Nota: Algunas ventanas del instalador de MySQL pueden cambiar según la versión del instalador. Cuando comiences, asegúrate de tener marcadas para instalar como mínimo MySQL Server y MySQL Workbench.
¡Mira el vídeo para ver cómo realizar cada uno de los pasos!
🤔Ejercicios (Enunciado)
¿Ya tienes instalado MySQL y has creado la base de datos de empleados? ¡Genial! Aquí te dejo algunos ejercicios de SQL para que puedas practicar. Puedes ver la solución al final del post.
- (Tabla employees) Obtener una lista de todos los empleados en la tabla employees.
- (Tabla employees) Obtener los nombres (first_name) y apellidos (last_name) de todos los empleados.
- (Tabla dept_emp) Obtener el número de empleado (emp_no) y el número de departamento (dept_no) de los empleados que trabajan en el departamento con el código 'd001'.
- (Tabla employees) Obtener los números de empleado (emp_no) y la fecha de contratación (hire_date) de todos los empleados contratados después del 1 de enero de 2000.
- Obtener el número de empleado (emp_no) y el número de departamento (dept_no) de todos los gerentes de departamento.
- Obtener el título (title) actual del empleado con el número 10001.
- Obtener el salario (salary) actual del empleado con el número 10001.
- Obtener los números de empleado (emp_no), nombres (first_name) y apellidos (last_name) de los empleados cuyo apellido es 'Simmel'.
- Contar el número de empleados en cada departamento.
- Contar el número de empleados por género (gender).
- Obtener los títulos (title) más comunes en la empresa, junto con la cantidad de empleados que tienen cada título.
- Obtener los números de departamento (dept_no) y el número de gerentes por departamento, mostrando solo aquellos departamentos que tengan más de 2 gerentes.
- Obtener departamentos que tienen más de 5 empleados.
- Obtener los nombres (first_name, last_name) de todos los empleados junto con sus títulos actuales.
- Obtener los nombres (first_name, last_name) de todos los empleados junto con el nombre del departamento al que pertenecen.
- Obtener los nombres (first_name, last_name) de todos los gerentes junto con el nombre del departamento y las fechas de inicio y fin de su gestión.
💡Ejercicios (Solución)
- (Tabla employees) Obtener una lista de todos los empleados en la tabla employees.
SELECT * FROM employees.employees;
- (Tabla employees) Obtener los nombres (first_name) y apellidos (last_name) de todos los empleados.
SELECT first_name, last_name FROM employees.employees;
- (Tabla dept_emp) Obtener el número de empleado (emp_no) y el número de departamento (dept_no) de los empleados que trabajan en el departamento con el código 'd001'.
SELECT emp_no, dept_no FROM employees.dept_emp WHERE dept_no = 'd001';
- (Tabla employees) Obtener los números de empleado (emp_no) y la fecha de contratación (hire_date) de todos los empleados contratados después del 1 de enero de 2000.
SELECT emp_no, hire_date FROM employees.employees WHERE hire_date > '2000-01-01';
- Obtener el número de empleado (emp_no) y el número de departamento (dept_no) de todos los gerentes de departamento.
SELECT emp_no, dept_no FROM employees.dept_manager;
- Obtener el título (title) actual del empleado con el número 10001.
SELECT title FROM employees.titles WHERE emp_no = 10001 AND to_date = '9999-01-01';
- Obtener el salario (salary) actual del empleado con el número 10001.
SELECT salary FROM employees.salaries WHERE emp_no = 10001 AND to_date = '9999-01-01';
- Obtener los números de empleado (emp_no), nombres (first_name) y apellidos (last_name) de los empleados cuyo apellido es 'Simmel'.
SELECT emp_no, first_name, last_name FROM employees.employees WHERE last_name = 'Simmel';
- Contar el número de empleados en cada departamento.
SELECT dept_no, COUNT(emp_no) AS num_empleados FROM employees.dept_emp GROUP BY dept_no;
- Contar el número de empleados por género (gender).
SELECT gender, COUNT(emp_no) AS num_empleados FROM employees.employees GROUP BY gender;
- Obtener los títulos (title) más comunes en la empresa, junto con la cantidad de empleados que tienen cada título.
SELECT title, COUNT(emp_no) AS num_empleados FROM employees.titles GROUP BY title ORDER BY num_empleados DESC;
- Obtener los números de departamento (dept_no) y el número de gerentes por departamento, mostrando solo aquellos departamentos que tengan más de 2 gerentes.
SELECT dept_no, COUNT(emp_no) AS num_gerentes FROM employees.dept_manager GROUP BY dept_no HAVING COUNT(emp_no) > 2;
- Obtener departamentos que tienen más de 5 empleados.
SELECT dept_no, COUNT(emp_no) AS num_empleados FROM employees.dept_emp GROUP BY dept_no HAVING COUNT(emp_no) > 5;
- Obtener los nombres (first_name, last_name) de todos los empleados junto con sus títulos actuales.
SELECT e.first_name, e.last_name, t.title FROM employees e INNER JOIN titles t ON e.emp_no = t.emp_no WHERE t.to_date =
'9999-01-01';
- Obtener los nombres (first_name, last_name) de todos los empleados junto con el nombre del departamento al que pertenecen.
SELECT e.first_name, e.last_name, d.dept_name FROM employees e INNER JOIN dept_emp de ON e.emp_no = de.emp_no INNER JOIN departments d ON de.dept_no = d.dept_no;
- Obtener los nombres (first_name, last_name) de todos los gerentes junto con el nombre del departamento y las fechas de inicio y fin de su gestión.
SELECT e.first_name, e.last_name, d.dept_name, dm.from_date, dm.to_date FROM employees e INNER JOIN dept_manager dm ON e.emp_no = dm.emp_no INNER JOIN departments d ON dm.dept_no = d.dept_no;
🎉Siguientes pasos
Si has completado todos los ejercicios, ¡enhorabuena! Esta batería de ejercicios te habrá permitido tener una idea de qué es una base de datos y cómo puedes trabajar con ella utilizando SQL. Espero que te hayan sido de gran ayuda.
Para seguir profundizando en esta materia, te recomiendo explorar los siguientes aspectos:
- Profundiza en SQL. Estos son ejercicios introductorios, te animo a seguir explorando con ejercicios más avanzados.
- Modelado de datos para crear tus propios diseños de bases de datos y diagramas Entidad Relación.
- Utiliza una base de datos en tu proyecto IT. No hay mejor forma que practicar para dominar.
- Object Relation Mapping (ORM). Por ejemplo, SQL Alchemy, que te permitirá trabajar con bases de datos en tu código de programación de forma cómoda como si fuesen clases y objetos.
¡Nos vemos en la próxima con más y mejor! 😊