Вы находитесь на странице: 1из 15

UNIVERSIDADE ESTADUAL DE MARING DEPARTAMENTO DE INFORMATICA BANCO DE DADOS

Formulao, implementao e testes de consultas em SQL

Giovani Bruno de Oliveira Barbosa Stephanny Andressa de Oliveira Joo Carlos Zayatz

Maring, 2011

Sumrio
1 Especificao de requisitos......................................................................................................4 2 Diagrama Entidade relacionamento .....................................................................................4 3 Tabelas......................................................................................................................................4 4 Dicionrio de dados.................................................................................................................5 4.1 Legenda............................................................................................................................6 5 Consultas..................................................................................................................................7 5.1.1 Duas consultas quaisquer;........................................................................................7 5.1.2 Duas consultas utilizando juno interna;................................................................7 5.1.3 Consulta com o uso de UNION;...............................................................................7 5.1.4 Consulta com o uso de EXCEPT ou sua simulao;................................................8 5.1.5 Consulta com o uso de INTERSECT;......................................................................8 5.1.6 Consultas considerando subconsultas que retornam um conjunto de valores utilizando:..........................................................................................................................8 5.1.7 Consulta considerando uma juno externa;............................................................9 5.1.8 Consulta considerando uma juno externa esquerda;..........................................9 5.1.9 Consulta considerando uma ou mais funes agregadas..........................................9 5.1.10 Consulta usando uma funo agregada com clusula GROUP BY;.....................10 5.1.11 Consulta usando uma funo agregada com clusula GROUP BY e HAVING...10 6 Cdigo SQL...........................................................................................................................10 6.1 Seo para Criao de Base de Dados ...........................................................................10 6.2 Seo de Tabelas ............................................................................................................11

6.3 Seo de Controles ........................................................................................................12 6.4 Seo de ndices ............................................................................................................12 6.5 Seo de Insero de Dados ..........................................................................................13 7 Notas finais............................................................................................................................15

1 Especificaoderequisitos
O sistema na qual a base de dados dar suporte ser baseado em uma biblioteca de escola. O acervo da biblioteca composto por exemplares, dos tipos livros, jornais, revistas, gibis e publicaes peridicas. Cada exemplar caracterizado por um ou mais autores, um titulo, editora, data de publicao e nmero de srie. Cada unidade de livro, revista, etc. consiste em um exemplar (cpia), sendo numerados sequencialmente (exemplar 1, 2, 3, etc.). Para emprestar um livro, necessrio ser associado da biblioteca (usurio). Cada emprstimo pode ter um ou mais exemplares, sendo que para cada um realizado registrada a data de emprstimo e data de previso de devoluo. Cada usurio possui um cdigo, um nome e telefone.

2 DiagramaEntidaderelacionamento

3 Tabelas
id_autor nom e_autor 1 M ac hado de A ss is 2 Cas im iro de A breu 3 M onteiro Lobato 4 Luis Fernando V erss im o
nome_editora 1 Atlas 2 Casa do livro 3 Globo Livros 4 Ministrio da Cultura 5 Editora de Jornal Tabela 2: Editora id_editora

Tabela 1: Autor

data_empres data_prev 1 2006-12-02 2006-12-10 Tabela 3: Emprestimo id_exemplar titulo 1 Dom Casmurro 2 Poesias 3 Reinaes de Narizinho 4 El Clarin Tabela 4: Exemplar nometipo 1 Romance 2 Poesia 3 Infantil 4 Referncia 5 Receita 6 Filme 7 Revista 8 Jornal Tabela 5: Tipo id_tipo

id_emprest

data_devo 2006-09-10

datapubli 1899-12-20 1800-01-03 1950-10-10 2011-09-11

nome_autor Machado de Assis Casimiro de Abreu Machado de Assis --

edicao nome_editora 1 Atlas 3 Casa do Livro 1 Globo Livros 9999 Editora de Jornal

nome_usuario telefone 1 Joao Souza 32569845 2 Maria Olivia 32547856 3 Abelardo Cruz 31568457 4 Celso Antonio 81524578 5 Carolina de Freitas 99562132 6 Jackson da Silva 99335540 Tabela 6: Usuario

id_usuario

