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 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

Exemplos de chaves primrias


DISCIPLINAS CODIGO NOME CREDITOS

INF003 INF011
MAT002 MAT008

ALGORITMOS INFORMTICA BSICA


CALCULO 1 ALGEBRA LINEAR

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

Exemplos de chaves estrangeiras


DISCIPLINAS CODIGO INF003 INF011 NOME ALGORITMOS INFORMTICA BSICA CREDITOS 6 4 CODIGO E001 E002 CURSOS NOME MATEMATICA FISICA

MAT002 MAT008

CALCULO 1 ALGEBRA LINEAR

6 6

T008

COMPUTACAO

TURMAS CODIGO 20121056 20121108 DISCIPLINA INF003 MAT008 CURSO T008 E001 VAGAS 15 18

Turma de ALGORITMOS para o curso de COMPUTACAO

Turma de ALGEBRA LINEAR para o curso de MATEMATICA


8

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
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

CIDADE Niteri So Paulo Rio de Janeiro Florianpolis

CEP 24358310 22763931 30077500

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

NMERO PEDIDO 111 103 91 138 138 138 137

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

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) 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

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) 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

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