Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Scripts-SQL-teoria/queries.sql
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
177 lines (151 sloc)
4.59 KB
This file contains 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
/* Consultas, para probar las consultas una a una debe ejecutar | |
Shift+Control+F9 con el cursor en la línea que contiene la consulta */ | |
/* Employees con un sueldo inferior a 2000€ */ | |
SELECT * | |
FROM Employees | |
WHERE salary < 2000; | |
/* Employees con un sueldo inferior a 2000€ */ | |
SELECT nameEmp, salary | |
FROM Employees | |
WHERE salary < 2000; | |
/* Fechas de alta y baja de los empeados como una lista */ | |
SELECT ALL startDate, endDate | |
FROM Employees; | |
/* Fechas de alta y baja de los empeados como un conjunto */ | |
SELECT DISTINCT startDate, endDate | |
FROM Employees; | |
/* Conjunto de Employees con un salary en [2000,3000] */ | |
/* Opción 1 */ | |
SELECT DISTINCT nameEmp, salary | |
FROM Employees | |
WHERE salary >=2000 AND salary <=3000; | |
/* Opción 2 */ | |
SELECT DISTINCT nameEmp, salary | |
FROM Employees | |
WHERE salary BETWEEN 2000 AND 3000; | |
/* Conjunto de Employees con salary de 1000€, 2500€ o 3000€ */ | |
SELECT DISTINCT nameEmp, salary | |
FROM Employees | |
WHERE salary IN (1000,2500,3000); | |
/* Lista de Employees con una 'o' en la segunda posición de su nameEmp | |
o que son jefes */ | |
SELECT * | |
FROM Employees | |
WHERE nameEmp LIKE '_o%' OR bossId IS NULL; | |
/* Lista de Employees ordenada por departmentId y luego por nameEmp */ | |
SELECT * | |
FROM Employees | |
ORDER BY departmentId, nameEmp ASC; | |
/* Producto cartesiano de Employees y Departments */ | |
SELECT * | |
FROM Employees, Departments; | |
/* Employees y Departments en los que trabajan. Natural join */ | |
/* Opción 1: */ | |
SELECT nameEmp, salary, startDate, nameDep | |
FROM Employees E, Departments D | |
WHERE E.departmentId=D.departmentId; | |
/* Opción 2: */ | |
SELECT nameEmp, salary, startDate, nameDep | |
FROM Employees NATURAL JOIN Departments; | |
/* Join parciales */ | |
/* Para hacer una prueba borramos el departamento de Ana */ | |
UPDATE Employees SET departmentId=NULL WHERE employeeId=5; | |
/* En el left join se devuelve a Ana, aunque no tenga departamento */ | |
SELECT nameEmp, salary, startDate, nameDep | |
FROM Employees E | |
LEFT JOIN Departments D | |
ON E.departmentId=D.departmentId; | |
/* En el right join se devuelve el Departamento de Arte, aunque no tenga Employees */ | |
SELECT nameEmp, salary, startDate, nameDep | |
FROM Employees E | |
RIGHT JOIN Departments D | |
ON E.departmentId=D.departmentId; | |
/* Ejemplo de unión de left y right join, devuelve el full join */ | |
SELECT * | |
FROM Employees E | |
LEFT JOIN Departments D | |
ON E.departmentId=D.departmentId | |
UNION | |
SELECT * | |
FROM Employees E | |
RIGHT JOIN Departments D | |
ON E.departmentId=D.departmentId; | |
/* Departments sin Employees */ | |
SELECT * | |
FROM Departments D | |
WHERE NOT EXISTS ( | |
SELECT * FROM Employees E | |
WHERE D.departmentId=E.departmentId | |
); | |
/* Departments con Employees */ | |
SELECT * | |
FROM Departments D | |
WHERE EXISTS ( | |
SELECT * FROM Employees E | |
WHERE D.departmentId=E.departmentId | |
); | |
/* Estadísticas salarys de los Employees */ | |
SELECT COUNT(*), MIN(salary), MAX(salary), AVG(salary), SUM(salary) | |
FROM Employees; | |
/* Estadísticas salarys por departamento */ | |
SELECT departmentId, | |
COUNT(*), | |
AVG(salary) angSalary, | |
AVG(salary * (1+fee)) salaryConfee, | |
SUM(salary) gastosalarys | |
FROM Employees | |
GROUP BY departmentId; | |
/* Estadísticas salarys por departamento con al menos dos empleado*/ | |
SELECT departmentId, | |
COUNT(*), | |
AVG(salary) salaryMedio, | |
AVG(salary * (1+fee)) salaryConfee, | |
SUM(salary) gastosalarys | |
FROM Employees | |
GROUP BY departmentId HAVING COUNT(*)>1; | |
/* Opción 2: Usando la vista EmployeesDepartments */ | |
CREATE OR REPLACE VIEW vEmployeesDepartments AS | |
SELECT * | |
FROM Employees NATURAL JOIN Departments; | |
SELECT nameDep, | |
COUNT(*), | |
AVG(salary) salaryMedio, | |
AVG(salary * (1+fee)) salaryConfee, | |
SUM(salary) gastosalarys | |
FROM vEmployeesDepartments | |
GROUP BY departmentId HAVING COUNT(*)>1; | |
/* Employees con salary mayor que la media de su departamento*/ | |
SELECT * FROM Employees | |
WHERE salary > | |
ALL (SELECT AVG(salary) | |
FROM Employees | |
GROUP BY departmentId); | |
/* Departamento con más Employees */ | |
/* Opción 1 */ | |
SELECT departmentId FROM Employees | |
GROUP BY departmentId HAVING COUNT(*)>= ALL | |
( SELECT COUNT(*) | |
FROM Employees | |
GROUP BY departmentId | |
); | |
/* Opción 2 */ | |
SELECT departmentId FROM Employees | |
GROUP BY departmentId HAVING COUNT(*) = | |
( SELECT MAX(total) FROM | |
( SELECT COUNT(*) AS total | |
FROM Employees | |
GROUP BY departmentId | |
) NumEmployees | |
); | |
/* Vista con las estadísticas de los Employees por Departamento */ | |
CREATE OR REPLACE VIEW vStatEmployees AS | |
SELECT departmentId, | |
COUNT(*) AS numEmployees, | |
AVG(salary) salaryMedio, | |
AVG(salary * (1+fee)) salaryWithfee, | |
SUM(salary) totalSalary | |
FROM Employees | |
GROUP BY departmentId; | |
/* Número de Employees que tiene el departamento con más Employees */ | |
SELECT MAX(numEmployees) | |
FROM vStatEmployees; |