Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% encontró este documento útil (0 votos)
91 vistas24 páginas

Tarea2 GM16042

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 24

UNIVERSIDAD DE EL SALVADOR

FACULTAD MULTIDISCIPLINARIA PARACENTRAL


DEPARTAMENTO DE INFORMATICA
INGENIERIA DE SISTEMAS INFORMATICOS

ASINATURA: BASE DE DATOS

CATEDRATICO: ING. HERBERT ORLANDO MONGE BARRIOS

CARNET: GM16042

ALUMNO: DAVID FRANCISCO GONZALEZ MARTINEZ

CICLO: 1 AÑO ACADEMICO: 2020


1. Divida los empleados, generando un grupo cuyo nombre inicie por la letra M y termine en la
letra P. ordenado por nombre y número de departamento.

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

15. Resuelva el ejercicio 14 pero sin usar join

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)

Creacion del Procedimiento.

CREATE PROCEDURE spEjercicio21


as
SELECT
jugadores.Nombre,
SUM(estadisticas.Puntos_por_partido) as totalPuntos
FROM
jugadores
INNER JOIN estadisticas ON estadisticas.jugador = dbo.jugadores.codigo
GROUP BY jugadores.Nombre
go

Ejecución del procedimiento.


EXECUTE spEjercicio21

22. Mostrar el nombre del equipo, conferencia y división del jugador mas alto de la NBA. (Utilizar
procedimiento almacenado)

Crear Procedimiento

CREATE PROCEDURE spEjercicio22


as
SELECT
equipos.Nombre,
equipos.Conferencia,
equipos.Division,
jugadores.Nombre as nameJugador
FROM
equipos
INNER JOIN jugadores ON jugadores.Nombre_equipo = equipos.Nombre
WHERE jugadores.Altura >= ALL(SELECT jugadores.Altura FROM jugadores)
Go

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

CREATE PROCEDURE spEjercicio23


AS
SELECT
partidos.equipo_local,
partidos.equipo_visitante,
partidos.puntos_local,
puntos_visitante,
ABS(partidos.puntos_local - puntos_visitante) as diferencia
FROM
partidos
INNER JOIN equipos ON partidos.equipo_local = equipos.Nombre
WHERE ABS(partidos.puntos_local - puntos_visitante)>= ALL
(SELECT ABS(partidos.puntos_local - puntos_visitante) as dif FROM partidos)
GO
Ejecutar 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

CREATE PROCEDURE spEjercicio24


AS
SELECT
partidos.equipo_local,
partidos.equipo_visitante,
case when partidos.puntos_local>partidos.puntos_visitante then partidos.equipo_local
when partidos.puntos_local<partidos.puntos_visitante then partidos.equipo_visitante
else null end as equipo_ganador
FROM
partidos
GO

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

SELECT * FROM dbo.Ejercicio25View


26. Mostrar los puntos de cada equipo en los partidos, tanto de local como de visitante. Y los
nombres de los equipos. Usa una vista.

Crear Vista

CREATE VIEW Ejercicio26View


AS
select t.equipo, sum(t.puntos) as puntos
from (

select partidos.equipo_local as equipo,


sum(partidos.puntos_local) as puntos
from partidos
group by partidos.equipo_local
union all
select partidos.equipo_visitante as equipo,
sum(partidos.puntos_visitante) as puntos
from partidos
group by partidos.equipo_visitante

) as t
group by t.equipo
GO
Ejecutar Vista

SELECT * FROM Ejercicio26View

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

CREATE VIEW Ejercicio27View


AS
SELECT
TOP 10
equipos.Nombre as nombre_jugador,
jugadores.Nombre,
jugadores.Altura
FROM
equipos
INNER JOIN jugadores ON jugadores.Nombre_equipo = equipos.Nombre
GROUP BY equipos.Conferencia, equipos.Nombre,jugadores.Nombre,jugadores.Altura
ORDER BY jugadores.Altura DESC
GO

Ejecutar Vista

SELECT * FROM Ejercicio27View

También podría gustarte