Sei sulla pagina 1di 27

Introdução

Sistemas de bancos de dados são amplamente


utilizados no desenvolvimento de sistemas.
Sua finalidade principal é prover o
armazenamento dos dados utilizados por uma ou
mais aplicações de software.
Dentre os diversos modelos existentes, os bancos
de dados relacionais são 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 são armazenados em
tabelas bidimensionais compostas por colunas e
linhas.
Cada coluna, ou campo, possui um tipo de dado
específico 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 não possui linhas.
As operações sobre as tabelas e os dados são
realizados através 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.

DISCIPLINAS
CODIGO NOME CREDITOS
INF003 ALGORITMOS 6
INF011 INFORMÁTICA BÁSICA 4
MAT002 CALCULO 1 6
MAT008 ALGEBRA LINEAR 6

4
Chave primária
No modelo relacional, chaves são utilizadas para
identificação, relacionamento e consulta de
registros.
Chave primária é o conjunto de colunas que
identificam univocamente um registro.
Consequentemente, em uma tabela não são
permitidos valores duplicados para as colunas
definidas como chave primária.
Uma coluna definida como chave primária também
não pode conter o valor nulo, ou seja, um registro
deve obrigatoriamente ter um valor aceitável para o
campo.

5
Exemplos de chaves primárias
DISCIPLINAS
CODIGO NOME CREDITOS
INF003 ALGORITMOS 6
INF011 INFORMÁTICA BÁSICA 4
MAT002 CALCULO 1 6
MAT008 ALGEBRA LINEAR 6

ALUNOS
As colunas CODIGO e MATRICULA MATRICULA NOME
foram definidas como chave
20112035 ANDRÉ MARTINS SILVA
primária, portanto não é
permitida a existência de dois 20115698 ANA CLARA FONSECA
alunos com a mesma matrícula ou 20129874 LÚCIA ALVES TELES BATISTA
duas disciplinas com o mesmo
19935501 PEDRO DE LARA MARTINS
código.
6
Chave estrangeira
É o elo de ligação entre duas tabelas.
Quando queremos indicar que um registro da
tabela B está relacionado a um registro da
tabela A, devemos definir, em B, uma coluna
como chave estrangeira.
A chave estrangeira deve ter o mesmo tipo da
chave primária definida em A.
Em um registro de B, o conteúdo do campo chave
estrangeira deve ser nulo ou igual a um dos
valores existentes na chave primária de A.
7
Exemplos de chaves estrangeiras
DISCIPLINAS CURSOS
CODIGO NOME CREDITOS CODIGO NOME
INF003 ALGORITMOS 6 E001 MATEMATICA
INF011 INFORMÁTICA BÁSICA 4 E002 FISICA
MAT002 CALCULO 1 6 T008 COMPUTACAO
MAT008 ALGEBRA LINEAR 6

TURMAS Turma de ALGORITMOS para


CODIGO DISCIPLINA CURSO VAGAS o curso de COMPUTACAO.
20121056 INF003 T008 15
20121108 MAT008 E001 18 Turma de ALGEBRA LINEAR
para o curso de MATEMATICA.
Chave estrangeira Chave estrangeira
relacionada à relacionada à
tabela DISCIPLINAS. tabela CURSOS. 8
Linguagem SQL
Linguagem padrão para a manipulação de
bancos de dados relacionais.
Padrão ANSI, mas geralmente estendido por cada
SGBDR.
Vamos abordar parte dos subconjuntos:
DDL (Data Definition Language): comandos para
criação e alteração de tabelas e chaves.
DML (Data Manipulation Language): comandos
para acesso, criação e modificação de registros.
9
Criando Tabelas
CREATE TABLE <nome tabela>
(<colunas> PRIMARY KEY (<nome
coluna1, nome coluna2, ...>)
[chaves estrangeiras])
Colunas são definidas com:
<Nome coluna> <tipo> [restrições]
Chaves estrangeiras são 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
Exercício 1
Escreva os comandos SQL para criar as seguintes tabelas:
Clientes: código (chave primária), nome (obrigatório), endereço,
cidade, cep e uf.
Produtos: código (chave primária), descrição (obrigatório e
único), unidade e valor unitário (tipo decimal(10,2)).
Vendedores: código (chave primária), nome (obrigatório), taxa
de comissão (obrigatório, decimal(4,2)), salario (obrigatório,
decimal(10,2)).
Pedidos: número (chave primária), prazo de entrega
(obrigatório, int), código do cliente (chave estrangeira), código
do vendedor (chave estrangeira).
Itens_Pedido: número do pedido (chave primária e estrangeira),
código do produto (chave primária e estrangeira), quantidade
(obrigatório, decimal(10,2)).

12
Criando registros
INSERT INTO <tabela> (<coluna1, coluna2, ...>) VALUES
(<valor coluna1, valor coluna2, ...>)

