Your SlideShare is downloading. ×
Exemplo e caso prático do uso de base de dados
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Exemplo e caso prático do uso de base de dados

2,127
views

Published on

Exemplo e caso prático do uso de bases de dados relacionais …

Exemplo e caso prático do uso de bases de dados relacionais
SGBDR SQLite e o exemplo de uma biblioteca pessoal
Luis Borges Gouveia
V2.0 - Fevereiro de 2015

Published in: Education

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,127
On Slideshare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
4
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Um exemplo do uso de bases de dados relacionais SQLite e a exploração SQL Luis Borges Gouveia V2.0, Fevereiro de 2015
  • 2. Para as práticas • Utilização do um SGBD relacional – http://www.sqlite.org – Software livre, open source e sem custos, de domínio público (opensource, freeware, public domain) – Disponível para os sistemas operativos: Linux, MS Windows e MAC OS – Permite a criação de bases de dados de fácil utilização e é adotado em inúmeras aplicações: Dropbox, Firefox, Skype e Adobe Acrobat – Motor de base de dados fiável e de pequena dimensão
  • 3. Iniciar o SQLite • O SQLite é um SGBD de interface de linha de comando (baseado num só ficheiro executável que funciona isolado) que é muito fácil de instalar e usar (não necessita de servidor ou de um cliente) – MS Windows: ir para http://www.sqlite.org/download.html e considerar a sessão Precompiled Binaries for Windows. Descarregar o ficheiro .zip do link command-line shell (não o DLL ou o da analysis). Extrair o ficheiro sqlite3.exe e colocar o mesmo onde for pretendido – o desktop pode ser um local. Basta agora um duplo clique no ficheiro extraído para ser executado – MAC OS X: ir para http://www.sqlite.org/download.html e considerar a sessão Precompiled Binaries for Mac OS X. Descarregar o ficheiro .zip file do link command-line shell (não o link analysis). Extrair o ficheiro sqlite3 e colocar o mesmo onde for pretendido – o desktop pode ser um local. Basta agora um duplo clique no ficheiro extraído para ser executado
  • 4. A escolha do executável correto
  • 5. Depois de extrair o ficheiro… • Aspeto do ícone do executável SQLite • Aspeto da janela da linha de comando
  • 6. A linha de comando (.help)
  • 7. Reutilizar bases de dados no SQLite… • Depois de utilizar o SGBD e para concluir a sessão, deve utilizar o comando '.exit‘ (ou ‘.quit’ que, aparentemente, é o mesmo…) – Tenha em atenção que o estado da base de dados não é gravado entre sessões, pelo que será necessário repetir os comandos e carregar os dados novamente, para cada sessão – Claro que é possível forçar o SQL a manter o estado de base dados entre sessões • Para garantir a preservação de estado entre sessões, o SQLite pode ser executado tendo como argumento a indicação da base dados que se pretende abrir – Pode ser utilizada a linha de comando do sistema operativo e executar o SQLite com indicação do nome do ficheiro para a base de dados a criar ou a utilizar: SQLite3 nome_basedados (exemplo: sqlite3 teste.db) – Este comando força o SQLite a abrir um ficheiro onde contém a base dados com o nome indicado. Caso o ficheiro ainda não exista, cria um. O estado da base de dados irá sendo gravado e pode ser reutilizado depois
  • 8. Interagir no SQLite • Uma vez iniciado o SQLite, existem três opções para correr consultas: – teclados diretamente, um de cada vez, usando a linha de comando – Copiados e colocados (copy & paste) de um outro local, na linha de comando – Executados de um ficheiro externo (script)
  • 9. Uso da linha de comando • Experimentar e obter a resposta, de comando a comando – Comandos SQLite: iniciados por um ponto e listados em .help – Comandos SQL, de acordo com a norma e finalizados por ; (ponto e vírgula) • Um exemplo de um manual sobre a 4GL SQL para o SQLite (http://zetcode.com/databases/sqlitetutorial/)
  • 10. Copiar e colar na linha de comando • uma forma fácil de replicar comandos de linha, a partir de manuais ou da produção de textos em processadores de texto ou outros editores mais evoluídos, é possível e até desejável – Selecionar e copiar o texto e, na janela de comando, colar
  • 11. Copiar e colar na linha de comando • Para assegurar que é possível realizar a operação de copiar e colar numa janela de comando, é necessário garantir que a opção de modo de edição rápida esteja selecionada (na barra de título deve escolher a opção Propriedades do menu acionado pela tecla direita do rato)
  • 12. Executar um ficheiro de script • uma forma clássica de reproduzir e correr sequências complexas de comandos é a utilização de scripts. O SQLite facilita a sua leitura por via do comando ‘.read’ .read primeiroSQLscript.sql – Em que o ficheiro de texto de nome primeiroSQLscript.sql está colocado no diretório do executável SQLite3 e contém o script a correr /* As duas primeiras linhas formatam os resultados do comando SELECT */ /* Para obter uma lista de comandos específicos do SQLite, digite '.help' */ .mode columns .headers on .nullvalue NULL drop table if exists Tabela; create table Tabela (Atributo1 text, Atributo2 text); insert into Tabela values ('Olá,', 'mundo!'); select * from Tabela;
  • 13. Considere o seguinte contexto • Existe a necessidade de registo de uma pequena coleção de livros associada a uma biblioteca pessoal – Pretende-se o registo de livros, indicando o respetivo título, ISBN e língua em que está escrito – É necessário associar os respetivos autores, considerando o seu nome e nacionalidade – Deve ser igualmente registada a editora (nome) – Deve ser considerado o registo de compra, indicando o livro, o valor e a data de aquisição – Adicionalmente, as relações de quem escreveu o livro (associando o livro e o autor), quem publicou (associando o livro e a editora)
  • 14. Um modelo E-R do contexto proposto • Consideram-se: – quatro entidades: editora, livro, autor e compra – Três relações binárias: publicado, escrito e pago • Publicado: uma editora publica vários livros e um livro é publicado por várias editoras • Escrito: um livro é escrito por vários autores e um autor escreve vários livros • Pago: um livro é pago numa compra e uma compra paga um livro
  • 15. Esquema relacional do contexto • Livro (idl, titulo, lingua, isbn) • Autor (ida, nome, nacionalidade) • Editora (ide, nome) • Escrito (idl, ida) • Publicado (idl, ide) • Compra (cmp, idl, valor, data)
  • 16. Criar a base de dados… • Na linha de comando do SO – Sqlite3 biblio.db • Criar a tabela Livro (idl, título, língua, isbn) – Create table livro(idl integer primary key, titulo text, lingua text, isbn text); • Criar a tabela Autor (ida, nome, nacionalidade) – Create table autor(ida integer primary key, nome text, nacionalidade text); • Criar a tabela Editora (ide, nome) – Create table editora(ide integer primary key, nome text); • Criar a tabela Escrito (idl, ida) – Create table escrito(esc integer primary key autoincrement, idl integer, ida integer); • Criar a tabela Publicado (idl, ide) – Create table publicado(pub integer primary key autoincrement, idl integer, ide integer); • Criar a tabela Compra (cmp, idl, valor, data) – Create table compra(cmp integer primary key autoincrement, idl integer, valor real, data date);
  • 17. Informação sobre a bd biblio.db • Testar os comandos: .databases (lista as bases de dados consideradas no ficheiro biblio.db), .tables (lista as tabelas associadas com a base de dados) e .schema (que lista o esquema das tabelas da base de dados)
  • 18. Teste do modelo criado • Para testar o modelo criado é tomada uma coleção de livros, conforme descrita em http://homepage.ufp.pt/lmbg/lg_livros.htm – Contém até 2013, 12 livros – Foram adicionados mais 3 livros em 2015
  • 19. Inserir dados na base de dados • Inserir livros… [Livro (idl, título, língua, isbn)] – Insert into livro values (1, ‘Sistemas de Informação de Apoio à Gestão’, ‘Português’, ‘9728589433’); – Insert into livro values (2, ‘Cidades e Regiões Digitais: impacte nas cidades e nas pessoas’, ‘Português’, ‘9728830033’); – Insert into livro values (3, ‘Informática e Competências Tecnológicas para a Sociedade da Informação’, ‘Português’, ‘9728830041’); – Insert into livro values (4, ‘Readings in Information Society ’, ‘Inglês’, ‘9728830149’); – Insert into livro values (5, ‘Sociedade da Informação: balanço e implicações ’, ‘Português’, ‘9728830181’); – Insert into livro values (6, ‘O local e-government: a governação digital na autarquia’, ‘Português’, ‘9728589417’); – Insert into livro values (7, ‘Informática e Competências Tecnológicas para a Sociedade da Informação 2ed’, ‘Português’, ‘9728830300’); – Insert into livro values (8, ‘Negócio Electrónico - conceitos e perspectivas de desenvolvimento’, ‘Português’, ‘972858962X’); – Insert into livro values (9, ‘Gestão da Informação na Biblioteca Escolar ’, ‘Português’, ‘9789899533004’); – Insert into livro values (10, ‘A virtual environment to share knowledge’, ‘Inglês’, ‘9783639129861’); – Insert into livro values (11, ‘Ciência da Informação: contributos para o seu estudo’, ‘Português’, ‘9789896430900’); – Insert into livro values (12, ‘Repensar a Sociedade da Informação e do Conhecimento no Início do Século XXI’, ‘Português’, ‘9789726186953’); • Os dados de 2015… – Insert into livro values(13, ‘Gestão da Informação em Museus: uma contribuição para o seu estudo’, ‘Português’, ‘9789899901394’); – Insert into livro values(14, ‘Web 2.0 and Higher Education. A psychological perspective’, Inglês’, ‘9783659683466’); – Insert into livro values(15, ‘Contribuições para a discussão de um modelo de Governo Electrónico Local para Angola’ , ‘Português’, ‘9789899933200’);
  • 20. Inserir dados na base de dados • Inserir autores… [Autor (ida, nome, nacionalidade)] – Insert into autor values(1, ‘Luis Borges Gouveia’, ’Português’); – Insert into autor values(2, ‘João Ranito’, ’Português’); – Insert into autor values(3, ‘Nuno Magalhães Ribeiro’, ’Português’); – Insert into autor values(4, ‘Paulo Rurato’, ’Português’); – Insert into autor values(5, ‘Sofia Gaio’, ’Português’); – Insert into autor values(6, ‘Rui Moreira’, ’Português’); – Insert into autor values(7, ‘Margarida Bairrão’, ’Português’); – Insert into autor values(8, ‘Judite Gonçalves de Freitas’, ’Português’); – Insert into autor values(9, ‘António Borges Regedor’, ’Português’); – Insert into autor values(10, ‘José Dias Coelho’, ’Português’); • Dados de 2015 – Insert into autor values(11, ‘Paula Moura’, ‘Português’); – Insert into autor values(12, ‘Luis Cunha’, ‘Português’); – Insert into autor values(13, ‘Pereira Alfredo’, ‘Angolano’);
  • 21. Inserir dados na base de dados • Inserir editoras… [Editora (ide, nome)] – Insert into editora values(1, ‘SPI - Principia’); – Insert into editora values(2, ‘Edições Universidade Fernando Pessoa’); – Insert into editora values(3, ‘Edições GestKnowing’); – Insert into editora values(4, ‘VDM – Verlag Dr. Muller’); – Insert into editora values(5, ‘Sílabo’); • Dados de 2015 – Insert into editora values(6, ‘Green Lines Instituto’); – Insert into editora values(7, ‘Lambert Academic Publishing’); – Insert into editora values(8, ‘Kwigia Editora’);
  • 22. Inserir dados na base de dados • Associar livros a autores… [Escrito (idl, ida)] – Insert into escrito values(1, 1, 1); – Insert into escrito values(2, 1, 2); – Insert into escrito values(3, 2, 1); – Insert into escrito values(4, 3, 3); – Insert into escrito values(5, 3, 1); – Insert into escrito values(6, 3, 4); – Insert into escrito values(7, 4, 1); – Insert into escrito values(8, 4, 5); – Insert into escrito values(9, 5, 1); – Insert into escrito values(10, 5, 5); – Insert into escrito values(11, 6, 1); – Insert into escrito values(12, 7, 3); – Insert into escrito values(13, 7, 1); – Insert into escrito values(14, 7, 4); – Insert into escrito values(15, 7, 6); – Insert into escrito values(16, 8, 1); – Insert into escrito values(17, 9, 7); – Insert into escrito values(18, 9, 1); – Insert into escrito values(19, 10, 1); – Insert into escrito values(20, 11, 8); – Insert into escrito values(21, 11, 1); – Insert into escrito values(22, 11, 9); – Insert into escrito values(23, 12, 10); – Insert into escrito values(24, 12, 1); • Dados de 2015 – Insert into escrito values(25, 13, 11); – Insert into escrito values(26, 13, 1); – Insert into escrito values(27, 14, 1); – Insert into escrito values(28, 14, 12); – Insert into escrito values(29, 15, 13); – Insert into escrito values(30, 15, 1);
  • 23. Inserir dados na base de dados • Associar livros a editoras… [Publicado (idl, ide)] – Insert into publicado values(1, 1, 1); – Insert into publicado values(2, 2, 2); – Insert into publicado values(3, 3, 2); – Insert into publicado values(4, 4, 2); – Insert into publicado values(5, 5, 2); – Insert into publicado values(6, 6, 1); – Insert into publicado values(7, 7, 2); – Insert into publicado values(8, 8, 1); – Insert into publicado values(9, 9, 3); – Insert into publicado values(10, 10, 4); – Insert into publicado values(11, 11, 2); – Insert into publicado values(12, 12, 5); • Dados de 2015 – Insert into publicado values(13, 13, 6); – Insert into publicado values(14, 13, 7); – Insert into publicado values(15, 13, 8);
  • 24. Inserir dados na base de dados • Inserir compras… [Compra (cmp, idl, valor, data)] – Insert into compra values(1, 1, 15, ‘2004-12-12’); – Insert into compra values(2, 2, 12, ‘2003-11-12’); – Insert into compra values(3, 3, 10, ‘2003-10-20’); – Insert into compra values(4, 4, 7, ‘2004-04-20’); – Insert into compra values(5, 5, 14, ‘2004-06-15’); – Insert into compra values(6, 6, 15, ‘2004-12-12’); – Insert into compra values(7, 7, 10, ‘2003-10-26’); – Insert into compra values(8, 8, 15, ‘2006-12-10’); – Insert into compra values(9, 9, 15, ‘2007-03-10’); – Insert into compra values(10, 10, 75, ‘2009-02-05’); – Insert into compra values(11, 11, 10, ‘2012.06.18’); – Insert into compra values(12, 12, 24, ‘2012-09-10’); • Dados de 2015 – Insert into compra values(13, 13, 25, ‘2015-01-10’); – Insert into compra values(14, 14, 54, ‘2015-01-25’); – Insert into compra values(15, 15, 17, ‘2015-01-17’);
  • 25. Obter o esquema da base de dados • Obter o esquema da base de dados biblio, utilizando o comando .schema
  • 26. Obter uma cópia da base dados • De forma a poder replicar a estrutura e conteúdos da base de dados é possível obter a sequência de comandos SQL, atráves de .dump – Para obter a listagem num ficheiro de texto, deve ser redirecionado o output, com base no comando .output nome_do_ficheiro, antes do uso do comando .dump (após o comando, deve redirecionar novamente o output para o ecran, utilizando .output stdout) – O exemplo do dump da base de dados biblio.db, ao lado… PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE livro(idlinteger primary key, titulo text, lingua text, isbn text); INSERT INTO "livro" VALUES(1,'Sistemas de Informa‡Æo para GestÆo','Portuguˆs','9728589433'); INSERT INTO "livro" VALUES(2,'Cidades e RegiäesDigitais: impacte nas cidadese nas pessoas','Portuguˆs','9728830033'); INSERT INTO "livro" VALUES(3,'Inform tica e Competˆncias Tecnol¢gicas para a Sociedade daInforma‡Æo','Portuguˆs','9728830041'); INSERT INTO "livro" VALUES(4,'Readings in Information Society ','Inglˆs','9728830149'); INSERT INTO "livro" VALUES(5,'Sociedade da Informa‡Æo: balan‡o e implica‡äes ','Portuguˆs','9728830181'); INSERT INTO "livro" VALUES(6,'O local e-government: a governa‡Æo digitalna autarquia','Portuguˆs','9728589417'); INSERT INTO "livro" VALUES(7,'Inform tica e Competˆncias Tecnol¢gicas para a Sociedade daInforma‡Æo 2ed','Portuguˆs','9728830300'); INSERT INTO "livro" VALUES(8,'Neg¢cio Electr¢nico - conceitose perspectivasde desenvolvimento','Portuguˆs','972858962X'); INSERT INTO "livro" VALUES(9,'GestÆo da Informa‡Æo na Biblioteca Escolar ','Portuguˆs','9789899533004'); INSERT INTO "livro" VALUES(10,'A virtual environment to share knowledge','Inglˆs','9783639129861'); INSERT INTO "livro" VALUES(11,'Ciˆncia da Informa‡Æo: contributos para o seu estudo','Portuguˆs','9789896430900'); INSERT INTO "livro" VALUES(12,'Repensar a Sociedadeda Informa‡Æo e do Conhecimento no In¡cio do S‚culo XXI','Portuguˆs','9789726186953'); CREATE TABLE autor(ida integer primary key, nome text, nacionalidadetext); INSERT INTO "autor" VALUES(1,'Luis Borges Gouveia','Portuguˆs'); INSERT INTO "autor" VALUES(2,'JoÆo Ranito','Portuguˆs'); INSERT INTO "autor" VALUES(3,'Nuno MagalhÆesRibeiro','Portuguˆs'); INSERT INTO "autor" VALUES(4,'Paulo Rurato','Portuguˆs'); INSERT INTO "autor" VALUES(5,'Sofia Gaio','Portuguˆs'); INSERT INTO "autor" VALUES(6,'Rui Moreira','Portuguˆs'); INSERT INTO "autor" VALUES(7,'Margarida BairrÆo','Portuguˆs'); INSERT INTO "autor" VALUES(8,'Judite Gon‡alves de Freitas','Portuguˆs'); INSERT INTO "autor" VALUES(9,'Ant¢nio Borges Regedor','Portuguˆs'); INSERT INTO "autor" VALUES(10,'Jos‚ Dias Coelho','Portuguˆs'); CREATE TABLE editora(ide integer primary key, nome text); INSERT INTO "editora" VALUES(1,'SPI - Principia'); INSERT INTO "editora" VALUES(2,'Edi‡äes UniversidadeFernando Pessoa'); INSERT INTO "editora" VALUES(3,'Edi‡äes GestKnowing'); INSERT INTO "editora" VALUES(4,'VDM - Verlag Dr. Muller'); INSERT INTO "editora" VALUES(5,'S¡labo'); CREATE TABLE escrito(esc integer primary key autoincrement,idl integer, ida integer); INSERT INTO "escrito" VALUES(1,1,1); INSERT INTO "escrito" VALUES(2,1,2); INSERT INTO "escrito" VALUES(3,2,1); INSERT INTO "escrito" VALUES(4,3,3); INSERT INTO "escrito" VALUES(5,3,1); INSERT INTO "escrito" VALUES(6,3,4); INSERT INTO "escrito" VALUES(7,4,1); INSERT INTO "escrito" VALUES(8,4,5); INSERT INTO "escrito" VALUES(9,5,1); INSERT INTO "escrito" VALUES(10,5,5); INSERT INTO "escrito" VALUES(11,6,1); INSERT INTO "escrito" VALUES(12,7,3); INSERT INTO "escrito" VALUES(13,7,1); INSERT INTO "escrito" VALUES(14,7,4); INSERT INTO "escrito" VALUES(15,7,6); INSERT INTO "escrito" VALUES(16,8,1); INSERT INTO "escrito" VALUES(17,9,7); INSERT INTO "escrito" VALUES(18,9,1); INSERT INTO "escrito" VALUES(19,10,1); INSERT INTO "escrito" VALUES(20,11,8); INSERT INTO "escrito" VALUES(21,11,1); INSERT INTO "escrito" VALUES(22,11,9); INSERT INTO "escrito" VALUES(23,12,10); INSERT INTO "escrito" VALUES(24,12,1); CREATE TABLE publicado(pubinteger primary key autoincrement,idl integer, ide integer); INSERT INTO "publicado"VALUES(1,1,1); INSERT INTO "publicado"VALUES(2,2,2); INSERT INTO "publicado"VALUES(3,3,2); INSERT INTO "publicado"VALUES(4,4,2); INSERT INTO "publicado"VALUES(5,5,2); INSERT INTO "publicado"VALUES(6,6,1); INSERT INTO "publicado"VALUES(7,7,2); INSERT INTO "publicado"VALUES(8,8,1); INSERT INTO "publicado"VALUES(9,9,3); INSERT INTO "publicado"VALUES(10,10,4); INSERT INTO "publicado"VALUES(11,11,2); INSERT INTO "publicado"VALUES(12,12,5); CREATE TABLE compra(cmp integer primary key autoincrement,idl integer, valor real, data date); INSERT INTO "compra" VALUES(1,1,15.0,'jan 12 2004'); INSERT INTO "compra" VALUES(2,2,12.0,'set 11 2003'); INSERT INTO "compra" VALUES(3,3,10.0,'out 20 2003'); INSERT INTO "compra" VALUES(4,4,7.0,'apr 20 2004'); INSERT INTO "compra" VALUES(5,5,14.0,'jun 15 2004'); INSERT INTO "compra" VALUES(6,6,15.0,'dez 12 2004'); INSERT INTO "compra" VALUES(7,7,10.0,'out 26 2003'); INSERT INTO "compra" VALUES(8,8,15.0,'dez 10 2006'); INSERT INTO "compra" VALUES(9,9,15.0,'mar 10 2007'); INSERT INTO "compra" VALUES(10,10,75.0,'fev 5 2009'); INSERT INTO "compra" VALUES(11,11,10.0,'jun 18 2012'); INSERT INTO "compra" VALUES(12,12,24.0,'set 10 2012'); DELETE FROM sqlite_sequence; INSERT INTO "sqlite_sequence"VALUES('escrito',24); INSERT INTO "sqlite_sequence"VALUES('publicado',12); INSERT INTO "sqlite_sequence"VALUES('compra',12); COMMIT;
  • 27. Alguns exercícios com base no comando Select • Quantas compras estão registadas? – select count(*) from compra; • Qual o valor total dos livros comprados? – select sum(valor) from compra; • Qual o valor mínimo de compra registado? – select min(valor) from compra; • Qual o valor máximo de compra registado? – select max(valor) from compra; • Diferença entre o maior e o menor valor de compra? – select max(valor)-min(valor) from compra; • Valor médio das compras registadas? – select sum(valor)/count(*) from compra; …ou (o resultado é igual, mas exige o uso de menos funções – select avg(valor) from compra;
  • 28. Mais alguns exercícios… • Listar os títulos adquiridos por ordem crescente de valor? – select titulo, valor, data from compra, livro where compra.idl=livro.idl order by valor; – …e por ordem decrescente? select titulo, valor, data from compra, livro where compra.idl=livro.idl order by valor desc; – …e ordenados por data mais recente, primeiro? select titulo, valor, data from compra, livro where compra.idl=livro.idl order by data desc; …saiu estranho o output? Tentar colocando antes do comando SQL, o comando .width 30 10 10 – …e listar os titulos cujo valor de compra é de menos de 14 euros select titulo, valor, data from compra, livro where compra.idl=livro.idl and valor < 14 order by data desc;
  • 29. Mais alguns exercícios… • Listar os títulos existentes, indicando o número de anos de antiguidade – select titulo, valor, date(‘now’)-data from compra, livro where compra.idl=livro.idl order by data desc; – …e o número médio de anos das compras efetuadas? Select avg(date)’now’)-data) from compra, livro where compra.idl=livro.idl; • Listar por ordem mais recente, os títulos de todas as compras realizadas de valor maior que 14 euros e cuja antiguidade seja menor ou igual a 5 anos – Select titulo, valor from compra, livro where compra.idl=livro and valor > 14 and (date(‘now’)-data) <= 5 order by data desc
  • 30. Mais alguns exercícios… • Listar, para todos os autores, os respetivos títulos e editoras em que publicaram – select autor.nome, titulo, editora.nome from livro, autor, editora, escrito, publicado where escrito.idl=livro.idl and escrito.ida=autor.ida and publicado.idl=livro.idl and publicado.ide=editora.ide order by autor.nome; • Listar, para todos os autores, o número de livros que publicaram e que estão na base de dados – select autor.nome, count(*) from autor, escrito where escrito.ida=autor.ida group by escrito.ida order by autor.nome; – …ordenada pelo número de publicações… select autor.nome, count(*) from autor, escrito where escrito.ida=autor.ida group by escrito.ida order by count(*); • Listar, para todos os livros, o número de autores da obra – select titulo, count(*) from livro, autor, escrito where autor.ida=escrito.idl and livro.idl=escrito.idl group by livro.idl order by titulo; – …ordenar as obras pelo número crescente de autores select titulo, count(*) from livro, autor, escrito where autor.ida=escrito.idl and livro.idl=escrito.idl group by livro.idl order by count(*);
  • 31. Desafio: tarefa 4 (resolver as seguintes consultas) • Listar os livros disponíveis, indicando Titulo, editora, preço e isbn • Listar as línguas das obras disponíveis, indicando o número de obras associadas a cada uma das línguas existentes • Contar o número de livros existentes • Contar o número de livros existentes por ano de compra • Listar as editoras existentes, indicando o número de livros por cada editora • Contar o número de diferentes autores, existentes na base de dados • Contar o número de nacionalidades distintas • Listar as nacionalidades, indicando o número de autores para cada uma delas • Listar as editoras, indicando o número de livros publicados por cada • Indicar o valor de livros comprados por autor • Indicar o valor de livros comprados por editora • Indicar o valor de livros comprados por ano • Indicar o número de compras efetuadas por ano • Listar as compras efetuadas por editora • Listar as compras efetuadas por língua e ordenadas por editora