Você está na página 1de 32

Introduo aos bancos de dados

relacionais
Curso de Tecnologia em Redes de Computadores
Programao para Redes

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 TIPO MARCA
1986 BRANCO CLOS DE NOBLES
1987 TINTO CLOS DE NOBLES
1987 BRANCO ALMADEN CORD.
4
DISCIPLINAS
CODIGO NOME CREDITOS
INF003 ALGORITMOS 6
INF011 INFORMTICA BSICA 4
MAT002 CALCULO 1 6
MAT008 ALGEBRA LINEAR 6
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
Exemplos de chaves primrias
6
DISCIPLINAS
CODIGO NOME CREDITOS
INF003 ALGORITMOS 6
INF011 INFORMTICA BSICA 4
MAT002 CALCULO 1 6
MAT008 ALGEBRA LINEAR 6
ALUNOS
MATRICULA NOME
20112035 ANDR MARTINS SILVA
20115698 ANA CLARA FONSECA
20129874 LCIA ALVES TELES BATISTA
19935501 PEDRO DE LARA MARTINS
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.
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
Exemplos de chaves estrangeiras
8
DISCIPLINAS
CODIGO NOME CREDITOS
INF003 ALGORITMOS 6
INF011 INFORMTICA BSICA 4
MAT002 CALCULO 1 6
MAT008 ALGEBRA LINEAR 6
CURSOS
CODIGO NOME
E001 MATEMATICA
E002 FISICA
T008 COMPUTACAO
TURMAS
CODIGO DISCIPLINA CURSO VAGAS
20121056 INF003 T008 15
20121108 MAT008 E001 18
Turma de ALGORITMOS para o
curso de COMPUTACAO
Turma de ALGEBRA LINEAR
para o curso de MATEMATICA
Linguagem SQL
Linguagem padro para a manipulao de
bancos de dados relacionais
Padro ANSI, mas geralmente estendido por cada
SGBDR
Vamos abordar parte dos subconjuntos:
DDL (Data Definition Language): comandos para
criao e alterao de tabelas e chaves
DML (Data Manipulation Language): comandos
para acesso, criao e modificao de registros

9
Criando Tabelas
CREATE TABLE <nome tabela>
(<colunas> PRIMARY KEY (<nome
coluna1, nome coluna2, ...>)
[chaves estrangeiras])
Colunas so definidas com:
<Nome coluna> <tipo> [restries]
Chaves estrangeiras so definidas com:
FOREIGN KEY (<nome coluna>)
REFERENCES <nome tabela>
10
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
14
PRODUTOS
CODIGO DESCRIO UNIDADE VALOR UNITRIO
25 Queijo Kg 0,97
77 Papel m 1,05
31 Chocolate Und 0,87
78 Vinho L 8,00
13 Ouro g 26,18
45 Madeira m 12,50
53 Aucar SC 1,20
22 Cano m 0,65
Exerccio 2
15
VENDEDORES
CODIGO NOME TAXA DE COMISSO SALRIO
209 Jos 0.03 1.800,00
101 Joo Batista 0.03 2.650,00
720 Felipe 0.08 4.600,00
240 Antnio 0.03 9.500,00
11 Joo Silva 0.05 2.780,00
CLIENTES
CODIGO NOME ENDEREO CIDADE CEP UF
720 Ana Rua 17 n. 19 Niteri 24358310 RJ
260 Flvio Av. Pres. Vargas 10 So Paulo 22763931 SP
410 Rodolfo Largo da Lapa 27 Rio de Janeiro RJ
180 Lvio Av. Beira Mar n. 1256 Florianpolis 30077500 SC
Exerccio 2
16
PEDIDOS
NMERO PRAZO DE ENTREGA CDIGO CLIENTE CDIGO VENDEDOR
121 20 410 209
97 20 720 101
101 15 720 101
137 20 720 720
148 20 720 101
98 20 410 209
105 15 180 240
111 20 260 240
103 20 260 11
91 20 260 11
138 20 260 11
127 10 410 11
Exerccio 2
Itens Pedido
17
NMERO
PEDIDO
CDIGO
PRODUTO
QUANTIDADE
101 78 18
101 13 5
98 77 5
148 45 8
148 31 7
148 77 3
148 25 10
148 78 30
105 78 10
111 25 10
NMERO
PEDIDO
CDIGO
PRODUTO
QUANTIDADE
111 78 70
103 53 37
91 77 40
138 22 10
138 77 35
138 53 18
137 13 8
Selecionando registros
SELECT <coluna1, coluna2, ...> FROM
<nome tabela> [WHERE <condies>]

