Una vez terminada la instalación
del DBMS lo que resta es ingresar el código SQL, el cual tiene una interfaz muy similar a la del SQL Sever
2008.
En este artículo resolvemos los ejercicios planteados en el archivo "BDPEDIDOS-PARATODOS_DBMS.sql".
Primero vamos a crear el Script para llenar la base de datos:
*********ESCUELA POLITÉNCICA NACIONAL******************************/
En este artículo resolvemos los ejercicios planteados en el archivo "BDPEDIDOS-PARATODOS_DBMS.sql".
Primero vamos a crear el Script para llenar la base de datos:
*********ESCUELA POLITÉNCICA NACIONAL******************************/
/* BASES DE
DATOS */
/* GRUPO
POSTGRESQL */=================================================*/
/*CREACIÓN DE LA BASE DE DATOS 'PEDIDOS' */
drop database if
exists PEDIDOS;
create database PEDIDOS;
CREATE TABLE EMPLEADOS(
EMPLEADOID int NOT NULL,
NOMBRE char(30) NULL,
APELLIDO char(30) NULL,
FECHA_NAC date NULL,
REPORTA_A int NULL,
EXTENSION int NULL,
CONSTRAINT PK_EMPLEADOS PRIMARY
KEY (EMPLEADOID));
CREATE TABLE PROVEEDORES(
PROVEEDORID int NOT NULL,
NOMBREPROV char(50) NOT NULL,
CONTACTO char(50) NOT NULL,
CELUPROV char(12) NULL,
FIJOPROV char(12) NULL,
CONSTRAINT PK_PROVEEDORES PRIMARY
KEY
(PROVEEDORID ) );
CREATE TABLE CATEGORIAS(
CATEGORIAID int NOT NULL,
NOMBRECAT char(50) NOT NULL,
CONSTRAINT PK_CATEGORIAS PRIMARY
KEY
(CATEGORIAID) ) ;
CREATE TABLE CLIENTES(
CLIENTEID int NOT NULL,
CEDULA_RUC char(10) NOT NULL,
NOMBRECIA char(30) NOT NULL,
NOMBRECONTACTO char(50) NOT NULL,
DIRECCIONCLI char(50) NOT NULL,
FAX char(12) NULL,
EMAIL char(50) NULL,
CELULAR char(12) NULL,
FIJO char(12) NULL,
CONSTRAINT PK_CLIENTES PRIMARY
KEY
(CLIENTEID) );
CREATE TABLE ORDENES(
ORDENID int NOT NULL,
EMPLEADOID int NOT NULL,
CLIENTEID int NOT NULL,
FECHAORDEN date NOT NULL,
DESCUENTO int NULL,
CONSTRAINT PK_ORDENES PRIMARY
KEY
(ORDENID) );
CREATE TABLE DETALLE_ORDENES(
ORDENID int NOT NULL,
DETALLEID int NOT NULL,
PRODUCTOID int NOT NULL,
CANTIDAD int NOT NULL,
CONSTRAINT PK_DETALLE_ORDENES PRIMARY KEY
(ORDENID,DETALLEID ) );
CREATE TABLE PRODUCTOS(
PRODUCTOID int NOT NULL,
PROVEEDORID int NOT NULL,
CATEGORIAID int NOT NULL,
DESCRIPCION char(50) NULL,
PRECIOUNIT numeric NOT
NULL,
EXISTENCIA int NOT NULL,
CONSTRAINT PK_PRODUCTOS PRIMARY
KEY
(PRODUCTOID ))
;
ALTER TABLE ORDENES
ADD CONSTRAINT FK_ORDENES_CLIEN_ORD_CLIENTES
FOREIGN KEY(CLIENTEID)
REFERENCES CLIENTES (CLIENTEID)
on delete restrict
on update restrict;
ALTER TABLE ORDENES
ADD CONSTRAINT FK_ORDENES_EMPLE_ORD_EMPLEADO FOREIGN KEY(EMPLEADOID)
REFERENCES EMPLEADOS (EMPLEADOID)
on delete restrict
on update restrict;
ALTER TABLE DETALLE_ORDENES
ADD CONSTRAINT FK_DETALLE__ORDEN_DET_ORDENES FOREIGN KEY(ORDENID)
REFERENCES ORDENES (ORDENID)
on delete restrict
on update restrict;
ALTER TABLE DETALLE_ORDENES
ADD CONSTRAINT FK_DETALLE__PROD_DETA_PRODUCTO FOREIGN KEY(PRODUCTOID)
REFERENCES PRODUCTOS (PRODUCTOID)
on delete restrict
on update restrict;
ALTER TABLE PRODUCTOS
ADD CONSTRAINT FK_PRODUCTO_CATE_PROD_CATEGORI FOREIGN KEY(CATEGORIAID)
REFERENCES CATEGORIAS (CATEGORIAID)
on delete restrict
on update restrict;
ALTER TABLE PRODUCTOS
ADD CONSTRAINT FK_PRODUCTO_PROV_PROD_PROVEEDO FOREIGN KEY(PROVEEDORID)
REFERENCES PROVEEDORES (PROVEEDORID)
on delete restrict
on update restrict;
ALTER TABLE EMPLEADOS
ADD CONSTRAINT FK_EMPLEADO_REPORTA FOREIGN
KEY(REPORTA_A)
REFERENCES EMPLEADOS (EMPLEADOID)
on delete restrict
on update restrict;
/*INSERCIÓN DE DATOS EN LA BASE */
insert into categorias (categoriaid, nombrecat) values (100, 'CARNICOS');
insert into categorias (categoriaid, nombrecat) values (200, 'LACTEOS');
insert into categorias (categoriaid, nombrecat) values (300, 'LIMPIEZA');
insert into categorias (categoriaid, nombrecat) values (400, 'HIGINE PERSONAL');
insert into categorias (categoriaid, nombrecat) values (500, 'MEDICINAS');
insert into categorias (categoriaid, nombrecat) values (600, 'COSMETICOS');
insert into categorias (categoriaid, nombrecat) values (700, 'REVISTAS');
insert into proveedores (proveedorid, nombreprov, contacto,celuprov,fijoprov) values
(10, 'DON DIEGO', 'MANUEL ANDRADE', '099234567','2124456');
insert into proveedores (proveedorid, nombreprov, contacto,celuprov,fijoprov) values
(20, 'PRONACA', 'JUAN PEREZ', '0923434467','2124456');
insert into proveedores (proveedorid, nombreprov, contacto,celuprov,fijoprov) values
(30, 'TONY', 'JORGE BRITO', '099234567','2124456');
insert into proveedores (proveedorid, nombreprov, contacto,celuprov,fijoprov) values
(40, 'MIRAFLORES', 'MARIA PAZ', '098124498','2458799');
insert into proveedores (proveedorid, nombreprov, contacto,celuprov,fijoprov) values
(50, 'ALMAY', 'PEDRO GONZALEZ', '097654567','2507190');
insert into proveedores (proveedorid, nombreprov, contacto,celuprov,fijoprov) values
(60, 'REVLON', 'MONICA SALAS', '099245678','2609876');
insert into proveedores (proveedorid, nombreprov, contacto,celuprov,fijoprov) values
(70, 'YANBAL', 'BETY ARIAS', '098124458','2450887');
insert into proveedores (proveedorid, nombreprov, contacto,celuprov,fijoprov) values
(120, 'JURIS', 'MANUEL ANDRADE', '099234567','2124456');
insert into proveedores (proveedorid, nombreprov, contacto,celuprov,fijoprov) values
(80, 'CLEANER', 'MANUEL ANDRADE', '099234567','2124456');
insert into proveedores (proveedorid, nombreprov, contacto,celuprov,fijoprov) values
(90, 'BAYER', 'MANUEL ANDRADE', '099234567','2124456');
insert into proveedores (proveedorid, nombreprov, contacto,celuprov,fijoprov) values
(110, 'PALMOLIVE', 'MANUEL ANDRADE', '099234567','2124456');
INSERT INTO PRODUCTOS
VALUES (1,10,100,'SALCHICHAS VIENESAS',2.60,200);
INSERT INTO PRODUCTOS
VALUES (2,10,100,'SALAMI DE AJO',3.60,300);
INSERT INTO PRODUCTOS
VALUES (3,10,100,'BOTON PARA ASADO',4.70,400);
INSERT INTO PRODUCTOS
VALUES (4,20,100,'SALCHICHAS DE POLLO',2.90,200);
INSERT INTO PRODUCTOS
VALUES (5,20,100,'JAMON DE POLLO',2.80,100);
INSERT INTO PRODUCTOS
VALUES (6,30,200,'YOGURT NATURAL',4.30,80);
INSERT INTO PRODUCTOS
VALUES (7,30,200,'LECHE CHOCOLATE',1.60,90);
INSERT INTO PRODUCTOS
VALUES (8,40,200,'YOGURT DE SABORES',1.60,200);
INSERT INTO PRODUCTOS
VALUES (9,40,200,'CREMA DE LECHE',3.60,30);
INSERT INTO PRODUCTOS
VALUES (10,50,600,'BASE DE MAQUILLAJE',14.70,40);
INSERT INTO PRODUCTOS
VALUES (11,50,600,'RIMMEL',12.90,20);
INSERT INTO PRODUCTOS
VALUES (13,60,600,'SOMBRA DE OJOS',9.80,100);
set datestyle to
dmy;
INSERT INTO EMPLEADOS
VALUES (1,'JUAN', 'CRUZ', '18/01/67',null, 231);
INSERT INTO EMPLEADOS
VALUES (2,'MARIO', 'SANCHEZ', '01/03/79',1,144);
INSERT INTO EMPLEADOS
VALUES (3,'VERONICA', 'ARIAS', '23/06/77',1, 234);
INSERT INTO EMPLEADOS
VALUES (4,'PABLO', 'CELY', '28/01/77',2, 567);
INSERT INTO EMPLEADOS
VALUES (5,'DIEGO', 'ANDRADE', '15/05/70',2, 890);
INSERT INTO EMPLEADOS
VALUES (6,'JUAN', 'ANDRADE', '17/11/76',3, 230);
INSERT INTO EMPLEADOS
VALUES (7,'MARIA', 'NOBOA', '21/12/79',3, 261);
INSERT INTO CLIENTES
VALUES (1,'1890786576','SUPERMERCADO ESTRELLA','JUAN ALBAN','AV.AMAZONAS',NULL,NULL,NULL,NULL);
INSERT INTO CLIENTES
VALUES (2,'1298765477','EL ROSADO','MARIA CORDERO','AV.AEL INCA',NULL,NULL,NULL,NULL);
INSERT INTO CLIENTES
VALUES (3,'1009876567','DISTRIBUIDORA PRENSA','PEDRO PINTO','EL PINAR',NULL,NULL,NULL,NULL);
INSERT INTO CLIENTES
VALUES (4,'1876090006','SU TIENDA','PABLO PONCE','AV.AMAZONAS',NULL,NULL,NULL,NULL);
INSERT INTO CLIENTES
VALUES (5,'1893456776','SUPERMERCADO DORADO','LORENA PAZ','AV.6 DICIEMBRE',NULL,NULL,NULL,NULL);
INSERT INTO CLIENTES
VALUES (6,'1678999891','MI COMISARIATO','ROSARIO UTRERAS','AV.AMAZONAS',NULL,NULL,NULL,NULL);
INSERT INTO CLIENTES
VALUES (7,'1244567888','SUPERMERCADO DESCUENTO','LETICIA ORTEGA','AV.LA PRENSA',NULL,NULL,NULL,NULL);
INSERT INTO CLIENTES
VALUES (8,'1456799022','EL DESCUENTO','JUAN TORRES','AV.PATRIA',NULL,NULL,NULL,NULL);
INSERT INTO CLIENTES
VALUES (9,'1845677777','DE LUISE','JORGE PARRA','AV.AMAZONAS',NULL,NULL,NULL,NULL);
INSERT INTO CLIENTES
VALUES (10,'183445667','YARBANTRELLA','PABLO POLIT','AV.REPUBLICA',NULL,NULL,NULL,NULL);
INSERT INTO ORDENES
VALUES(1,3,4,'17/06/07', 5);
INSERT INTO ORDENES
VALUES(2,3,4,'02/06/07', 10);
INSERT INTO ORDENES
VALUES(3,4,5,'05/06/07', 6);
INSERT INTO ORDENES
VALUES(4,2,6,'06/06/07', 2);
INSERT INTO ORDENES
VALUES(5,2,7,'09/06/07', NULL);
INSERT INTO ORDENES
VALUES(6,4,5,'12/06/07', 10);
INSERT INTO ORDENES
VALUES(7,2,5,'14/06/07', 10);
INSERT INTO ORDENES
VALUES(8,3,2,'13/06/07', 10);
INSERT INTO ORDENES
VALUES(9,3,2,'17/06/07', 3);
INSERT INTO ORDENES
VALUES(10,2,2,'18/06/07', 2);
INSERT INTO detalle_ordenes
VALUES(1,1,1,2);
INSERT INTO detalle_ordenes
VALUES(1,2,4,1);
INSERT INTO detalle_ordenes
VALUES(1,3,6,1);
INSERT INTO detalle_ordenes
VALUES(1,4,9,1);
INSERT INTO detalle_ordenes
VALUES(2,1,10,10);
INSERT INTO detalle_ordenes
VALUES(2,2,13,20);
INSERT INTO detalle_ordenes
VALUES(3,1,3,10);
INSERT INTO detalle_ordenes
VALUES(4,1,9,12);
INSERT INTO detalle_ordenes
VALUES(5,1,1,14);
INSERT INTO detalle_ordenes
VALUES(5,2,4,20);
INSERT INTO detalle_ordenes
VALUES(6,1,3,12);
INSERT INTO detalle_ordenes
VALUES(7,1,11,10);
INSERT INTO detalle_ordenes
VALUES(8,1,2,10);
INSERT INTO detalle_ordenes
VALUES(8,2,5,14);
INSERT INTO detalle_ordenes
VALUES(8,3,7,10);
INSERT INTO detalle_ordenes
VALUES(9,1,11,10);
INSERT INTO detalle_ordenes
VALUES(10,1,1,5);
Ahora vamos a reslover algunos ejercicios. : )
/*
EJERCICIOS
PROPUESTOS
***********************************************************************
EJERCICIOS
************************************************************************
1. Actualizar el precio unitario de los productos de la categoría
CARNICOS, subiéndolos en un 10% (1)
*/
select * from productos;
update productos
set preciounit= (preciounit*0.1) + preciounit;
/*
2. Actualizar el teléfono celular del proveedor cuyo contacto es MANUEL
ANDRADE, con el valor 099010291 (2)
*/
select * from proveedores;
update proveedores
set celuprov=
'0990101291'
where contacto=
'MANUEL ANDRADE';
/*
3. Borrar el producto YOGURT DE SABORES (3)
*/
select * from productos;
delete from productos
where descripcion ='YOGURT DE SABORES';
/*
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ó (4)
el nombre de la compañía cliente y la fecha de orden
*/
SELECT * FROM ORDENES;
select * from empleados;
select * from clientes;
select ord.ordenid, emp.empleadoid, emp.nombre, emp.apellido, ord.fechaorden, cli.clienteid, cli.nombrecia
from ordenes ord, empleados emp, clientes cli
where ord.empleadoid=emp.empleadoid and ord.clienteid=cli.clienteid ;
/*
4.2 Mostrar la suma total de cada tipo de producto pedidos en todas las
órdenes. (5)
*/
select * from detalle_ordenes;
select productoid,
sum(cantidad) as "Suma total"
from detalle_ordenes
group by productoid;
/*
4.3 Mostrar el número de órdenes atendidas por cada empleado, incluidos
los que tienen 0 órdenes. (6)
*/
select * from empleados;
select * from ordenes;
select nombre as
"Nombre" ,
apellido as "Apellido",
count (ord.empleadoid) as "# de ordenes"
from empleados emp
left join ordenes
ord
on emp.empleadoid= ord.empleadoid
group by nombre, apellido;
/*
4.4 Muestre los proveedores y la suma de dinero vendido en los productos
de ese proveedor. (7)
*/
select * from proveedores;
select * from productos;
select * from detalle_ordenes;
select prov.nombreprov as "Nombre",sum(d.cantidad * prod.preciounit ) as "Suma dinero"
from proveedores prov, productos prod, detalle_ordenes d
where d.productoid= prod.productoid and prov.proveedorid= prod.proveedorid
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 (8)
devuelve el número de órdenes en las que están incluidos productos de ese
proveedor.
*/
DROP LANGUAGE IF
EXISTS plpgsql;
CREATE LANGUAGE plpgsql;
select * from productos;
select * from ordenes;
select * from detalle_ordenes;
create or replace
function num_ordene_proveedor(idproo int) returns integer
as $$
declare
num int;
begin
select
count(p.productoid) into num from productos p join detalle_ordenes dor
on (p.productoid=dor.productoid)join ordenes ord on(ord.ordenid=dor.ordenid)
where
proveedorid=idproo
group
by proveedorid;
return
num;
end;
$$ LANGUAGE plpgsql;
select num_ordene_proveedor(10)
/*
5.2 Escriba un procedimiento almacenado que reciba como parámetro un
nombre de una categoría y (9)
devuelve el código del producto de esa categoría que tiene más unidades
vendidas.
*/
select * from categorias;
select * from productos;
select * from detalle_ordenes;
create or replace
function mas_vendido (nomCat character(50)) returns integer
as $$
declare
num int;
begin
select
p.productoid,sum(cantidad)INTO NUM from productos p join categorias c on (c.categoriaid=p.categoriaid)
join
detalle_ordenes dor
on (p.productoid=dor.productoid)
where
c.nombrecat=nomCat
group
by descripcion, p.productoid
order
by sum DESC
limit
1;
return
num;
end;
$$LANGUAGE 'plpgsql';
select mas_vendido('CARNICOS')
PARA PODER DESCARGAR EL SCRIPT DIRIGIRSE AL SIGUIENTE LINK
http://www.mediafire.com/?dg7gkyohko1ib9l
PARA PODER DESCARGAR EL SCRIPT DIRIGIRSE AL SIGUIENTE LINK
http://www.mediafire.com/?dg7gkyohko1ib9l
No hay comentarios:
Publicar un comentario