Вы находитесь на странице: 1из 9

1

REPASO GENERAL con SOLUCIONES.



El Objetivo es crear la siguiente estructura de tablas en PostgreSQL:


2
Ejercicios prcticos con soluciones en negrita:

1. Crear la base de datos repaso.

En SQL (dentro de PGADMIN o PSQL): create database repaso;
O por programa: createdb.exe -U postgres repaso

2. Crear la tabla categorias dentro de la BD repaso con los siguientes campos:

Column Type Size Nulls Auto Default Children Parents
categoriaid int4 10
productos


nombrecat varchar 50

CREATE TABLE categorias (categoriaid integer NOT NULL, nombrecat varchar(50) NOT NULL, CONSTRAINT
pk_categorias PRIMARY KEY (categoriaid) );

3. Crear la tabla proveedores dentro de la BD repaso con los siguientes campos:

Column Type Size Nulls Auto Default Children Parents
proveedorid int4 10
productos


nombreprov varchar 50
contacto varchar 50
celuprov varchar 12
Fijoprov varchar 12

CREATE TABLE proveedores (proveedorid integer NOT NULL, nombreprov varchar(50) NOT NULL, contacto
varchar(50) NOT NULL, celuprov varchar(12), fijoprov varchar(12), CONSTRAINT pk_proveedores PRIMARY KEY
(proveedorid) );

4. Crear la tabla clientes dentro de la BD repaso con los siguientes campos:

Column Type Size Nulls Auto Default Children Parents
Clienteid int4 10
ordenes


cedula_ruc varchar 10
nombrecia varchar 30
nombrecontacto varchar 50
direccioncli varchar 50
fax varchar 12
email varchar 50
Celular varchar 12
fijo varchar 12

CREATE TABLE clientes ( clienteid integer NOT NULL, cedula_ruc varchar(10) NOT NULL, nombrecia varchar(30) NOT
NULL, nombrecontacto varchar(50) NOT NULL, direccioncli varchar(50) NOT NULL, fax varchar(12), email
varchar(50), celular varchar(12), fijo varchar(12), CONSTRAINT pk_clientes PRIMARY KEY (clienteid) );

5. Crear la tabla empleados dentro de la BD repaso con los siguientes campos:

Column Type Size Nulls Auto Default Children Parents
empleadoid int4 10
empleados
ordenes


nombre varchar 30
apellido varchar 30
fecha_nac date 13
reporta_a int4 10
empleados

extension int4 10


3
CREATE TABLE empleados ( empleadoid integer NOT NULL, nombre varchar(30), apellido varchar(30), fecha_nac
date, reporta_a integer, extension integer, CONSTRAINT pk_empleados PRIMARY KEY (empleadoid), CONSTRAINT
fk_empleado_reporta FOREIGN KEY (reporta_a) REFERENCES empleados (empleadoid) MATCH SIMPLE ON UPDATE
RESTRICT ON DELETE RESTRICT );

6. Crear la tabla productos dentro de la BD repaso con los siguientes campos:

Column Type Size Nulls Auto Default Children Parents
productoid int4 10
detalle_ordenes


proveedorid int4 10
proveedores

categoriaid int4 10
categorias

descripcion varchar 50
preciounit numeric 131089
existencia int4 10

CREATE TABLE productos ( productoid integer NOT NULL, proveedorid integer NOT NULL, categoriaid integer NOT
NULL, descripcion varchar(50), preciounit numeric NOT NULL, existencia integer NOT NULL, CONSTRAINT
pk_productos PRIMARY KEY (productoid), CONSTRAINT fk_producto_cate_prod_categori FOREIGN KEY
(categoriaid) REFERENCES categorias (categoriaid) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT,
CONSTRAINT fk_producto_prov_prod_proveedo FOREIGN KEY (proveedorid) REFERENCES proveedores
(proveedorid) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT );

7. Crear la tabla ordenes dentro de la BD repaso con los siguientes campos:

Column Type Size Nulls Auto Default Children Parents
ordenid int4 10
detalle_ordenes


empleadoid int4 10
empleados

clienteid int4 10
clientes

fechaorden date 13
descuento int4 10

CREATE TABLE ordenes ( ordenid integer NOT NULL, empleadoid integer NOT NULL, clienteid integer NOT NULL,
fechaorden date NOT NULL, descuento integer, CONSTRAINT pk_ordenes PRIMARY KEY (ordenid), CONSTRAINT
fk_ordenes_clien_ord_clientes FOREIGN KEY (clienteid) REFERENCES clientes (clienteid) MATCH SIMPLE ON
UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT fk_ordenes_emple_ord_empleado FOREIGN KEY
(empleadoid) REFERENCES empleados (empleadoid) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT );

8. Crear la tabla detalle_ordenes dentro de la BD repaso con los siguientes campos:

Column Type Size Nulls Auto Default Children Parents
ordenid int4 10
ordenes

detalleid int4 10
productoid int4 10
productos

cantidad int4 10

CREATE TABLE detalle_ordenes ( ordenid integer NOT NULL, detalleid integer NOT NULL, productoid integer NOT
NULL, cantidad integer NOT NULL, CONSTRAINT pk_detalle_ordenes PRIMARY KEY (ordenid, detalleid),
CONSTRAINT fk_detalle__orden_det_ordenes FOREIGN KEY (ordenid) REFERENCES ordenes (ordenid) MATCH
SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT, CONSTRAINT fk_detalle__prod_deta_producto FOREIGN KEY
(productoid) REFERENCES productos (productoid) MATCH SIMPLE ON UPDATE RESTRICT ON DELETE RESTRICT );

