jueves, 4 de junio de 2020

Subconsultas - Ejercicios realizados en Clase

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;

miércoles, 3 de junio de 2020

Modelo Entidad Relación y Modelo Relacional



Modelo Entidad Relación: Qué es? - Para que sirve? Herramientas para elaborarlo y un ejemplo. Favor incluir en el blog - Trabajo Independiente - 30 %

Script del taller realizado en clase

create table libros(
cod_libro int not null,
nombre varchar (30) not null,
genero varchar (20) not null,
ISBN numeric (10) not null,
anho int not null,
idioma varchar not null,
cod_autor int not null,
cod_editorial int not null,
CONSTRAINT pk_cod_libro PRIMARY KEY (cod_libro));
 
insert into libros values (10, 'Lo que el viento se llevó','Drama',4321,1990, 'Portugués',20,30);
insert into libros values (11, 'Penélope','Ficción',9999,2001, 'Español',21,33);
insert into libros values (12, 'Bases de Datos Relacionales','Académico',8888,1980, 'Español',20,30);
insert into libros values (13, 'Top Story','Animados',5555,2010, 'Inglés',22,33);
insert into libros values (14, 'Canibal','Terror',2222,2016, 'Español',22,32);


select * from editorial;

create table usuario(
cod_usuario int NOT null,
RUT numeric(20)null,
nombre varchar(30)null,
CONSTRAINT pk_cod_usuario PRIMARY KEY (cod_usuario)
);

insert into usuario values (1121,578,'Daniel Castellanos');
insert into usuario values (2351,321,'Andres Palacios');
insert into usuario values (4470,890,'Ferney Ballesteros');

create table autor(
cod_autor int null,
nom_autor varchar(30) null,
CONSTRAINT pk_cod_autor PRIMARY KEY (cod_autor)
);

insert into autor values (20,'Mario Puzo');
insert into autor values (21,'Isabella Portilla');
insert into autor values (22,'Mario Mendoza');

create table editorial(
cod_editorial int NOT null,
nom_editorial varchar(30) null,
ciudad_editorial varchar(30) null,
nom_contacto varchar(50),
anho int NOT null,
CONSTRAINT pk_cod_editorial PRIMARY KEY (cod_editorial)
);

insert into editorial values (30,'Androide','Silicon Valley','Ricardo Ernesto',1991);
insert into editorial values (31,'El Mundo','Madrid','Daniel Amado',2000);
insert into editorial values (32,'Planeta','Bogota','David Gonzalez',1999);
insert into editorial values (33,'Biblioteca mundial','Lima','Camila Trespalacios',1988);