Selecionando as descries de todos os produtos
select descricao from produtos

Selecionando cdigo e descrio de todos os produtos
select codigo, descricao from cursos

Selecionando todas as colunas de vendedores
select * from vendedores

18
Filtrando registros com where
Operadores de comparao: =, <> (diferena), >,
>=, <, <=
Operadores lgicos: AND, OR, NOT
Operador para faixa de valores: BETWEEN
Exemplos
select * from produtos where unidade =
m
select codigo from produtos where
unidade <> m and valor_unitario > 8.0
select nome from vendedores where
salario between 2000 and 4000
19
Operador LIKE
Trabalha sobre colunas do tipo caractere
Aceita os caracteres curinga:
% (substitui uma cadeia de caracteres)
_ (substitui um caractere)

Selecionando os vendedores com nome Joo:
select * from vendedores where nome like
'Joo%'

Selecionando os produtos cuja unidade tenha apenas um
caractere
select * from produtos where unidade like '_'

20
Outros exemplos
Seleciona os produtos com unidade Kg ou g:
select * from produtos where unidade in ('Kg', 'g')
Seleciona os clientes sem CEP
select * from clientes where cep is null
Seleciona os vendedores ordenando os registros, de forma crescente, pelo
salrio
select * from vendedores order by salario
Seleciona os vendedores ordenando os registros, de forma decrescente,
pelo salrio
select * from vendedores order by salario desc
Seleo com acrscio de coluna com valor calculado
select nome, (salario * 1.15) as novo_salario from
vendedores
Seleciona, sem repetio, todas as unidades em produtos
select distinct unidade from produtos

21
Exerccio 3
Escreva expresses select para as seguintes
consultas:
a) Produto com cdigo igual a 77
b) Cdigo dos produtos com valor inferior a R$1,00
c) Clientes cujo nome termina com a letra o
d) 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
Para tal vamos utilizar a clusula INNER JOIN
SELECT <coluna1, coluna2, ...> FROM
<tabela1> INNER JOIN <tabela2> ON <condio
de juno> [WHERE <condio>]
23
Juno de tabelas - Exemplos
Nomes dos clientes com seus nmeros de pedido
select nome, numero from clientes c inner join pedidos p
on c.codigo = p.cod_cliente

Como acima, mas apenas para o cliente com cdigo 410
select nome, numero from clientes c inner join pedidos p
on c.codigo = p.cod_cliente where c.codigo = 410

Informaes do pedido junto com o nome do vendedor
select numero, prazo_entrega, nome from pedidos p inner
join vendedores v on p.cod_vendedor = v.codigo

Nomes do cliente e do vendedor relativos ao pedido de nmero 98
select c.nome, v.nome from pedidos p inner join vendedores
v on p.cod_vendedor = v.codigo inner join clientes c on
p.cod_cliente = c.codigo where numero = 98
24
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
Menor salrio da tabela vendedores
select min(salario) from vendedores

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

Contagem de registros: COUNT
Quantidade pedidos atendidos pelo vendedor
Antnio
select count(numero) from pedidos where
cod_vendedor = 240
27
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) Valor total gasto em compras pelo cliente Rodolfo
b) Quantidade total de queijo vendida por Antnio
c) Valor total de cada pedido
d) Valor total de cada pedido e o nmero do pedido
e) Nome dos clientes com o valor total gasto por cada um
f) Nome dos clientes com o valor mdio gasto por cada um
g) 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

Aumentando em 5% o salrio de todos os vendedores
update vendedores set salario = (salario * 1.05)

Alterando o valor unitrio do produto papel para R$1,65
update produtos set valor_unitario = 1.65 where
codigo = 77

30
Excluindo registros
DELETE FROM <tabela> [WHERE <condicao>]

Excluindo todos os vendedores
delete from vendedores

Excluindo os clientes sem cep
delete from clientes where cep is
null
31
Referncias
MACHADO, Felipe, ABREU, Maurcio. Projeto de Banco de Dados: uma
viso prtica. 9 ed, So Paulo: rica, 1996.

32

Você também pode gostar