9. Insertar los siguientes registros en la tabla de categorias usando comandos SQL:

4

INSERT INTO categorias VALUES (100,'CARNICOS');
INSERT INTO categorias VALUES (200,'LACTEOS');
INSERT INTO categorias VALUES (300,'LIMPIEZA');
INSERT INTO categorias VALUES (400,'HIGINE PERSONAL');
INSERT INTO categorias VALUES (500,'MEDICINAS');
INSERT INTO categorias VALUES (600,'COSMETICOS');
INSERT INTO categorias VALUES (700,'REVISTAS');

10. Insertar los siguientes registros en la tabla de proveedores usando comandos SQL:


INSERT INTO proveedores VALUES (10, 'DON DIEGO', 'MANUEL ANDRADE', '099234567', '2124456');
INSERT INTO proveedores VALUES (20, 'PRONACA', 'JUAN PEREZ', '0923434467', '2124456');
INSERT INTO proveedores VALUES (30, 'TONY', 'JORGE BRITO', '099234567', '2124456');
INSERT INTO proveedores VALUES (40, 'MIRAFLORES', 'MARIA PAZ', '098124498', '2458799');
INSERT INTO proveedores VALUES (50, 'ALMAY', 'PEDRO GONZALEZ', '097654567', '2507190');
INSERT INTO proveedores VALUES (60, 'REVLON', 'MONICA SALAS', '099245678', '2609876');
INSERT INTO proveedores VALUES (70, 'YANBAL', 'BETY ARIAS', '098124458', '2450887');
INSERT INTO proveedores VALUES (120, 'JURIS', 'MANUEL ANDRADE', '099234567', '2124456');
INSERT INTO proveedores VALUES (80, 'CLEANER', 'MANUEL ANDRADE', '099234567', '2124456');
INSERT INTO proveedores VALUES (90, 'BAYER', 'MANUEL ANDRADE', '099234567', '2124456');
INSERT INTO proveedores VALUES (110, 'PALMOLIVE', 'MANUEL ANDRADE', '099234567', '2124456');

5

11. Insertar los siguientes registros en la tabla de clientes usando comandos SQL:



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. EL 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);

12. Insertar los siguientes registros en la tabla de empleados usando comandos SQL:



6

INSERT INTO empleados VALUES (1, 'JUAN', 'CRUZ', '2067-01-18', NULL, 231);
INSERT INTO empleados VALUES (2, 'MARIO', 'SANCHEZ', '1979-03-01', 1, 144);
INSERT INTO empleados VALUES (3, 'VERONICA', 'ARIAS', '1977-06-23', 1, 234);
INSERT INTO empleados VALUES (4, 'PABLO', 'CELY', '1977-01-28', 2, 567);
INSERT INTO empleados VALUES (5, 'DIEGO', 'ANDRADE', '1970-05-15', 2, 890);
INSERT INTO empleados VALUES (6, 'JUAN', 'ANDRADE', '1976-11-17', 3, 230);
INSERT INTO empleados VALUES (7, 'MARIA', 'NOBOA', '1979-12-21', 3, 261);

13. Insertar los siguientes registros en la tabla de productos usando comandos SQL:


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);

14. Insertar los siguientes registros en la tabla de ordenes usando comandos SQL:


7


INSERT INTO ordenes VALUES (1, 3, 4, '2007-06-17', 5);
INSERT INTO ordenes VALUES (2, 3, 4, '2007-06-02', 10);
INSERT INTO ordenes VALUES (3, 4, 5, '2007-06-05', 6);
INSERT INTO ordenes VALUES (4, 2, 6, '2007-06-06', 2);
INSERT INTO ordenes VALUES (5, 2, 7, '2007-06-09', NULL);
INSERT INTO ordenes VALUES (6, 4, 5, '2007-06-12', 10);
INSERT INTO ordenes VALUES (7, 2, 5, '2007-06-14', 10);
INSERT INTO ordenes VALUES (8, 3, 2, '2007-06-13', 10);
INSERT INTO ordenes VALUES (9, 3, 2, '2007-06-17', 3);
INSERT INTO ordenes VALUES (10, 2, 2, '2007-06-18', 2);

15. Insertar los siguientes registros en la tabla de detalle_ordenes usando comandos SQL:


8


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);

16. Actualizar el precio unitario de los productos de la categora CARNICOS, subindolos en un 10%:

select * from productos order by 1;
update productos set preciounit= (preciounit*0.1) + preciounit where categoriaid=100;

17. Actualizar el telfono celular del proveedor cuyo contacto es MANUEL ANDRADE, con el valor 0991 101291.


9
select * from proveedores;
update proveedores
set celuprov= '0991101291'
where contacto= 'MANUEL ANDRADE';


18. Borrar el producto YOGURT DE SABORES.

select * from productos;
delete from productos
where descripcion ='YOGURT DE SABORES';

19. Mostrar todas las rdenes: el id de la orden, el apellido y nombre del empleado que la atendi, el nombre de la
compaa 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 andord.clienteid=cli.clienteid ;

20. Mostrar la suma total de cada tipo de producto pedidos en todas las rdenes.

select * from detalle_ordenes;
select productoid, sum(cantidad) as "Suma total"
from detalle_ordenes
group by productoid;

21. Mostrar el nmero de rdenes atendidas por cada empleado, incluidos los que tienen 0 rdenes.

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;

22. Muestre los proveedores y la suma de dinero vendido en los productos de ese proveedor.

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;

Вам также может понравиться