Tarea2 GM16042
Tarea2 GM16042
Tarea2 GM16042
CARNET: GM16042
SELECT
EMPLEADO.EMPLEADO.NOMEM,
EMPLEADO.EMPLEADO.NUMDE
FROM
EMPLEADO.EMPLEADO
WHERE
EMPLEADO.EMPLEADO.NOMEM BETWEEN 'M' AND 'P'
ORDER BY NOMEM, NUMDE ASC
2- Listar los datos de los empleados cuyo nombre inicia por la letra 'M', su salario es mayor a 300 o
reciben comisión, y el nombre de su departamento sea SECTOR SERVICIOS
SELECT
EMPLEADO.EMPLEADO.NUMEM,
EMPLEADO.EMPLEADO.NUMDE,
EMPLEADO.EMPLEADO.EXTEL,
EMPLEADO.EMPLEADO.FECNA,
EMPLEADO.EMPLEADO.FECIN,
EMPLEADO.EMPLEADO.SALAR,
EMPLEADO.EMPLEADO.COMIS,
EMPLEADO.EMPLEADO.NUMHI,
EMPLEADO.EMPLEADO.NOMEM,
EMPLEADO.DEPTO.NOMDE
FROM
EMPLEADO.EMPLEADO
INNER JOIN EMPLEADO.DEPTO ON EMPLEADO.EMPLEADO.NUMDE = EMPLEADO.DEPTO.NUMDE
WHERE
EMPLEADO.EMPLEADO.NOMEM LIKE 'M%' AND
(EMPLEADO.EMPLEADO.SALAR > 300 OR
EMPLEADO.EMPLEADO.COMIS != null) AND DEPTO.NOMDE='SECTOR SERVICIOS'
3. Listar los nombres de los empleados, nombre de los departamentos a los que pertenecen y
nombre del centro.
SELECT
EMPLEADO.NOMEM,
DEPTO.NOMDE,
CENTRO.NOMCE
FROM
EMPLEADO.EMPLEADO
INNER JOIN EMPLEADO.DEPTO ON EMPLEADO.NUMDE = DEPTO.NUMDE
INNER JOIN EMPLEADO.CENTRO ON DEPTO.NUMCE = CENTRO.NUMCE
4. Para cada departamento con presupuesto inferior a 6000(presu=6), hallar el nombre del centro
donde está ubicado y el máximo salario de sus empleados si este excede a 200. Ordenar
alfabéticamente por nombre de departamento y nombre de centro.
SELECT
EMPLEADO.CENTRO.NOMCE,
EMPLEADO.DEPTO.NOMDE,
Max(EMPLEADO.EMPLEADO.SALAR) AS MAXIMO
FROM
EMPLEADO.DEPTO
INNER JOIN EMPLEADO.CENTRO ON EMPLEADO.DEPTO.NUMCE = EMPLEADO.CENTRO.NUMCE
LEFT JOIN EMPLEADO.EMPLEADO ON EMPLEADO.EMPLEADO.NUMDE =
EMPLEADO.DEPTO.NUMDE
WHERE
EMPLEADO.DEPTO.PRESU < 6
GROUP BY
EMPLEADO.DEPTO.NOMDE,
EMPLEADO.CENTRO.NOMCE
HAVING MAX(EMPLEADO.SALAR)>200
5. Hallar por orden alfabético los números de departamentos que dependan de otro, con el
numero del departamento que dependen.
SELECT
DEPTO.NUMDE,
EMPLEADO.DEPTO.NOMDE,
EMPLEADO.DEPTO.DEPDE
FROM
EMPLEADO.DEPTO
WHERE DEPDE IS NOT NULL
ORDER BY DEPTO.NOMDE ASC
6. Hallar los nombres de los departamentos y los nombres de los departamentos de los cuales
dependen.
SELECT
A.NOMDE as DepartamentoIndependiente,
B.NOMDE as DepartamentoDependiente
FROM
EMPLEADO.DEPTO A
LEFT JOIN EMPLEADO.DEPTO B ON A.DEPDE = B.NUMDE
7. Si el departamento 122 está ubicado en calle Alcalá, obtener por orden alfabético los nombres
de aquellos de sus empleados cuyo salario, supere al salario medio de su departamento.
SELECT
EMP.NOMEM,
EMP.SALAR
FROM
EMPLEADO.EMPLEADO EMP
INNER JOIN EMPLEADO.DEPTO ON EMP.NUMDE = EMPLEADO.DEPTO.NUMDE
INNER JOIN EMPLEADO.CENTRO ON EMPLEADO.DEPTO.NUMCE = EMPLEADO.CENTRO.NUMCE
WHERE
EMPLEADO.DEPTO.NUMDE = 122 AND
EMPLEADO.CENTRO.DIRECCION LIKE '%ALCALA%' AND
EMP.SALAR > (SELECT AVG(EMPLEADO.SALAR) AS X FROM
EMPLEADO WHERE
EMPLEADO.NUMDE=122)
ORDER BY
EMP.NOMEM ASC
8. Obtener por orden alfabético los nombres y salarios medios de los departamentos cuyo salario
medio supera al salario medio de la empresa.
SELECT
DEP.NOMDE,
TO_CHAR(AVG(EMP.SALAR),'99999999.99') AS SalrioPromedio
FROM
EMPLEADO.DEPTO DEP
INNER JOIN EMPLEADO EMP ON EMP.NUMDE = DEP.NUMDE
WHERE (SELECT AVG(EMP.SALAR) AS MEDI
FROM
EMPLEADO.DEPTO DEPA
INNER JOIN EMPLEADO EMP ON EMP.NUMDE = DEP.NUMDE
GROUP BY DEP.NOMDE)>
(SELECT AVG(EMPLEADO.SALAR) FROM EMPLEADO )
GROUP BY DEP.NOMDE
ORDER BY DEP.NOMDE ASC
9. Propuesto: Obtener por orden alfabético los nombres de los departamentos ubicados en
MADRID
SELECT
DEP.NOMDE
FROM
DEPTO DEP
INNER JOIN CENTRO CEN ON DEP.NUMCE = CEN.NUMCE
WHERE CEN.DIRECCION LIKE '%MADRID%'
ORDER BY DEP.NOMDE
10. Obtener por orden alfabético los nombres de los departamentos cuyo presupuesto es inferior
a la mitad de la suma de los salarios anuales de sus empleados. Asumir 14 salarios al año.
SELECT
DEP.NOMDE
FROM
EMPLEADO.DEPTO DEP
INNER JOIN EMPLEADO.EMPLEADO ON EMPLEADO.EMPLEADO.NUMDE = DEP.NUMDE
GROUP BY DEP.NOMDE, DEP.PRESU HAVING (DEP.PRESU*1000)<
((SUM(EMPLEADO.SALAR)*14)/2)
ORDER BY
DEP.NOMDE ASC
PARTE II POSTGRES
11. Seleccionar las categorías que tengan más 5 productos. Mostrar el nombre de l a categoría y el
número de productos por categoría.
SELECT
cat.category_name,
COUNT(pro.product_id) as total
FROM
categories cat
INNER JOIN products pro ON pro.category_id = cat.category_id
GROUP BY cat.category_name HAVING COUNT(pro.product_id) > 5
12. Calcular el stock total de los productos por cada categoría. Mostrar el nombre de la Categoría y
el stock por categoría. Solamente las categorías 2, 5 y 8.
SELECT
cat.category_name,
SUM(pro.units_in_stock) as totalStock
FROM
categories cat
INNER JOIN products pro ON pro.category_id = cat.category_id
WHERE cat.category_id IN (2,5,8)
GROUP BY cat.category_name
13. Mostrar el número de órdenes realizadas de cada uno de los clientes por cada mes y año.
SELECT
cus.company_name,
COUNT(ord.order_id) as numOrdenes,
EXTRACT(MONTH FROM ord.order_date) as mes,
EXTRACT(YEAR FROM ord.order_date) as anio
FROM
customers cus
INNER JOIN orders ord ON ord.customer_id = cus.customer_id
GROUP BY cus.company_name, EXTRACT(YEAR FROM ord.order_date), EXTRACT(MONTH FROM
ord.order_date)
14. Seleccionar el nombre de la compañía del cliente, el código de la orden de compra, la fecha de
la orden de compra, código del producto, cantidad pedida del producto, nombre del producto, el
nombre de la compañía proveedora y la ciudad del proveedor.
SELECT
customers.company_name,
orders.order_id,
orders.order_date,
products.product_id,
order_details.quantity,
products.product_name,
suppliers.company_name,
suppliers.city
FROM
customers
INNER JOIN orders ON orders.customer_id = customers.customer_id
INNER JOIN order_details ON order_details.order_id = orders.order_id
INNER JOIN products ON order_details.product_id = products.product_id
INNER JOIN suppliers ON products.supplier_id = suppliers.supplier_id
SELECT
customers.company_name,
orders.order_id,
orders.order_date,
products.product_id,
order_details.quantity,
products.product_name,
suppliers.company_name,
suppliers.city
FROM
customers,orders,products,order_details,suppliers
WHERE orders.customer_id = customers.customer_id
AND order_details.order_id = orders.order_id
AND order_details.product_id = products.product_id
AND products.supplier_id = suppliers.supplier_id
16. Seleccionar todos los empleados que cuentan con un jefe. Y poner nombre del jefe y del
empleado.
SELECT
concat(a.first_name,' ',a.last_name) AS nombrejefe,
concat(b.first_name,' ',b.last_name) AS nombreSubordinado
FROM
employees AS a
INNER JOIN employees b ON b.reports_to = a.employee_id
17 Seleccionar los productos vigentes cuyos precios unitarios están entre 35 y 250, sin stock en
almacén, pertenecientes a las categorías 1, 3, 4, 7 y 8, que son distribuidos por los proveedores, 2,
4, 6, 7, 8 y 9
SELECT
*
FROM
products a
INNER JOIN suppliers b ON b.supplier_id = a.supplier_id
WHERE a.unit_price BETWEEN 35 AND 250
AND A.units_in_stock=0
AND a.category_id IN (1,3,4,7,8)
AND B.supplier_id IN (4,6,7,8,9)
18. Calcular cuántos proveedores existen en cada Ciudad y País, y el nombre del producto que
venden
SELECT
b.country,
COUNT(b.country) as PAIS,
b.city,
COUNT(B.city) as CIUDAD,
a.product_name
FROM
products a
INNER JOIN suppliers b ON b.supplier_id = a.supplier_id
GROUP BY b.country, b.city, a.product_name
PROBAR
SELECT
suppliers.country as pais_o_ciudad,
count(country)
from suppliers
GROUP BY
country
UNION ALL
SELECT
suppliers.city as ciudad,
count(country)
from suppliers
GROUP BY
city
19. Encontrar el producto más caro que existe en la tabla Products sin hacer uso de MAX, order by,
ni LIMIT.
SELECT
*
FROM
products pro
WHERE PRO.unit_price >= ALL (SELECT products.unit_price FROM products)
20 Encontrar el producto mas barato que existe en la tabla Products sin hacer uso de MIN, order
by, ni LIMIT
SELECT
*
FROM
products pro
WHERE PRO.unit_price <= ALL (SELECT products.unit_price FROM products)
21. Mostrar el número de puntos de cada jugador en toda su carrera. (Utilizar procedimiento
almacenado)
22. Mostrar el nombre del equipo, conferencia y división del jugador mas alto de la NBA. (Utilizar
procedimiento almacenado)
Crear Procedimiento
Ejecutar Procedimiento
EXECUTE spEjercicio22
23. Mostrar el partido o partidos (equipo_local, equipo_visitante y diferencia) con mayor
diferencia de puntos. (Utilizar procedimiento almacenado)
Crear procedimiento
EXECUTE spEjercicio23
24. Mostrar quien gana en cada partido (codigo, equipo_local, equipo_visitante, equipo_ganador),
en caso de empate sera null. (Utilizar procedimiento almacenado)
Crear Procedimiento
Ejecutar Procedimiento
EXECUTE spEjercicio24
25. Mostrar el jugador que más puntos ha realizado en toda su carrera y el nombre del equipo
(usar una vista)
Creando Vista
CREATE VIEW dbo.Ejercicio25View
AS
SELECT
jugadores.Nombre,
jugadores.Nombre_equipo,
Sum(estadisticas.Puntos_por_partido) AS puntaje_total
FROM
jugadores
INNER JOIN estadisticas ON estadisticas.jugador = jugadores.codigo
GROUP BY jugadores.Nombre, jugadores.Nombre_equipo
HAVING Sum(estadisticas.Puntos_por_partido) >= ALL
(SELECT Sum(estadisticas.Puntos_por_partido) AS puntaje_tot
FROM jugadores
INNER JOIN estadisticas ON estadisticas.jugador = jugadores.codigo
GROUP BY jugadores.Nombre)
GO
Ejecutar Vista
Crear Vista
) as t
group by t.equipo
GO
Ejecutar Vista
27. Mostrar el nombre del equipo y nombre del jugador de los 10 jugadores más altos, agrupados
por conferencia. Utilizar una vista.
Crear Vista
Ejecutar Vista