4 Dicionriodedados
Entidade: Autor Atributo Id_autor Nome_autor Entidade: Editora Atributo Id_editora Nome_editora Entidade: Tipo Atributo Id_tipo Nometipo Entidade: Usurio Atributo Id_usuario Nome_usuario Telefone Entidade: Emprestimo Atributo Domnio Tamanho Domnio Numrico Texto Numrico Tamanho 30 20 Domnio Numrico Texto Tamanho 30 Domnio Numrico Texto Tamanho 30 Domnio Numrico Texto Tamanho 30

Id_emprest Id_usuario Data_emprest Data_prev Data_devo Entidade: Exemplar Atributo Id_exemplar Id_editora Id_tipo titulo datapubli edicao Entidade: Pertence Atributo Id_exemplar Id_emprest Entidade: Escreve Atributo Id_exemplar Id_autor Entidade: Tipo Atributo Id_tipo Nometipo

Numrico Numrico Data Data Data

Domnio Numrico Numrico Numrico Texto Data Texto

Tamanho

40 10

Domnio Numrico Numrico

Tamanho

Domnio Numrico Numrico Domnio Numrico Texto Tamanho 30

Tamanho

Descrio Referencia o tipo de exemplar (ex. livro)

4.1 Legenda

Entidade: o nome da entidade que foi definida no MER Atributo: so os atributos da entidade citada Domnio: podem ser numrico, texto, data e lgico (booleano) Tamanho: define a quantidade de caracteres que sero necessrios para armazenar o seu contedo. Geralmente o tamanho definido apenas para atributos de domnio texto.

Descrio: opcional e pode ser usado para descrever o que aquele atributo

5 Consultas
5.1.1 Duasconsultasquaisquer; Listar todos os emprstimos feitos Select * from emprestimo
id_emprest data_empres data_prev 1 2006-12-02 2006-12-10 data_devo 2006-09-10

Listar todos os telefones dos usurios Select telefone from usuario telefone 32569845 32547856 31568457 81524578 99562132 99335540 5.1.2 Duasconsultasutilizandojunointerna; Todos os exemplares com suas respectivas editoras Select a.titulo, b.nome_editora From exemplar a Join editora b on a.id_editora b.id_editora id_exemplar id_editora 1 1 2 2 3 3 4 5 Listar todos os exemplares com seus respectivos tipos Select a.titulo, b.nometipo From exemplar a Join tipo b on a.id_tipo=b.id_tipo id_exemplar id_tipo 1 1 2 2 3 3 4 8 5.1.3 ConsultacomousodeUNION;

Selecionar todos os cdigos de emprstimos que foram devolvidos entre 09/09/2006 e 02/01/2007

select id_emprest from emprestimo where data_devo =>'2006-09-09' union select id_emprest from emprestimo where data_devo<='2007-01-02'
id_emprest 1

5.1.4

ConsultacomousodeEXCEPTousuasimulao; Selecionar todos os exemplares menos os do tipo Jornal Select id_tipo, titulo From exemplar Except (select id_tipo from tipo where nometipo like jornal) id_exemplar titulo 1 Dom Casmurro 2 Poesias 3 Reinaes de Narizinho

5.1.5

ConsultacomousodeINTERSECT; Selecionar todo os exemplares do tipo Livro ou Revista

Select id_tipo, titulo From exemplares Intersect (select id_tipo from tipo where nometipo like livro or nometipo like revista) id_exemplar titulo 4 El Clarin

5.1.6

Consultas considerando subconsultas que retornam um conjunto de valores utilizando: IN ou NOT IN; Nome de todos os usurios que fizeram pelo menos um emprstimo Select nome_usuario From usuario Where id_usuario in (select id_usuario from usuempres)
nome_usuario Abelardo Cruz

ANY; Nome de todos os usurios que no fizeram emprestmo

Select nome_usuario From usuario Where id_usuario <>any (select id_usuario from usuempres)
nome_usuario Joao Souza Maria Olivia Celso Antonio Carolina de Freitas Jackson da Silva

EXIST ou NOT EXIST; Buscar todos os emprstimos cujos exemplares foram devolvidos Select id_emprest From emprestimo Where exists (select id_emprest from emprestimo where data_devo is not
id_emprest 1

null)

5.1.7

