create table editora (
cod_editora int not null,
descricao varchar (30) not null,
endereco varchar (30) null,
constraint pk_editora
primary key (cod_editora)
);
create table autor (
cod_autor int not null,
nome varchar (30) not null,
sexo char (1) not null,
data_nascimento date not null,
constraint pk_autor
primary key (cod_autor)
);
create table livro(
cod_livro int not null,
isbn varchar (20) not null,
titulo varchar (45) not null,
num_edicao int not null,
preco float not null,
cod_editora int not null,
constraint pk_primary
primary key (cod_livro),
constraint fk_livro_editora
foreign key (cod_editora)
references editora (cod_editora)
);
create table livro_autor (
cod_livro int not null,
cod_autor int not null,
constraint pk_livro_autor
primary key (cod_livro, cod_autor),
constraint fk_la_livro
foreign key (cod_livro)
references livro (cod_livro),
constraint fk_la_autor
foreign key (cod_autor)
references autor (cod_autor)
);
insert into editora (cod_editora, descricao, endereco)
values (1, 'Campus', 'Rua do Timbó'),
(2, 'Abril', null),
(3, 'Editora Teste', null);
insert into livro
(cod_livro,isbn, titulo, num_edicao, preco, cod_editora)
values (1, '12345','Banco de Dados',3, 70.00, 1),
(2, '35790','SGBD',1, 85.00, 2),
(3, '98765','Redes de Computadores',2, 80.00,2);
insert into autor
(cod_autor, nome, sexo, data_nascimento)
values (1,'João','M','1970/01/01'),
(2, 'Maria', 'F', '1974/05/17'),
(3,'José', 'M', '1977/10/10'),
(4, 'Carla', 'F', '1964/12/08');
insert into livro_autor
(cod_livro, cod_autor)
values (1,1),(1,2),(2,2),(2,4),(3,3);
--1. Atualizar o endereço da Editora Campus para ‘Av. ACM’
update editora
set endereco = 'Av. ACM'
where cod_editora = 1;
select * from editora
--2. Atualizar os preços dos livros em 10%
update livro
set preco = preco*1.1;
--3. Excluir a ‘Editora Teste’
delete from editora
where cod_editora = 3;
--4. Apresentar o nome e data de nascimento de
-- todos os autores
select nome, data_nascimento
from autor;
--5. Apresentar o nome e a data de nascimento
--dos autores por ordem de nome.
select nome, data_nascimento
from autor
order by nome;
select data_nascimento+1 as tchutchuca
from autor
order by tchutchuca
--6. Apresentar o nome e a data de nascimento
--dos autores do sexo feminino ordenados pelo nome.
select nome, data_nascimento
from autor
where sexo = 'F'
order by nome
--7. Apresentar o nome das editoras que não tem o
--endereço cadastrado.
select descricao
from editora
where endereco is null;
select descricao
from editora
where endereco is not null;
--8. Apresentar o título do livro e o nome da sua
--editora
select l.titulo, e.descricao
from editora as e, livro as l
where e.cod_editora = l.cod_editora;
select l.titulo, e.descricao
from editora as e inner join livro as l
on (e.cod_editora = l.cod_editora)
--9. Apresentar o título do livro e o nome da sua
--editora. Caso haja alguma editora sem livro publicado,
--informar os dados da editora com valores nulos para
--os livros.
insert into editora (cod_editora, descricao, endereco)
values (3,'teste',null);
select l.titulo, e.descricao
from editora as e left join livro as l
on (e.cod_editora = l.cod_editora)
select l.titulo, e.descricao
from editora as e left join livro as l
on (e.cod_editora = l.cod_editora)
where l.titulo is null;
--10. Apresentar o título do livro e o nome dos
--seus autores
select l.titulo, a.nome
from livro as l inner join livro_autor as la
on (l.cod_livro = la.cod_livro)
inner join autor as a
on (la.cod_autor = a.cod_autor)
--11. Apresentar o nome da editora e o nome dos autores
-- que já publicaram algum livro na editora.
select e.descricao, a.nome
from editora as e inner join livro as l
on (e.cod_editora = l.cod_editora)
inner join livro_autor as la
on (l.cod_livro = la.cod_livro)
inner join autor as a
on (la.cod_autor = a.cod_autor)
select distinct a.nome
from editora as e inner join livro as l
on (e.cod_editora = l.cod_editora)
inner join livro_autor as la
on (l.cod_livro = la.cod_livro)
inner join autor as a
on (la.cod_autor = a.cod_autor)
--12. Apresentar o título dos livros que começam
--a string ‘Banco’.
select l.titulo
from livro as l
where l.titulo like 'Banco%'
--13. Apresentar o título dos livros que
--tem a string ‘do’.
select l.titulo
from livro as l
where l.titulo like '%do%'
--14. Apresentar o nome de cada livro e
--seu preço reajustado em 5%
select l.titulo, l.preco*1.05 as preco
from livro as l
--15. Apresentar o nome dos autores que
-- nasceram no mês de outubro
select a.nome
from autor as a
where extract (month from a.data_nascimento) = 10
16. Apresentar o número de livros do acervo
17. Apresentar o número de autores do livro ‘Banco de Dados’
18. Apresentar o somatório dos preços dos livros do acervo
19. Apresentar a média de preços dos livros da editora Campus
20. Apresentar o maior preço dentre todos os livros do acervo.
21. Apresentar a data de nascimento do autor mais velho
22. Apresentar o número de livros por editora
23. Apresentar o somatório e média de preço dos livros por editora
24. Apresentar o número de autores por livro, mas apenas dos livros que
possuem mais de 1 autor
25. Apresentar a média de preços geral por editora, mas apenas as editoras que
possuem média maior que R$ 80,00
26. Apresentar o nome dos autores que não são autores do livro Banco de
Dados
27. Apresentar a quantidade de livros da editora Campus e Abril em colunas
diferentes.