Exemplos:
insert into cursos (codigo, nome) values ('E001',
'MATEMÁTICA')
insert into cursos (codigo, nome) values ('T008',
'COMPUTAÇÃO')
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
Exercício 2
Insira os seguintes registros nas respectivas
tabelas:
PRODUTOS
CODIGO DESCRIÇÃO UNIDADE VALOR UNITÁRIO
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 Açucar SC 1,20
22 Cano m 0,65
14
Exercício 2
CLIENTES
CODIGO NOME ENDEREÇO CIDADE CEP UF
720 Ana Rua 17 n. 19 Niterói 24358310 RJ
260 Flávio Av. Pres. Vargas 10 São Paulo 22763931 SP
410 Rodolfo Largo da Lapa 27 Rio de Janeiro RJ
180 Lívio Av. Beira Mar n. 1256 Florianópolis 30077500 SC

VENDEDORES
CODIGO NOME TAXA DE COMISSÃO SALÁRIO
209 José 0,03 1.800,00
101 João Batista 0,03 2.650,00
720 Felipe 0,08 4.600,00
240 Antônio 0,03 9.500,00
11 João Silva 0,05 2.780,00 15
Exercício 2
PEDIDOS
NÚMERO PRAZO DE ENTREGA CÓDIGO CLIENTE CÓDIGO 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
16
Exercício 2
Itens Pedido
NÚMERO CÓDIGO QUANTIDADE NÚMERO CÓDIGO QUANTIDADE
PEDIDO PRODUTO PEDIDO PRODUTO
101 78 18 111 78 70
101 13 5 103 53 37
98 77 5 91 77 40
148 45 8 138 22 10
148 31 7 138 77 35
148 77 3 138 53 18
148 25 10 137 13 8
148 78 30 121 78 11
105 78 10 97 22 13
111 25 10 127 45 38
17
Selecionando registros
SELECT <coluna1, coluna2, ...> FROM
<nome tabela> [WHERE <condições>]

Selecionando as descrições de todos os produtos:


select descricao from produtos

Selecionando código e descrição 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 comparação: =, <> (diferença), >,
>=, <, <=
Operadores lógicos: 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 João:


select * from vendedores where nome like
'João%'

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
salário:
select * from vendedores order by salario
Seleciona os vendedores ordenando os registros, de forma decrescente,
pelo salário:
select * from vendedores order by salario desc
Seleção com acréscio de coluna com valor calculado:
select nome, (salario * 1.15) as novo_salario from
vendedores
Seleciona, sem repetição, todas as unidades em produtos:
select distinct unidade from produtos

21
Exercício 3
Escreva expressões select para as seguintes
consultas:
a) Produto com código igual a 77.
b) Código dos produtos com valor inferior a R$1,00.
c) Clientes cujo nome termina com a letra o.
d) Números dos pedidos referentes ao cliente
Rodolfo.
e) Nome e UF de todos os clientes, com ordenação
pelo nome.
22
Junção de tabelas
É utilizada na recuperação de registros com dados
presentes em mais de uma tabela, como por exemplo:
Informações do pedido juntamente com o nome do
cliente.
Informações do pedido juntamente com o nome do
vendedor.
Itens de um pedido juntamente com a descrição de cada
produto.
Para tal vamos utilizar a cláusula INNER JOIN:
SELECT <coluna1, coluna2, ...> FROM
<tabela1> INNER JOIN <tabela2> ON <condição
de junção> [WHERE <condição>]

23
Junção de tabelas - Exemplos
Nomes dos clientes com seus números 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 código 410:


select nome, numero from clientes c inner join pedidos p
on c.codigo = p.cod_cliente where c.codigo = 410

Informações 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 número 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
Exercício 4
Escreva expressões sql para as seguintes consultas:
a) Descrição do produto e quantidade dos itens relativos ao
pedido de número 101.
b) Números dos pedidos relativos aos clientes do RJ.
c) Nomes dos clientes atendidos pelo vendedor João Silva.
d) Números dos pedidos cujos itens contemplem produtos
com valor unitário acima de R$10,00.
e) Descrição do produto, unidade, quantidade, valor
unitário e subtotal de cada item relativo ao pedido de
número 138.
f) Descrição dos produtos comercializados pelos
vendedores Antônio e Felipe.
g) Descrição dos produtos comprados pelo cliente Ana.

25
Atualizando registros
UPDATE <tabela> SET <coluna1=valor, coluna2=valor, ...> [WHERE
<condição>]

Alterando a comissão de todos os vendedores para 0,04:


update vendedores set taxa_comissao = 0.04

Aumentando em 5% o salário de todos os vendedores:


update vendedores set salario = (salario * 1.05)

Alterando o valor unitário do produto papel para R$1,65:


update produtos set valor_unitario = 1.65 where
codigo = 77

26
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

27
Referências
MACHADO, Felipe, ABREU, Maurício. Projeto de Banco de Dados: uma
visão prática. 9ª ed, São Paulo: Érica, 1996.

28

Potrebbero piacerti anche