Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

21/09/2010
1
Prof. Esp. André Ricardo Jovetta
1Programação em Banco de Dados
� Logo abaixo temos um exemplo de um banco de dados 
de uma empresa da área bancária:
◦ agencia = (nome_agencia, cidade_agencia, ativo)
◦ cliente = (nome_cliente, rua_cliente, cidade_cliente)
◦ emprestimo = (numero_emprestimo, nome_agencia, quantia)
◦ tomador = (nome_cliente, numero_emprestimo)
◦ conta = (numero_conta, nome_agencia, saldo)
◦ depositante = (nome_cliente, numero_conta)
2Programação em Banco de Dados
� A estrutura básica de uma expressão em SQL consiste em 
três cláusulas: select, from e where.
◦ A cláusula select corresponde á operação de projeção da álgebra relacional. 
Ela é usada para relacionar os atributos desejados no resultado de uma 
consulta.
◦ A cláusula from corresponde à operação de produto cartesiano da álgebra 
relacional. Ela associa a relações que serão pesquisadas durante a evolução 
de uma expressão.
◦ A cláusula where corresponde à seleção do predicado da álgebra relacional. 
Ela consiste em um predicado envolvendo atributos da relação que aparece 
na cláusula from
3Programação em Banco de Dados
� O Resultado de uma consulta de SQL é, naturalmente, uma 
relação. Consideremos uma consulta simples usando nosso 
exemplo de banco:
� “encontre os nomes de todas as agências da relação empréstimo.”
select nome_agencia
from emprestimo
4Programação em Banco de Dados
21/09/2010
2
� Nos casos em que desejamos forçar a eliminação de duplicidade, 
podemos inserir a palavra distinct depois de select. Poderemos 
reescrever a consulta anterior da seguinte forma:
Select distinct nome_agencia
from emprestimo
5Programação em Banco de Dados
� A cláusula select na forma select * indica que todos os atributos 
de todas as relações que aparecem na cláusula from devem ser 
selecionados.
Select * from emprestimo
� Pode conter expressões aritméticas envolvendo os operadores +,-, 
* e /, e operandos constantes ou atributos das tuplas. Por exemplo, 
a consulta:
Select nome_agencia, numero_emprestimo, quantia * 100 
from emprestimo
6Programação em Banco de Dados
� Vejamos como ilustrar o uso da cláusula where na SQL. Considere a 
consulta:
“Encontre todos os números de empréstimos feitos na agência Perryridge
com quantia emprestados acima de 1.200 dólares.”
Select numero_emprestimo
from emprestimo
where nome_agencia = “Perryridge” and quantia >1200
� A SQL usa conectores lógicos and, or e not – em vez dos símbolos 
matemáticos ^, v e __ , na cláusula where . Os operandos dos 
conectivos lógicos podem ser expressões envolvendo operadores de 
comparação ,>=, = e .
7Programação em Banco de Dados
� A SQL possui o operador de comparação Between para simplificar 
a cláusula where que especifica que um valor pode ser menor ou 
igual a algum valor e maior ou igual a algum outro valor.
� “Encontrar os números dos empréstimos cujos as quantias estejam 
entre 900 dólares e 1000 dólares.”
Select numero_emprestimo
from emprestimo
where quantia between 900 and 1000
� Em vez de:
Select numero_emprestimo
from emprestimo
where quantia = 900
Similarmente, podemos usar o operador de comparação not between
8Programação em Banco de Dados
21/09/2010
3
� A cláusula from por si só define um produto cartesiano das relações 
na cláusula.
“para todos os clientes que tenham um empréstimo em um banco, 
encontre seus nomes e números de empréstimos.”
Select distinct nome_cliente, tomador.numero_emprestimo
from tomador, emprestimo
where tomador.numero_emprestimo=emprestimo.numero_emprestimo
9Programação em Banco de Dados
“Encontre os nomes e números dos empréstimos de todos os 
clientes que tenham um empréstimo na agência Perryridge.”
Select distinct nome_cliente, tomador.numero_emprestimo
from tomador, emprestimo
where tomador.numero_emprestimo=emprestimo.numero_emprestimo
and nome_agencia = ‘Perryridge’
10Programação em Banco de Dados
� A SQL proporciona um mecanismo para rebatizar tanto relações 
quanto atributos, usando a cláusula asasasas, da seguinte forma:
nome_antigo asasasas nome_novo
� Por exemplo, se desejarmos que o nome do atributo 
numero_emprestimonumero_emprestimonumero_emprestimonumero_emprestimo seja substituído pelo nome id_emprestimoid_emprestimoid_emprestimoid_emprestimo, 
podemos reescrever a consulta precedente como:
SelectSelectSelectSelect distinctdistinctdistinctdistinct nome_cliente, tomador.numero_emprestimo as as as as 
id_emprestimo
fromfromfromfrom tomador, emprestimo
wherewherewherewhere tomador.numero_emprestimo =
emprestimo. numero_emprestimo
andandandand nome_agencia = “Perryridge”
11Programação em Banco de Dados
� As operações em strings mais usadas são as checagens para 
verificação de coincidências de pares, usando o operador like. 
Identificaremos esses pares por meio do uso de caracteres especiais:
◦ Porcentagem (%): o caracter % compara qualquer substring.
◦ Comparações desse tipo são sensíveis ao tamanho das letras. Para 
ilustrar a comparação por pares, consideremos os seguintes exemplos:
� “Perry%” corresponde a qualquer string que comece com “Perry”.
� “%idge%” corresponde a qualquer string que possua uma substring “idge”, 
por exemplo, “Perryridge”, “Rock Ridge” e “Mianus Bridge”.
12Programação em Banco de Dados
21/09/2010
4
“Encontre os nomes de todos os clientes cujas ruas possuam a 
substring ‘pri’”.
� Essa consulta pode ser escrita assim:
Select nome_cliente
from cliente
where rua_cliente like ‘%pri%’
� A SQL também permite-nos pesquisar diferenças em vez de 
coincidências, por meio do uso do operador de comparação not like.
13Programação em Banco de Dados
� A SQL oferece um controle sobre a ordenação por meio da qual as tuplas
de uma relação serão apresentadas. 
� A cláusula order by faz com que as tuplas do resultado de uma consulta 
apareçam em uma determinada ordem.
“Listar em ordem alfabética todos os clientes que tenham um empréstimo 
na agência Perryridge”
Select distinct nome_cliente
From tomador, emprestimo
where tomador.numero_emprestimo= 
empréstimo.numero_emprestimo
and nome_agencia = “Perryridge” 
order by nome_cliente
14Programação em Banco de Dados
� Por padrão, a cláusula order by relaciona os itens em ordem 
ascendente. 
� Para a especificação da forma de ordenação, devemos indicar desc
para ordem descendente e asc para ordem ascendente.
“Listar a relação empréstimo inteira por ordem descendente de quantia.”
Select *
from emprestimo
order by quantia desc, numero_emprestimo asc
15Programação em Banco de Dados
� são funções que tomam uma coleção (um conjunto ou subconjunto) 
de valores como entrada, retornando um valor simples.
� A SQL oferece cinco funções agregadas pré-programadas:
◦ Média (average): avg.
◦ Mínimo (minimum): min.
◦ Máximo (maximum): max.
◦ Total (total): sum.
◦ Contagem (count): count.
Programação em Banco de Dados 16
21/09/2010
5
� A entrada para sum e avg precisa ser um conjunto de números, mas 
as outras operações podem operar com conjunto de tipos não-
muméricos, como strings e semelhantes.
� “Encontre a média dos saldos em contas na agência Brighton”
Select avg (saldo)
from conta 
where nome_agencia = ‘Brighton’
Programação em Banco de Dados 17
� “Encontre a média dos saldos nas contas de cada uma das 
agências do banco.”
Select nome_agencia, avg (saldo)
from conta 
group by nome_agencia
Programação em Banco de Dados 18
� “Encontre todos os números dos depositantes de cada agência.”
Select nome_agencia, count (distinct nome_cliente) 
from depositante, conta 
where depositante.numero_conta = conta.numero_conta
group by nome_agencia
Programação em Banco de Dados 19
� Se uma cláusula where e uma cláusula having aparecem na 
mesma consulta, o predicado que aparece em where é aplicado 
primeiro;
� As tuplas que satisfazem a cláusula where são colocadas em 
grupos por meio da cláusula group by;
� A cláusula having é aplicada cada grupo;
� Os grupos que não satisfizerem o predicado da cláusula having
serão removidos;
� Os gruposremanescentes são usados pela cláusula select pra 
criação das tuplas da relação resultante da consulta;
Programação em Banco de Dados 20
21/09/2010
6
“Listar quais são as agências que possuem média dos saldos 
aplicados em conta maior ou igual a 700 dólares”
� Essa condição não se aplica a uma única tupla, mas em cada 
grupo determinado pela cláusula group by.
� Para exprimir tal consulta, usamos a cláusula having da SQL.
Select nome_agencia, avg (saldo) 
from conta
group by nome_agencia
having avg (saldo) > = 700
Sistema de Banco de Dados 21
� Às vezes, desejamos tratar a relação como um todo, como um 
grupo simples.
� Nesses casos, não usamos cláusula group by.
“encontre a média dos saldos de todas as contas”.
Select avg (saldo) 
from conta
Programação em Banco de Dados 22
� Usamos a função agregada count com muita freqüência para 
contar o número de tuplas em uma relação;
� A notação para essa função em SQL é count (*).
“Encontrar o número de tuplas da relação cliente”
Select count (*) 
from cliente
� A SQL não permite o uso do distinct com count (*). É válido usar 
distinct com max e min, mesmo não alterando o resultado.
Programação em Banco de Dados 23
� A palavra-chave especial null é um predicado para testar a 
existência de valores nulos;
� “Encontrar todos os números de empréstimos que aparecem na 
relação empréstimo com valores nulos para quantia”.
Select numero_emprestimo
from emprestimo
where quantia is null
� O predicado is not null testa a ausência de valores nulos.
Programação em Banco de Dados 24
21/09/2010
7
� A SQL proporciona um mecanismo para o aninhamento de 
subconsultas;
� Uma subconsulta é uma expressão select-from-where aninhada 
dentro de outra consulta;
� O conectivo in testa os membros de um conjunto, no qual o 
conjunto é a coleção de valores produzidos pela cláusula select.
� O conectivo not in verifica a ausência de membros de um conjunto;
Programação em Banco de Dados 25
“Encontre todos os clientes que tenham tanto conta quanto 
empréstimo no banco”.
� Começaremos por encontrar todos os correntistas, escrevendo esta 
subconsulta:
(select nome_cliente
from depositante)
� Precisamos, agora, encontrar todos os clientes que contraíram 
empréstimos no banco e que aparecem na lista dos correntistas 
obtidos pela subonculta;
Programação em Banco de Dados 26
� Faremos isso por meio do aninhamento da subconsulta em uma 
consulta externa;
Select distinct nome_cliente
from tomador
where nome_cliente in (select nome_cliente
from depositante)
Programação em Banco de Dados 27
� Ilustramos o uso do construtor not in;
“Encontrar todos os clientes que tenha um empréstimo no banco, mas 
que não tenham uma conta o banco”
select distinct nome_cliente
from tomador
where nome_cliente not in (select nome_cliente
from depositante)
Programação em Banco de Dados 28
21/09/2010
8
� Os operadores in e not in podem também ser usados em conjuntos 
enumerados;
“Selecionar os nomes dos clientes que tenham um empréstimo no 
banco e cujos nomes não sejam nem “Smith” nem “Jones”.
Select distinct nome_cliente
from tomador
where nome_cliente not in (‘Smith’,’Jones’)
Programação em Banco de Dados 29
� Definimos uma visão em SQL usando o comando create view.
� Para definir a visão, precisamos dar-lhe um nome e definir a 
consulta que processará essa visão;
� A forma do comando create view é:
Create view v as 
� Em que é qualquer expressão de 
consulta válida e o nome da visão é representado por v.
Programação em Banco de Dados 30
“Considere uma visão de todas as agências e nomes de clientes que 
tenham uma conta”.
Create view todos_clientes as
select nome_cliente, nome_agencia
from depositante, conta
where depositante.numero_conta = conta.numero_conta;
Programação em Banco de Dados 31
� Os nomes de visão podem aparecer em qualquer lugar onde o nome 
de uma relação aparece;
� Usando a visão todos_clientes, podemos encontrar todos os clientes 
da agência Perryridge, escrevendo:
select nome_cliente
from todos_clientes
where nome_agencia = ‘Perryridge’
� A cláusula create view cria uma definição de visão em um banco de 
dados e essa definição fica no banco até que um comando drop view
nome_visão seja executado.
Programação em Banco de Dados 32

Mais conteúdos dessa disciplina