Para poner en práctica algunas de las sentencias básicas y entender mejor su uso, vamos a resolver los siguientes ejercicios.
Para descargar el script completo con los ejercicios dar clic aquí:
https://www.dropbox.com/s/19l2jcambm1tvt7/ejercicios.sql
https://www.dropbox.com/s/19l2jcambm1tvt7/ejercicios.sql
--1. Actualizar el precio unitario de los productos de la categoría CARNICOS, subiéndolos en un 10% --COMO SE VEN LOS CAMPOS ANTES DE LA ACTUALIZACION SELECT PRECIOUNIT AS PRECIO_ANTERIOR,NOMBRECAT AS CATEGORIA FROM CATEGORIAS C INNER JOIN PRODUCTOS P ON (C.CATEGORIAID=P.CATEGORIAID) WHERE NOMBRECAT='CARNICOS' --ACTUALIZANDO LA TABLA UPDATE PRODUCTOS SET PRECIOUNIT=PRODUCTOS.PRECIOUNIT*1.1 FROM CATEGORIAS C INNER JOIN PRODUCTOS P ON (C.CATEGORIAID=P.CATEGORIAID) WHERE NOMBRECAT='CARNICOS' --COMO SE VEN LOS CAMPOS DESPUES DE LA ACTUALIZACION SELECT PRECIOUNIT AS PRECIO_NUEVO,NOMBRECAT AS CATEGORIA FROM CATEGORIAS C INNER JOIN PRODUCTOS P ON (C.CATEGORIAID=P.CATEGORIAID) WHERE NOMBRECAT='CARNICOS'
| Antes |
| Después |
--2. Actualizar el teléfono celular del proveedor cuyo contacto es MANUEL ANDRADE, con el valor 099010291 --COMO SE VEN LOS CAMPOS ANTES DE LA ACTUALIZACION SELECT CELUPROV AS CELULAR_ANTERIOR, CONTACTO FROM PROVEEDORES WHERE CONTACTO='MANUEL ANDRADE' --ACTUALIZANDO LA TABLA UPDATE PROVEEDORES SET CELUPROV='099234567' WHERE CONTACTO='MANUEL ANDRADE' --COMO SE VEN LOS CAMPOS DESPUES DE LA ACTUALIZACION SELECT CELUPROV AS CELULAR_NUEVO, CONTACTO FROM PROVEEDORES WHERE CONTACTO='MANUEL ANDRADE'
| Antes |
| Después |
--3. Borrar el producto YOGURT DE SABORES --COMO SE VE LA TABLA ANTES DEL BORRADO SELECT * FROM PRODUCTOS --BORRANDO EL REGISTRO DELETE FROM PRODUCTOS WHERE DESCRIPCION='YOGURT DE SABORES' --COMO SE VE LA TABLA DESPUES DEL BORRADO SELECT * FROM PRODUCTOS| Antes |
| Después |
--4. REALIZAR LAS SIGUIENTES CONSULTAS--4.1 Mostrar todas las órdenes: el id de la orden, el apellido y nombre del empleado que la atendió--el nombre de la compañía cliente y la fecha de orden--IMPORTANTE PARA CONCATENAR SE USA ||SELECT ORDENID, APELLIDO|| ' ' ||NOMBRE AS EMPLEADO,NOMBRECIA, FECHAORDENFROM EMPLEADOS E INNER JOIN ORDENES OON(E.EMPLEADOID=O.EMPLEADOID)INNER JOIN CLIENTES CON(O.CLIENTEID=C.CLIENTEID)
--4.2 Mostrar la suma total de cada tipo de producto pedidos en todas las órdenes
SELECT SUM(CANTIDAD) AS CANTIDAD,NOMBRECAT
FROM DETALLE_ORDENES D INNER JOIN PRODUCTOS P
ON(D.PRODUCTOID=P.PRODUCTOID)
INNER JOIN CATEGORIAS C
ON(C.CATEGORIAID=P.CATEGORIAID)
GROUP BY NOMBRECAT
--4.3 Mostrar el número de órdenes atendidas por cada empleado, incluidos los que tienen 0 órdenes.
SELECT COUNT(ORDENID) AS NUMERO_DE_ORDENES,APELLIDO|| ' ' ||NOMBRE AS EMPLEADO
FROM ORDENES O RIGHT JOIN EMPLEADOS E
ON(O.EMPLEADOID=E.EMPLEADOID)
GROUP BY (APELLIDO|| ' ' ||NOMBRE)
ORDER BY NUMERO_DE_ORDENES,EMPLEADO
--4.4 Muestre los proveedores y la suma de dinero vendido en los productos de ese proveedor.
SELECT NOMBREPROV AS PROVEEDOR, SUM(PRECIOUNIT*CANTIDAD) AS VENTA_TOTAL
FROM PROVEEDORES P JOIN PRODUCTOS PR
ON(P.PROVEEDORID=PR.PROVEEDORID)
JOIN DETALLE_ORDENES D
ON(D.PRODUCTOID=PR.PRODUCTOID)
GROUP BY NOMBREPROV
--5. Realizar el siguiente procedimiento almacenado.
--5.1 Escriba un procedimiento almacenado que reciba como parámetro un código de proveedor y
-- devuelve el número de órdenes en las que están incluidos productos de ese proveedor.
CREATE OR REPLACE FUNCTION numero_ordenes(INTEGER)
RETURNS INTEGER AS $$
DECLARE CODIGO INTEGER;
NUMORDEN INTEGER;
FILA_ITEM DETALLE_ORDENES%ROWTYPE;
BEGIN
CODIGO:=$1;
NUMORDEN:=0;
FOR FILA_ITEM IN SELECT P.PRODUCTOID
FROM PRODUCTOS P JOIN DETALLE_ORDENES D
ON(P.PRODUCTOID=D.PRODUCTOID)
WHERE CODIGO=P.PROVEEDORID
LOOP
NUMORDEN:=NUMORDEN+1;
END LOOP;
RETURN NUMORDEN;
END;
$$LANGUAGE 'plpgsql';
SELECT NUMERO_ORDENES(10);
--5.2 Escriba un procedimiento almacenado que reciba como parámetro un nombre de una categoría y
-- devuelve el código del producto de esa categoría que tiene más unidades vendidas.
CREATE OR REPLACE FUNCTION max_vendidas(CHAR(16))
RETURNS INTEGER AS $$
DECLARE NOMBRE CHAR(16);
MAXIMO INTEGER;
CODIGO INTEGER;
BEGIN
NOMBRE:=$1;
SELECT INTO MAXIMO MAX(CANTIDAD) FROM DETALLE_ORDENES D JOIN PRODUCTOS P
ON(D.PRODUCTOID=P.PRODUCTOID)
JOIN CATEGORIAS C
ON(C.CATEGORIAID=P.CATEGORIAID)
WHERE NOMBRECAT=NOMBRE;
SELECT INTO CODIGO D.PRODUCTOID FROM (CATEGORIAS C INNER JOIN PRODUCTOS P
ON(C.CATEGORIAID=P.CATEGORIAID)
JOIN DETALLE_ORDENES D
ON(D.PRODUCTOID=P.PRODUCTOID))
WHERE D.CANTIDAD= MAXIMO AND NOMBRECAT=NOMBRE;
RETURN CODIGO;
END;
$$LANGUAGE 'plpgsql';
SELECT MAX_VENDIDAS('LACTEOS');
Hola amigo, gracias por los ejercicios los estaré llevando a la práctica.
ResponderEliminarme parece interesante lo complementaria con este articulo ejercicios postgresql CRUD
ResponderEliminar