🧑‍💼 1. EMPLOYEE ANALYSIS

1️⃣ Show First And Last Names Of Employees

SELECT first_name, last_name
FROM employees;

2️⃣ Employees Whose Last Name Starts With “S”

SELECT emp_no, first_name, last_name
FROM employees
WHERE last_name LIKE 'S%';

3️⃣ Names With Exactly 5 Characters

SELECT first_name, last_name
FROM employees
WHERE first_name LIKE '_____'; -- 5 guiones bajos representan 5 caracteres exactos

4️⃣ First 10 Employees By Hire Date

SELECT emp_no, first_name, last_name, hire_date
FROM employees
ORDER BY hire_date ASC
LIMIT 10;

5️⃣ Employees Hired On The Same Day

SELECT hire_date, COUNT(emp_no) AS empleados_contratados
FROM employees
GROUP BY hire_date
ORDER BY hire_date;

6️⃣ Years In Which Employees Were Hired

SELECT YEAR(hire_date) AS anio_contratacion, COUNT(emp_no) AS total_contratados
FROM employees
GROUP BY YEAR(hire_date)
ORDER BY anio_contratacion;

7️⃣ Hired Before 1995 Or In Department d007

SELECT e.emp_no, e.first_name, e.last_name, e.hire_date, d.dept_no
FROM employees e
JOIN dept_emp d ON e.emp_no = d.emp_no
WHERE e.hire_date < '1995-01-01' OR d.dept_no = 'd007';

8️⃣ Peak Hiring Day

SELECT hire_date, COUNT(emp_no) AS contrataciones
FROM employees
GROUP BY hire_date
ORDER BY contrataciones DESC
LIMIT 1;

9️⃣ Days Worked Since Hire Date

SELECT emp_no, first_name, last_name, hire_date,
       DATEDIFF(CURDATE(), hire_date) AS dias_trabajados
FROM employees;

🔟 Employee Count By Gender And Department

SELECT 
    Dp.dept_name, 
    COUNT(CASE WHEN E.gender = 'M' THEN 1 END) AS hombres,
    COUNT(CASE WHEN E.gender = 'F' THEN 1 END) AS mujeres
FROM employees E
JOIN dept_emp D ON E.emp_no = D.emp_no
JOIN departments Dp ON D.dept_no = Dp.dept_no
WHERE D.to_date = '9999-01-01'
GROUP BY Dp.dept_name
ORDER BY dept_name;

1️⃣1️⃣ ROW_NUMBER, RANK By Hire Date

SELECT *, ROW_NUMBER() OVER (ORDER BY hire_date ASC) AS 'Orden contratacion'
FROM employees;

SELECT *, RANK() OVER (ORDER BY hire_date ASC) AS 'Orden contratacion'
FROM employees;

SELECT *, DENSE_RANK() OVER (ORDER BY hire_date ASC) AS 'Orden contratacion'
FROM employees;

1️⃣2️⃣ REGEXP Pattern Matching On Names

SELECT emp_no, first_name, last_name
FROM employees
WHERE first_name REGEXP 'aa+';

SELECT emp_no, first_name, last_name
FROM employees
WHERE first_name REGEXP 'Is..c';

SELECT emp_no, first_name, last_name
FROM employees
WHERE first_name REGEXP '[x-z]';

SELECT emp_no, first_name, last_name
FROM employees
WHERE first_name REGEXP 'e{2}';

1️⃣3️⃣ Trigger To Prevent Future Hire Dates

DELIMITER //

CREATE TRIGGER trg_prevent_future_hire_date
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
    IF NEW.hire_date > CURDATE() THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Error: No se puede insertar un empleado con fecha futura';
    END IF;
END //

DELIMITER ;

-- Prueba del trigger (debería lanzar error)
-- INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date)
-- VALUES (10002, '1995-07-20', 'Ana', 'Gómez', 'F', '2030-01-01');
Scroll al inicio