Consultaconsiderandoumajunoexterna; Listar todos os exemplares e suas editoras Select a.titulo, b.nome_editora From exemplar a Outer join editora b
titulo Dom Casmurro Poesias Reinaes de Narizinho El Clarin nome_editora Atlas Casa do Livro Globo Livros Editora de Jornal

5.1.8

Consultaconsiderandoumajunoexternaesquerda;

Listar os exemplares com data de publicao pertencente ao ano de 1800 e seus respectivos tipos Select a.titulo, b.nome_tipo From exemplar a Left join tipo b where datapubli=>(year:'1800')
titulo Poesias nome_tipo Poesias

5.1.9

Consultaconsiderandoumaoumaisfunesagregadas Contar o nmero de usurios cadastrados na biblioteca Select count (*) From usuario
count 6

5.1.10

ConsultausandoumafunoagregadacomclusulaGROUPBY;

Listar todos os tipos cadastrados,e a quantidade, agrupados pelo nome do tipo Select nometipo, count(id_tipo) From tipo Group by nometipo
nometipo Filme Infantil Jornal Poesia Receita Referncia Revista Romance count(id_tipo) 1 1 1 1 1 1 1 1

5.1.11 ConsultausandoumafunoagregadacomclusulaGROUPBYeHAVING. Listar todos exemplares que tenham data de publicao cadastrada Select titulo From exemplar Group by titulo Having datapubli not null
titulo Dom Casmurro Poesias Reinaes de Narizinho El Clarin

6 CdigoSQL
6.1 SeoparaCriaodeBasedeDados
create database "Biblioteca";

10

6.2 SeodeTabelas
create table autor ( id_autor mediumint not null auto_increment, nome_autor varchar(30) not null, constraint ID_autor_ID primary key (id_autor)); create table editora ( id_editora mediumint not null auto_increment, nome_editora varchar(30) not null, constraint ID_editora_ID primary key (id_editora)); create table emprestimo ( id_emprest mediumint not null auto_increment, data_empres date not null, data_prev date not null, data_devo date not null, constraint ID_emprestimo_ID primary key (id_emprest)); create table escreve ( id_exemplar mediumint not null auto_increment, id_autor numeric(10) not null, constraint ID_escreve_ID primary key (id_exemplar, id_autor)); create table exemplar ( id_exemplar mediumint not null auto_increment, titulo char(40) not null, datapubli date not null, nome_autor char(40), edicao numeric(4) not null, nome_editora char(40) not null, constraint ID_exemplar_ID primary key (id_exemplar)); create table exempredit ( id_exemplar numeric(10) not null, id_editora numeric(10) not null, constraint ID_exempredit_ID primary key (id_exemplar, id_editora)); create table exemplivro ( id_exemplar numeric(10) not null, id_tipo numeric(10) not null, constraint ID_exemplivro_ID primary key (id_exemplar, id_tipo)); create table usuempres ( id_emprest numeric(10) not null, id_usuario numeric(10) not null, constraint ID_usuempres_ID primary key (id_emprest, id_usuario)); create table pertence ( id_exemplar numeric(10) not null, id_emprest numeric(10) not null, constraint ID_pertence_ID primary key (id_emprest, id_exemplar)); create table tipo ( id_tipo mediumint not null auto_increment,

11

nometipo varchar(30) not null, constraint ID_tipo_ID primary key (id_tipo)); create table usuario ( id_usuario mediumint not null auto_increment, nome_usuario varchar(30) not null, telefone numeric (20) not null, constraint ID_usuario_ID primary key (id_usuario));

6.3 SeodeControles
alter table escreve add constraint REF_escre_autor_FK foreign key (id_autor) references autor; alter table escreve add constraint REF_escre_exemp foreign key (id_exemplar) references exemplar; alter table exempredit add constraint REF_exemp_edito_FK foreign key (id_editora) references editora; alter table exempredit add constraint REF_exemp_exemp_1 foreign key (id_exemplar) references exemplar; alter table exemplivro add constraint REF_exemp_tipo_FK foreign key (id_tipo) references tipo; alter table exemplivro add constraint REF_exemp_exemp foreign key (id_exemplar) references exemplar; alter table usuempres add constraint REF_usuem_usuar_FK foreign key (id_usuario) references usuario; alter table usuempres add constraint REF_usuem_empre foreign key (id_emprest) references emprestimo; alter table pertence add constraint REF_perte_empre foreign key (id_emprest) references emprestimo; alter table pertence add constraint REF_perte_exemp_FK foreign key (id_exemplar) references exemplar;

