Académique Documents
Professionnel Documents
Culture Documents
Introduo
Sistemas de bancos de dados so amplamente utilizados no desenvolvimento de sistemas Sua finalidade principal prover o armazenamento dos dados utilizados por uma ou mais aplicaes de software Dentre os diversos modelos existentes, os bancos de dados relacionais so os mais utilizados Existem diversos sistemas gerenciadores de banco de dados relacionais (SGBDR):
PostgreSQL, Firebird, Interbase, MS SQL Server, MySQL, Oracle, DB2, ...
2
O modelo relacional
Considera que os dados so armazenados em tabelas bidimensionais compostas por colunas e linhas
Cada coluna, ou campo, possui um tipo de dado especfico como INTEIRO, TEXTO, DATA. As colunas fazem parte da estrutura da tabela. Cada linha, ou registro, representa um conjunto de dados armazenados na tabela. Quando uma tabela est vazia, significa que ela no possui linhas.
As operaes sobre as tabelas e os dados so realizados atravs de uma linguagem padronizada denominada SQL (Structured Query Language)
3
Exemplos de tabelas
VINHOS SAFRA 1986 1987 1987 TIPO BRANCO TINTO BRANCO MARCA CLOS DE NOBLES CLOS DE NOBLES ALMADEN CORD.
DISCIPLINAS CODIGO INF003 INF011 MAT002 MAT008 NOME ALGORITMOS INFORMTICA BSICA CALCULO 1 ALGEBRA LINEAR CREDITOS 6 4 6 6
4
Chave primria
No modelo relacional, chaves so utilizadas para identificao, relacionamento e consulta de registros Chave primria o conjunto de colunas que identificam univocamente um registro
Consequentemente, em uma tabela no so permitidos valores duplicados para as colunas definidas como chave primria Uma coluna definida como chave primria tambm no pode conter o valor nulo, ou seja, um registro deve obrigatoriamente ter um valor aceitvel para o campo
5
INF003 INF011
MAT002 MAT008
6 4
6 6
ALUNOS
As colunas CODIGO e MATRICULA foram definidas como chave primria, portanto no pode haver dois alunos com a mesma matrcula ou duas disciplinas com o mesmo cdigo.
MATRICULA
20112035 20115698 20129874 19935501
NOME
ANDR MARTINS SILVA ANA CLARA FONSECA LCIA ALVES TELES BATISTA PEDRO DE LARA MARTINS
6
Chave estrangeira
o elo de ligao entre duas tabelas Quando queremos relacionar um registro da tabela A com um registro da tabela B, devemos definir, em A, uma coluna como chave estrangeira
A chave estrangeira deve ter o mesmo tipo da chave primria de B Em um registro de A, o contedo do campo chave estrangeira deve ser nulo ou igual a um dos valores existentes na chave primria de B
7
MAT002 MAT008
6 6
T008
COMPUTACAO
TURMAS CODIGO 20121056 20121108 DISCIPLINA INF003 MAT008 CURSO T008 E001 VAGAS 15 18
Linguagem SQL
Linguagem padro para a manipulao de bancos de dados relacionais
Padro ANSI, mas geralmente estendido por cada SGBDR
Criando Tabelas
CREATE TABLE <nome tabela> (<colunas> PRIMARY KEY (<nome coluna1, nome coluna2, ...>) [chaves estrangeiras]) Colunas so definidas com:
<Nome coluna> <tipo> [restries]
Exemplos
Tabela cursos
create table cursos (codigo char(4), nome char(30) not null unique, primary key (codigo))
Tabela disciplinas
create table disciplinas (codigo char(6), nome char(30) not null unique, creditos int not null, primary key (codigo))
Tabela turmas
create table turmas (codigo char(8), disciplina char(6) not null, curso char(4) not null, vagas int not null, primary key (codigo), foreign key (disciplina) references disciplinas, foreign key (curso) references cursos)
11
Exerccio 1
Escreva os comandos SQL para criar as seguintes tabelas:
Clientes: cdigo (chave primria), nome (obrigatrio), endereo, cidade, cep e uf. Produtos: cdigo (chave primria), descrio (obrigatrio e nico), unidade e valor unitrio (tipo decimal(10,2)) Vendedores: cdigo (chave primria), nome (obrigatrio), taxa de comisso (obrigatrio, decimal(4,2)), salario (obrigatrio, decimal(10,2)) Pedidos: nmero (chave primria), prazo de entrega (obrigatrio, int), cdigo do cliente (chave estrangeira), cdigo do vendedor (chave estrangeira) Itens_Pedido: nmero do pedido (chave primria e estrangeira), cdigo do produto (chave primria e estrangeira), quantidade (obrigatrio, decimal(10,2))
12
Criando registros
INSERT INTO <tabela> (<coluna1, coluna2, ...>) VALUES (<valor coluna1, valor coluna2, ...>) Exemplos:
insert into cursos (codigo, nome) values ('E001', 'MATEMTICA') insert into cursos (codigo, nome) values ('T008', 'COMPUTAO') insert into disciplinas (codigo, nome, creditos) values ('INF003', 'ALGORITMOS', 6) insert into disciplinas (codigo, nome, creditos) values ('MAT008', 'LGEBRA LINEAR', 6) insert into turmas (codigo, disciplina, curso, vagas) values ('20121056', 'INF003', 'T008', 15) insert into turmas (codigo, disciplina, curso, vagas) values ('20121108', 'MAT008', 'E001', 18)
13
Exerccio 2
Insira os seguintes registros nas respectivas tabelas
PRODUTOS CODIGO DESCRIO 25 77 31 78 13 45 53 22 Queijo Papel Chocolate Vinho Ouro Madeira Aucar Cano UNIDADE Kg m Und L g m SC m VALOR UNITRIO 0,97 1,05 0,87 8,00 26,18 12,50 1,20 0,65
14
Exerccio 2
CLIENTES CODIGO 720 260 410 180 NOME Ana Flvio Rodolfo Lvio ENDEREO Rua 17 n. 19 Av. Pres. Vargas 10 Largo da Lapa 27 Av. Beira Mar n. 1256 VENDEDORES CODIGO 209 101 720 240 11 NOME Jos Joo Batista Felipe Antnio Joo Silva TAXA DE COMISSO 0.03 0.03 0.08 0.03 0.05 SALRIO 1.800,00 2.650,00 4.600,00 9.500,00 2.780,00
15
UF RJ SP RJ SC
Exerccio 2
PEDIDOS NMERO 121 97 PRAZO DE ENTREGA 20 20 CDIGO CLIENTE 410 720 CDIGO VENDEDOR 209 101
101 137
148 98 105 111 103 91 138 127
15 20
20 20 15 20 20 20 20 10
720 720
720 410 180 260 260 260 260 410
101 720
101 209 240 240 11 11 11 11
16
Exerccio 2
Itens Pedido
NMERO PEDIDO 101 101 98 148 148 148 148 148 105 111 CDIGO PRODUTO 78 13 77 45 31 77 25 78 78 25 QUANTIDADE 18 5 5 8 7 3 10 30 10 10
17
CDIGO PRODUTO 78 53 77 22 77 53 13
QUANTIDADE 70 37 40 10 35 18 8
Selecionando registros
SELECT <coluna1, coluna2, ...> FROM <nome tabela> [WHERE <condies>]
Selecionando as descries de todos os produtos
select descricao from produtos
Operador LIKE
Trabalha sobre colunas do tipo caractere Aceita os caracteres curinga:
% (substitui uma cadeia de caracteres) _ (substitui um caractere)
Outros exemplos
Seleciona os produtos com unidade Kg ou g:
select * from produtos where unidade in ('Kg', 'g')
21
Exerccio 3
Escreva expresses select para as seguintes consultas:
a) b) c) d) Produto com cdigo igual a 77 Cdigo dos produtos com valor inferior a R$1,00 Clientes cujo nome termina com a letra o Nmeros dos pedidos referentes ao cliente Rodolfo e) Nome e UF de todos os clientes, com ordenao pelo nome
22
Juno de tabelas
utilizada na recuperao de registros com dados presentes em mais de uma tabela, como por exemplo:
Informaes do pedido juntamente com o nome do cliente Informaes do pedido juntamente com o nome do vendedor Itens de um pedido juntamente com a descrio de cada produto
Exerccio 4
Escreva expresses sql para as seguintes consultas:
a) Descrio do produto e quantidade dos itens relativos ao pedido de nmero 101 b) Nmeros dos pedidos relativos aos clientes do RJ c) Nomes dos clientes atendidos pelo vendedor Joo Silva d) Nmeros dos pedidos cujos itens contemplem produtos com valor unitrio acima de R$10,00 e) Descrio do produto, unidade, quantidade, valor unitrio e subtotal de cada item relativo ao pedido de nmero 138 f) Descrio dos produtos comercializados pelos vendedores Antnio e Felipe g) Descrio dos produtos comprados pelo cliente Ana
25
Funes de agregao
So funes que realizam algum clculo, gerando novas colunas na pesquisa Mximos e mnimos: MAX e MIN
Maior cdigo da tabela clientes
select max(codigo) from clientes
Soma: SUM
Quantidade total de ouro vendido em todos os pedidos
select sum(quantidade) from itens_pedido where cod_produto = 13
26
Funes de agregao
Mdia: AVG
Mdia dos salrios dos vendedores
select avg(salario) from vendedores
Funes de agregao
A funo de agregao produza um nico nmero no resultado da consulta. Para incluir outras colunas devemos utilizar a clusula GROUP BY
GROUP BY indica os conjuntos de registros sobre os quais a funo de agregao ser realizada
Exemplo: listar o nmero do pedido juntamente com sua quantidade de itens. Note que contagem realizada apenas para os registros que contm o mesmo nmero de pedido
select num_pedido, count(cod_produto) itens from itens_pedido group by num_pedido
28
Exerccio 5
Escreva consultas sql para obter as seguintes informaes:
a) b) c) d) e) f) g) Valor total gasto em compras pelo cliente Rodolfo Quantidade total de queijo vendida por Antnio Valor total de cada pedido Valor total de cada pedido e o nmero do pedido Nome dos clientes com o valor total gasto por cada um Nome dos clientes com o valor mdio gasto por cada um Nome dos vendedores juntamente com o valor recebido pelas comisses das vendas realizadas
29
Atualizando registros
UPDATE <tabela> SET <coluna1=valor, coluna2=valor, ...> [WHERE <condio>] Alterando a comisso de todos os vendedores para 0,04
update vendedores set taxa_comissao = 0.04
30
Excluindo registros
DELETE FROM <tabela> [WHERE <condicao>]
Excluindo todos os vendedores
delete from vendedores
Referncias
MACHADO, Felipe, ABREU, Maurcio. Projeto de Banco de Dados: uma viso prtica. 9 ed, So Paulo: rica, 1996.
32