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; select e.descricao from editora as e where e.cod_editora not in (select cod_editora from livro) select e.descricao from editora as e where not exists (select * from livro as l where e.cod_editora = l.cod_editora) --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 select count (*) as qtde from livro as l select count (distinct cod_editora) from livro as l select * from livro select count (endereco) from editora select * from livro --17. Apresentar o número de autores do livro ‘Banco de Dados’ select count (*) as qtde 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) where l.titulo like 'Banco de Dados' --18. Apresentar o somatório dos preços dos livros do acervo select sum (preco) as somatorio from livro as l --19. Apresentar a média de preços dos livros da editora Campus select avg (preco) as somatorio from editora as e inner join livro as l on (e.cod_editora = l.cod_editora) where e.descricao = 'Campus' --20. Apresentar o maior preço dentre todos os livros do acervo. select max (preco) from livro as l select titulo from livro where preco = (select max (preco)from livro as l) --21. Apresentar a data de nascimento do autor mais velho select min (a.data_nascimento) from autor as a select a.nome, a.data_nascimento from autor as a where a.data_nascimento in ( select min (a.data_nascimento) from autor as a) --22. Apresentar o número de livros por editora select e.descricao, count (l.cod_livro) as qtde from editora as e left join livro as l on (e.cod_editora = l.cod_editora) group by e.cod_editora --23. Apresentar o somatório e média de preço dos --livros por editora select e.descricao, sum (l.preco) as somatorio, avg (l.preco) as media from editora as e left join livro as l on (e.cod_editora = l.cod_editora) group by e.cod_editora --24. Apresentar o número de autores por livro, --mas apenas dos livros que possuem mais de 1 autor select l.titulo, count (*) as qtde 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) group by l.cod_livro select * from (select l.titulo, count (*) as qtde 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) group by l.cod_livro) as teste where qtde > 1 select l.titulo, count (*) as qtde 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) group by l.cod_livro having count(*) > 1 --25. Apresentar a média de preços geral por editora, --mas apenas as editoras que possuem média maior que R$ 80,00 select e.descricao, avg (preco) from editora as e inner join livro as l on e.cod_editora = l.cod_editora group by e.cod_editora having avg (preco) > 80 --26. Apresentar o nome dos autores que não são --autores do livro Banco de Dados select nome from autor where cod_autor not in ( select la.cod_autor from livro as l inner join livro_autor as la on l.cod_livro = la.cod_livro where l.titulo like 'Banco de Dados') --27. Apresentar a quantidade de livros da editora Campus e --Abril em colunas diferentes. select sum (CAMPUS) as CAMPUS, sum (ABRIL) as ABRIL from (select count (*) as CAMPUS, 0 as ABRIL from editora as e inner join livro as l on e.cod_editora = l.cod_editora where e.descricao = 'Campus' UNION select 0 as CAMPUS, count (*) as ABRIL from editora as e inner join livro as l on e.cod_editora = l.cod_editora where e.descricao = 'Abril') as teste