12

6.4 Seodendices
create unique index ID_autor_IND on autor (id_autor); create unique index ID_editora_IND on editora (id_editora); create unique index ID_emprestimo_IND on emprestimo (id_emprest); create unique index ID_escreve_IND on escreve (id_exemplar, id_autor); create index REF_escre_autor_IND on escreve (id_autor); create unique index ID_exemplar_IND on exemplar (id_exemplar); create unique index ID_exempredit_IND on exempredit (id_exemplar, id_editora); create index REF_exemp_edito_IND on exempredit (id_editora); create unique index ID_exemplivro_IND on exemplivro (id_exemplar, id_tipo); create index REF_exemp_tipo_IND on exemplivro (id_tipo); create unique index ID_usuempres_IND on usuempres (id_emprest, id_usuario); create index REF_usuem_usuar_IND on usuempres (id_usuario); create unique index ID_pertence_IND on pertence (id_emprest, id_exemplar); create index REF_perte_exemp_IND on pertence (id_exemplar); create unique index ID_tipo_IND on tipo (id_tipo); create unique index ID_usuario_IND on usuario (id_usuario);

6.5 SeodeInserodeDados
IInsert into autor values (0, 'Machado de Assis'); Insert into autor

13

values (0, 'Casimiro de Abreu'); Insert into autor values (0, 'Monteiro Lobato'); Insert into autor values (0, 'Luis Fernando Verssimo'); Insert into editora values (0, 'Atlas'); Insert into editora values (0, 'Casa do livro'); Insert into editora values (0, 'Globo Livros'); Insert into editora values (0, 'Ministrio da Cultura'); Insert into editora values (0, 'Editora de Jornal'); Insert into exemplar values (0, 'Dom Casmurro', '1899-12-20', 'Machado de Assis', '1', 'Atlas'); Insert into exemplar values (0, 'Poesias', '1800-01-03', 'Casimiro de Abreu', '3', 'Casa do Livro'); Insert into exemplar values (0, 'Reinaes de Narizinho', '1950-10-10', 'Machado de Assis', '1', 'Globo Livros'); Insert into exemplar values (0, 'El Clarin', '2011-09-11', '--', '20110911', 'Editora de Jornal'); Insert into exemplivro values (1,1); Insert into exemplivro values (2,2); Insert into exemplivro values (3,3); Insert into exemplivro values (4,8); Insert into exempredit values (1,1); Insert into exempredit values (2,2); Insert into exempredit values (3,3); Insert into exempredit values (4,5); Insert into escreve values (1, 1); Insert into escreve values (2, 2); Insert into escreve values (3, 3); Insert into tipo values (0, 'Romance'); Insert into tipo values (0, 'Poesia'); Insert into tipo values (0, 'Infantil'); Insert into tipo values (0, 'Referncia'); Insert into tipo values (0, 'Receita'); Insert into tipo values (0, 'Filme'); Insert into tipo

14

values (0, 'Revista'); Insert into tipo values (0, 'Jornal'); Insert into usuario values (0, 'Joao Souza','32569845'); Insert into usuario values (0, 'Maria Olivia','32547856'); Insert into usuario values (0, 'Abelardo Cruz','31568457'); Insert into usuario values (0, 'Celso Antnio','81524578'); Insert into usuario values (0, 'Carolina de Freitas','99562132'); Insert into usuario values (0, 'Jackson da Silva','99335540'); Insert into emprestimo values (0, '2006-12-02' , '2006-12-10' , '2006-09-10'); Insert into usuempres values (1, 3); Insert into pertence values (2, 1);

7 Notasfinais
Para a construo da estrutura de tal banco de dados foi utilizados os softwares de DBMain 9.1.4 para MS Windows e para realizao dos testes, implantao e correes optou-se pela utilizao do MySQL Query Browser 1.2.12 para Linux e SQLiteman 1.2.2. O sistema foi definido nos padres MySQL 5.0 e as consultas foram testadas em servidor local.

15