Actividad integral ACCESS con SQL
COMANDOS DML:
SELECT – WHERE – GROUP BY - ORDER BY - BETWEEN - LIKE
Utilizando la base de datos Empresa, dedicada a la venta de artículos de limpieza y
de perfumería con las siguientes tablas.
CLIENTES(CodCli, NomCli, ApeCli, FeNac, email, categoría)
PRODUCTOS(CodProd, DescProd, PrecioProd, CodRubro, stock)
RUBROS(CodRubro, DescRubro)
PEDIDOS(NroPedido,FechaPed, CodCli, cod_prod)
Se pide: Escribir las sentencias en SQL para realizar las siguientes consultas.
PARTE A
1. Mostrar todos los productos.
1
2
SELECT *
FROM PRODUCTOS;
2. Mostrar los clientes que no tienen cargados el e-mail.
1
2
3
SELECT *
FROM CLIENTES
WHERE email IS NULL;
3. Mostrar los clientes de apellido Gómez.
1
2
3
SELECT *
FROM CLIENTES
WHERE ApeCli="Gómez";
4. Mostrar todos los productos cuyo stock sea menor a 20 unidades.
1
2
3
SELECT *
FROM PRODUCTOS
WHERE stock<20;
5. Mostrar los últimos 5 pedidos ordenados por fecha.
1
2
3
SELECT TOP 5 *
FROM PEDIDOS
ORDER BY FechaPed DESC;
6. Nombres de los productos y su precio, añadiendo una columna con el precio con IVA. Se entiende que
el porcentaje de Iva es del 21%.
1
2
SELECT DescProd, PrecioProd, ROUND(PrecioProd*1.21,2) as [Precio+IVA]
FROM PRODUCTOS;
7. Productos cuyo precio se encuentre entre $ 15000.- y $30.000.- ordenados por nombre.
1
2
3
4
SELECT *
FROM PRODUCTOS
WHERE PrecioProd BETWEEN 15000 AND 30000
ORDER BY DescProd;
8. Los tres productos que tienen mayor cantidad de existencias.
1
2
SELECT TOP 3 * FROM PRODUCTOS
ORDER BY stock DESC;
9. Mostrar los productos que no tienen pedidos.
1
SELECT PRODUCTOS.CodProd, PRODUCTOS.DescProd, PEDIDOS.NroPedido FROM PRODUCTOS
LEFT JOIN PEDIDOS ON PRODUCTOS.CodProd=PEDIDOS.cod_prod
2
WHERE PEDIDOS.NroPedido IS NULL;
10. Mostrar los productos del rubro perfumería.
1
SELECT *
2
FROM PRODUCTOS INNER JOIN RUBROS ON PRODUCTOS.CodRubro=RUBROS.CodRubro
WHERE DescRubro="Perfumeria";
3
PARTE B
1. Mostrar la cantidad de productos por rubro.
2
SELECT COUNT(CodProd) as cantTotal, DescRubro
FROM PRODUCTOS INNER JOIN RUBROS ON PRODUCTOS.Codrubro=RUBROS.CodRubro
3
GROUP BY DescRubro;
1
2. Mostrar la cantidad de clientes por categoría.
2
SELECT COUNT(CodCli) as TotalCli, categoria
FROM CLIENTES
3
GROUP BY categoria;
1
3. Mostrar la cantidad de pedidos por fecha.
1
SELECT COUNT(NroPedido) AS TotalPed, FechaPed
2
FROM PEDIDOS
GROUP BY FechaPed;
3
4. Mostrar el máximo precio por producto.
Si tuvieran varios precios los productos.
1
SELECT MAX(PrecioProd) AS PrecioMax, DescProd
2
FROM PRODUCTOS
3
GROUP BY DescProd;
5. Mostrar el mínimo de stock por rubro.
1
SELECT MIN(STOCK) AS MinStock, CodRubro
2
FROM PRODUCTOS
3
GROUP BY CodRubro;
Usando la descripción del rubro
1
SELECT MIN(PRODUCTOS.stock) AS MinStock, RUBROS.DescRubro
2
FROM PRODUCTOS INNER JOIN RUBROS ON PRODUCTOS.CodRubro=RUBROS.CodRubro
3
GROUP BY RUBROS.DescRubro;
6. Mostrar la cantidad de artículos en stock por rubro.
1
SELECT SUM(stock) as cantTotal, DescRubro
2
FROM PRODUCTOS INNER JOIN RUBROS ON PRODUCTOS.Codrubro=RUBROS.CodRubro
3
GROUP BY DescRubro;
7. Mostrar el precio mínimo por rubro.
1
SELECT MIN(PRODUCTOS.PrecioProd) AS PrecioMin, RUBROS.DescRubro FROM PRODUCTOS
INNER JOIN RUBROS ON PRODUCTOS.CodRubro=RUBROS.CodRubro
2
GROUP BY RUBROS.DescRubro;
8. Mostrar el máximo de stock.
1
2
SELECT MAX(stock) AS MaxStock
FROM PRODUCTOS;
Lo podemos mostrar también con todos los campos con una subconsulta
1
SELECT *
2
FROM PRODUCTOS
3
WHERE stock=(SELECT MAX(stock) FROM PRODUCTOS);
9. Mostrar el detalle de los pedidos del mes de marzo correspondientes a artículos de perfumería
ordenados por fecha.
1
SELECT PEDIDOS.*, RUBROS.DescRubro
2
FROM (PEDIDOS INNER JOIN PRODUCTOS ON PEDIDOS.COD_PROD = PRODUCTOS.CODPROD)
3
INNER JOIN RUBROS ON RUBROS.CodRubro = PRODUCTOS.CodRubro
WHERE MONTH(PEDIDOS.FechaPed) = 3 AND RUBROS.DesCRubro = "Perfumeria"
4
ORDER BY PEDIDOS.FechaPed;
1
SELECT PEDIDOS.*, RUBROS.DescRubro
2
FROM (PEDIDOS INNER JOIN PRODUCTOS ON PEDIDOS.cod_prod=PRODUCTOS.CodProd) INNER
JOIN RUBROS ON PRODUCTOS.CodRubro=RUBROS.CodRubro
3
WHERE MONTH(PEDIDOS.FechaPed)=3 AND RUBROS.DescRubro="PERFUMERIA" ORDER BY
PEDIDOS.FechaPed DESC;
1
SELECT *
2
3
FROM PEDIDOS WHERE
MONTH(FechaPed)=3 AND cod_prod = ANY(SELECT CodProd
4
FROM PRODUCTOS
5
WHERE CodRubro=(SELECT CodRubro FROM RUBROS WHERE DescRubro="Perfumeria"))
6
ORDER BY PEDIDOS.FechaPed DESC;
10. Mostrar el código del cliente, el Apellido y nombre juntos, y el e_mail de los clientes que cumples años
en este mes.
1
SELECT CodCli, ApeCli&" "&NomCli AS ApeNom, email, FeNac
2
FROM CLIENTES
3
WHERE Month(FeNac)=09;
11. Mostrar los clientes que no tienen e_mail.
1
SELECT *
2
FROM CLIENTES
WHERE email IS NULL;
3
12. Mostrar los últimos cinco pedidos del mes de agosto..
1
SELECT TOP 5 * FROM PEDIDOS WHERE PEDIDOS.FechaPed BETWEEN #08/01/24# AND
#08/31/24# ORDER BY PEDIDOS.FechaPed DESC;
Mostrar los ingresos ( N° de HC, Fecha de Ingreso, cód de Obra social), para ser
atendidos por pediatras , los fines de semana de noviembre, ordenados por fecha y
horario.
1
select Ingreso.Nro_HC, Ingreso.Fecha_Ingreso, HC.Cod_Obra_Social,
medico.Especialidad
2
from (ingreso inner join HC on ingreso.Nro_HC=HC.Nro_HC) inner join medico on
ingreso.Cod-Médico=medico.Cod-medico
3
4
where medico.Especialidad=pediatria and month(ingreso.Fecha_Ingreso)=11
order by ingreso.fecha_ingreso, ingreso.horario_ingreso
La cantidad de pacientes por especialidad.
1
select COUNT(Ingreso.[N° de ingreso]), Medico.Especialidad from Ingreso inner
join Medico on ingreso.Cod-Medico=Medico.Cod-Medico GROUP BY
Medico.Especialidad
Las últimas cinco consultas, ordenadas por fecha de ingreso.
1
SELECT TOP 5 HC.*, INGRESO.Fecha_ingreso from HC inner join ingreso on
HC.Nro_HC=Ingreso.Nro_HC ORDER BY Fecha_ingreso DESC
Los últimos 5 productos vendidos, ordenados por fecha de pedido
1
SELECT TOP 5 PRODUCTOS.*, PEDIDOS.FechaPed from PRODUCTOS INNER JOIN PEDIDOS ON
PRODUCTOS.CodProd=PEDIDOS.Cod_Prod ORDER BY PEDIDOS.FechaPed DESC