Modelo Entidad Relación: Qué es? - Para que sirve? Herramientas para elaborarlo y un ejemplo. Favor incluir en el blog - Trabajo Independiente - 30 %
Evaluación Tercer Corte: Junio 10 de 2020
______________________________________________________
Script del taller realizado en clase
drop table if exists usuario;
drop table if exists autor;
create table editoriales(
codigo serial,
nombre varchar(30),
primary key (codigo)
);
create table libros (
codigo serial,
titulo varchar(40),
autor varchar(30),
codigoeditorial smallint,
primary key(codigo)
);
insert into editoriales(nombre) values('Planeta');
insert into editoriales(nombre) values('Emece');
insert into editoriales(nombre) values('Paidos');
insert into editoriales(nombre) values('Siglo XXI');
insert into libros(titulo,autor,codigoeditorial) values('Uno','Richard Bach',1);
insert into libros(titulo,autor,codigoeditorial) values('Ilusiones','Richard Bach',1);
insert into libros(titulo,autor,codigoeditorial) values('Aprenda PHP','Mario Molina',4);
insert into libros(titulo,autor,codigoeditorial) values('El aleph','Borges',2);
insert into libros(titulo,autor,codigoeditorial) values('Puente al infinito','Richard Bach',2);
select *from editoriales;
select *from libros;
-- Queremos conocer el nombre de las editoriales que han publicado libros del autor "Richard Bach":
select nombre
from editoriales
where codigo in
(select codigoeditorial
from libros
where autor='Richard Bach');
-- Probamos la subconsulta separada de la consulta exterior para verificar que retorna una lista
-- de valores de un solo campo:
select distinct codigoeditorial
from libros
where autor='Richard Bach';
-- Podemos reemplazar por un "join" la primera consulta:
select distinct nombre
from editoriales as e
join libros
on codigoeditorial=e.codigo
where autor='Richard Bach';
-- También podemos buscar las editoriales que no han publicado libros de "Richard Bach":
select nombre
from editoriales
where codigo not in
(select codigoeditorial
from libros
where autor='Richard Bach');
_________________________________
drop table if exists libros;
create table libros(
codigo serial,
titulo varchar(40),
autor varchar(30),
editorial varchar(20),
precio decimal(5,2),
primary key(codigo)
);
insert into libros(titulo,autor,editorial,precio)
values('Alicia en el pais de las maravillas','Lewis Carroll','Emece',20.00);
insert into libros(titulo,autor,editorial,precio)
values('Alicia en el pais de las maravillas','Lewis Carroll','Plaza',35.00);
insert into libros(titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina','Siglo XXI',40.00);
insert into libros(titulo,autor,editorial,precio)
values('El aleph','Borges','Emece',10.00);
insert into libros(titulo,autor,editorial,precio)
values('Ilusiones','Richard Bach','Planeta',15.00);
insert into libros(titulo,autor,editorial,precio)
values('Java en 10 minutos','Mario Molina','Siglo XXI',50.00);
insert into libros(titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Planeta',20.00);
insert into libros(titulo,autor,editorial,precio)
values('Martin Fierro','Jose Hernandez','Emece',30.00);
insert into libros(titulo,autor,editorial,precio)
values('Uno','Richard Bach','Planeta',10.00);
select *from libros;
-- Obtenemos el título, precio de un libro específico y
-- la diferencia entre su precio y el máximo valor:
select titulo,precio,
precio-(select max(precio) from libros) as diferencia
from libros
where titulo='Uno';
-- Mostramos el título y precio del libro más costoso:
select titulo,autor, precio
from libros
where precio=
(select min(precio) from libros);
-- Actualizamos el precio del libro con máximo valor:
update libros set precio=45
where precio=
(select max(precio) from libros);
-- Eliminamos los libros con precio menor:
delete from libros
where precio=
(select min(precio) from libros);
______________________________________
drop table if exists clientes;
drop table if exists facturas;
drop table if exists detalles;
create table clientes(
codigo serial,
nombre varchar(30),
domicilio varchar(30),
primary key(codigo)
);
create table facturas(
numero int not null,
fecha date,
codigocliente int not null,
primary key(numero)
);
create table detalles(
numerofactura int not null,
numeroitem int not null,
articulo varchar(30),
precio decimal(5,2),
cantidad int,
primary key(numerofactura,numeroitem)
);
insert into clientes(nombre,domicilio) values('Juan Lopez','Colon 123');
insert into clientes(nombre,domicilio) values('Luis Torres','Sucre 987');
insert into clientes(nombre,domicilio) values('Ana Garcia','Sarmiento 576');
select * from detalles;
insert into facturas values(1200,'2017-01-15',1);
insert into facturas values(1201,'2017-01-15',2);
insert into facturas values(1202,'2017-01-15',3);
insert into facturas values(1300,'2017-01-20',1);
insert into detalles values(1200,1,'lapiz',1,100);
insert into detalles values(1200,2,'goma',0.5,150);
insert into detalles values(1201,1,'regla',1.5,80);
insert into detalles values(1201,2,'goma',0.5,200);
insert into detalles values(1201,3,'cuaderno',4,90);
insert into detalles values(1202,1,'lapiz',1,200);
insert into detalles values(1202,2,'escuadra',2,100);
insert into detalles values(1300,1,'lapiz',1,300);
select f.*,
(select sum(d.precio*cantidad)
from detalles as d
where f.numero=d.numerofactura) as total
from facturas as f;
select td.numero,c.nombre,td.total
from clientes as c
join (select f.*,
(select sum(d.precio*cantidad)
from detalles as d
where f.numero=d.numerofactura) as total
from facturas as f) as td
on td.codigocliente=c.codigo;