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, FECHAORDEN
FROM
EMPLEADOS E
INNER
JOIN
ORDENES O
ON
(E.EMPLEADOID=O.EMPLEADOID)
INNER
JOIN
CLIENTES C
ON
(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