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_LIVRO 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','01.01.1970'), (2,'Maria', 'F', '17.05.1974'), (3,'José', 'M', '10.10.1977'), (4,'Carla', 'F', '08.12.1964'); 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; --2. Atualizar os preços dos livros em 10% UPDATE LIVRO SET PRECO = PRECO * 1.10; --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 A.NOME, A.DATA_NASCIMENTO FROM AUTOR AS A ORDER BY A.NOME --6. Apresentar o nome e a data de nascimento dos autores do sexo feminino --ordenados pelo nome. SELECT A.NOME, A.DATA_NASCIMENTO FROM AUTOR AS A WHERE A.SEXO = 'F' ORDER BY A.NOME --7. Apresentar o nome das editoras que não tem o endereço cadastrado. SELECT E.DESCRICAO FROM EDITORA AS E WHERE E.ENDERECO IS 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. SELECT L.TITULO, E.DESCRICAO FROM EDITORA AS E LEFT JOIN LIVRO AS L ON (E.COD_EDITORA = L.COD_EDITORA) SELECT E.DESCRICAO FROM EDITORA AS E LEFT JOIN LIVRO AS L ON (E.COD_EDITORA = L.COD_EDITORA) WHERE L.ISBN IS NULL SELECT E.DESCRICAO FROM EDITORA AS E WHERE E.COD_EDITORA NOT IN (SELECT L.COD_EDITORA FROM LIVRO AS L) SELECT E.DESCRICAO FROM EDITORA AS E WHERE NOT EXISTS ( SELECT * FROM LIVRO AS L WHERE L.COD_EDITORA = E.COD_EDITORA) DELETE FROM EDITORA WHERE DESCRICAO IN (SELECT E.DESCRICAO FROM EDITORA AS E WHERE E.COD_EDITORA NOT IN (SELECT L.COD_EDITORA FROM LIVRO AS L)) UPDATE EDITORA SET ENDERECO = "BLABLABLA" WHERE DESCRICAO IN (SELECT E.DESCRICAO FROM EDITORA AS E LEFT JOIN LIVRO AS L ON (E.COD_EDITORA = L.COD_EDITORA) WHERE L.ISBN 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 DESCRICAO FROM EDITORA AS E, LIVRO AS L --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%' SELECT L.TITULO FROM LIVRO AS L WHERE UPPER(L.TITULO) LIKE 'BANCO%' --- COMEÇA COM QUALQUER COISA (dois caracteres), --tem nc depois e termina com qualquer coisa SELECT L.TITULO FROM LIVRO AS L WHERE L.TITULO LIKE '__nc%' SELECT L.TITULO FROM LIVRO AS L WHERE L.TITULO LIKE '%s' SELECT L.TITULO FROM LIVRO AS L WHERE L.TITULO LIKE '%B_' --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 SELECT * FROM LIVRO AS L WHERE PRECO>=70 AND PRECO <=85 SELECT * FROM LIVRO AS L WHERE PRECO BETWEEN 70 AND 85 --16. Apresentar o número de livros do acervo SELECT COUNT (*) AS TOTAL FROM LIVRO AS L --17. Apresentar o número de autores do livro --‘Banco de Dados’ SELECT L.TITULO, COUNT (*) AS QTDE_AUTOR FROM LIVRO AS L INNER JOIN LIVRO_AUTOR AS LA ON (L.COD_LIVRO = LA.COD_LIVRO) WHERE L.COD_LIVRO = 1 GROUP BY L.TITULO SELECT L.TITULO, COUNT (*) AS QTDE_AUTOR FROM LIVRO AS L INNER JOIN LIVRO_AUTOR AS LA ON (L.COD_LIVRO = LA.COD_LIVRO) WHERE L.COD_LIVRO = 1 GROUP BY L.COD_LIVRO --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 MEDIA_CAMPUS FROM LIVRO AS L WHERE L.COD_EDITORA = 1 --20. Apresentar o maior preço dentre todos --os livros do acervo. SELECT MAX (PRECO) AS MAIOR FROM LIVRO AS L SELECT L.TITULO FROM LIVRO AS L WHERE L.PRECO IN (SELECT MAX (PRECO) AS MAIOR FROM LIVRO AS L2) --21. Apresentar a data de nascimento do autor --mais velho SELECT MIN (DATA_NASCIMENTO) AS DATA FROM AUTOR AS A SELECT * FROM EDITORA --22. Apresentar o número de livros por editora SELECT E.DESCRICAO, COUNT (COD_LIVRO) AS QTDE_LIVRO 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 (PRECO) AS SOMATORIO, AVG (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_AUTOR FROM LIVRO AS L INNER JOIN LIVRO_AUTOR AS LA ON (L.COD_LIVRO = LA.COD_LIVRO) GROUP BY L.TITULO HAVING COUNT(*) > 1 SELECT * FROM (SELECT L.TITULO, COUNT (*) AS QTDE_AUTOR FROM LIVRO AS L INNER JOIN LIVRO_AUTOR AS LA ON (L.COD_LIVRO = LA.COD_LIVRO) GROUP BY L.TITULO) AS TABELA WHERE QTDE_AUTOR > 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) AS MEDIA FROM EDITORA AS E LEFT 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 * FROM AUTOR AS A WHERE A.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.COD_LIVRO = 1) --27. Apresentar a quantidade de livros da editora Campus e Abril em colunas --diferentes. SELECT SUM (CAMPUS) AS CAMPUS, SUM (ABRIL) AS ABRIL, SUM (ED_TESTE) AS ED_TESTE FROM (SELECT COUNT(L.COD_LIVRO) AS CAMPUS, 0 AS ABRIL, 0 AS ED_TESTE FROM LIVRO AS L RIGHT JOIN EDITORA AS E ON (L.COD_EDITORA = E.COD_EDITORA) WHERE E.COD_EDITORA = 1 GROUP BY E.COD_EDITORA UNION SELECT 0 AS CAMPUS, COUNT(L.COD_LIVRO) AS ABRIL, 0 AS ED_TESTE FROM LIVRO AS L RIGHT JOIN EDITORA AS E ON (L.COD_EDITORA = E.COD_EDITORA) WHERE E.COD_EDITORA = 2 GROUP BY E.COD_EDITORA UNION SELECT 0 AS CAMPUS, 0 AS ABRIL, COUNT(L.COD_LIVRO) AS ED_TESTE FROM LIVRO AS L RIGHT JOIN EDITORA AS E ON (L.COD_EDITORA = E.COD_EDITORA) WHERE E.COD_EDITORA = 3 GROUP BY E.COD_EDITORA) AS TABELA