Last active
February 5, 2024 10:12
-
-
Save eduardogpg/20e6ca903de70d444f7c02028925a27e to your computer and use it in GitHub Desktop.
public_sentences.sql
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- SCHEMA | |
DROP TABLE IF EXISTS project_employees; | |
DROP TABLE IF EXISTS projects; | |
DROP TABLE IF EXISTS employees; | |
CREATE TABLE IF NOT EXISTS employees ( | |
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | |
first_name VARCHAR(100) NOT NULL, | |
last_name VARCHAR(100) NOT NULL, | |
email VARCHAR(100) NOT NULL, | |
hire_at DATE, | |
salary DECIMAL(10,2) NOT NULL, | |
status ENUM('active', 'inactive') DEFAULT 'active', | |
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP | |
); | |
CREATE TABLE IF NOT EXISTS projects( | |
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | |
title VARCHAR(100) NOT NULL, | |
description TEXT, | |
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP | |
); | |
CREATE TABLE IF NOT EXISTS project_employees( | |
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, | |
project_id INT UNSIGNED NOT NULL, | |
employee_id INT UNSIGNED NOT NULL, | |
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, | |
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE, | |
FOREIGN KEY (employee_id) REFERENCES employees(id) ON DELETE CASCADE | |
); | |
-- Uno a uno | |
-- Uno a muchos | |
-- Muchos a muchos (Tabla puente necesaria) *** | |
INSERT INTO projects (title, description) VALUES | |
('Project 1', 'Description Project 1'), | |
('Project 2', 'Description Project 2'), | |
('Project 3', 'Description Project 3'), | |
('Project 4', 'Description Project 4'), | |
('Project 5', 'Description Project 5'); | |
INSERT INTO employees (id, first_name, last_name, email, hire_at, salary, created_at, status) | |
VALUES | |
(1, 'John', 'Doe', '[email protected]', '2022-01-10', 50000.00, NOW(), 'active'), | |
(2, 'Jane', 'Smith', '[email protected]', '2022-02-15', 55000.00, NOW(), 'active'), | |
(3, 'Michael', 'Johnson', '[email protected]', '2022-03-20', 60000.00, NOW(), 'inactive'), | |
(4, 'Emily', 'Williams', '[email protected]', '2022-04-25', 52000.00, NOW(), 'active'), | |
(5, 'William', 'Brown', '[email protected]', '2022-05-30', 48000.00, NOW(), 'active'), | |
(6, 'Olivia', 'Jones', '[email protected]', '2022-06-05', 53000.00, NOW(), 'active'), | |
(7, 'James', 'Davis', '[email protected]', '2022-07-10', 55000.00, NOW(), 'active'), | |
(8, 'Emma', 'Miller', '[email protected]', '2022-08-15', 60000.00, NOW(), 'active'), | |
(9, 'Benjamin', 'Garcia', '[email protected]', '2022-09-20', 49000.00, NOW(), 'active'), | |
(10, 'Sophia', 'Martinez', '[email protected]', '2022-10-25', 54000.00, NOW(), 'active'), | |
(11, 'Liam', 'Rodriguez', '[email protected]', '2022-11-30', 51000.00, NOW(), 'active'), | |
(12, 'Ava', 'Lopez', '[email protected]', '2022-12-05', 59000.00, NOW(), 'active'), | |
(13, 'Henry', 'Hernandez', '[email protected]', '2023-01-10', 50000.00, NOW(), 'inactive'), | |
(14, 'Mia', 'Gonzalez', '[email protected]', '2023-02-15', 55000.00, NOW(), 'active'), | |
(15, 'Alexander', 'Perez', '[email protected]', '2023-03-20', 60000.00, NOW(), 'active'), | |
(16, 'Ella', 'Wilson', '[email protected]', '2023-04-25', 52000.00, NOW(), 'active'), | |
(17, 'Daniel', 'Moore', '[email protected]', '2023-05-30', 48000.00, NOW(), 'active'), | |
(18, 'Grace', 'Taylor', '[email protected]', '2023-06-05', 53000.00, NOW(), 'active'), | |
(19, 'Michael', 'Jackson', '[email protected]', '2023-07-10', 55000.00, NOW(), 'active'), | |
(20, 'Chloe', 'White', '[email protected]', '2023-08-15', 60000.00, NOW(), 'active'), | |
(21, 'William', 'Harris', '[email protected]', '2023-09-20', 49000.00, NOW(), 'inactive'), | |
(22, 'Sophia', 'Clark', '[email protected]', '2023-10-25', 54000.00, NOW(), 'active'), | |
(23, 'Ethan', 'Lewis', '[email protected]', '2023-11-30', 51000.00, NOW(), 'active'), | |
(24, 'Isabella', 'Walker', '[email protected]', '2023-12-05', 59000.00, NOW(), 'active'), | |
(25, 'James', 'Young', '[email protected]', '2024-01-10', 50000.00, NOW(), 'active'), | |
(26, 'Avery', 'Wright', '[email protected]', '2024-02-15', 55000.00, NOW(), 'active'), | |
(27, 'Logan', 'Martin', '[email protected]', '2024-03-20', 60000.00, NOW(), 'active'), | |
(28, 'Sophia', 'Hall', '[email protected]', '2024-04-25', 52000.00, NOW(), 'active'), | |
(29, 'Henry', 'Allen', '[email protected]', '2024-01-19', 48000.00, NOW(), 'active'), | |
(30, 'Olivia', 'Baker', '[email protected]', '2024-01-19', 53000.00, NOW(), 'active'); | |
INSERT INTO project_employees(project_id, employee_id) VALUES | |
(1, 1), (1, 2), | |
(2, 1), (2, 4), | |
(3, 1), (3, 2); | |
-- JOIN (LEFT, RIGHT, INNER) | |
-- Obten el nombre completo de todos los empleados que ganen más de 5000 al mes | |
-- y que tengan 3 o más proyectos asignados | |
WITH empleados_con_proyectos AS ( -- CTE | |
SELECT | |
employees.id, | |
COUNT(*) as total | |
FROM employees | |
INNER JOIN project_employees ON employees.id = project_employees.employee_id | |
GROUP BY employees.id | |
HAVING total >= 3 | |
) | |
SELECT | |
CONACT(employees.first_name, ' ', employees.last_name) AS full_name, | |
FROM employees | |
WHERE id IN (SELECT id FROM empleados_con_proyectos) | |
WHERE employees.salary > 5000; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment