Professional Documents
Culture Documents
Exemplos:
Forneça o código das agências onde há depósitos:
Select distinct Cod_Ag
From C_Depósitos;
1) Forneça o nome dos clientes que tenham empréstimos com valor maior que 10000.00 e
também o valor.
Select distinct Nome_Cli, Valor
From C_Empréstimos
Where Valor > 10000.00;
3) Forneça o nome e endereço dos clientes com depósitos na agência 010 ou 034.
Select distinct Clientes.Nome_Cli, Endereco
From Clientes, C_Depósitos
Where Clientes.Nome_Cli = C_Depósitos.Nome_Cli and (Cód_Ag = 010 or Cód_Ag =
034).
Claudio Vasconcelos Apostila de SQL página: 2
OPERAÇÕES DE CONJUNTO
3) MINUS: faz a diferença de duas relações, isto é, apresenta as tuplas que estão na
primeira relação mas não estão na Segunda relação (equivale à – de A.R.).
As relações devem ser compatíveis.
Exemplo: 7) Forneça o nome dos clientes que possuem empréstimos na ag. 0052, mas que
não têm depósitos nesta agência.
Conectivo in: verifica se uma tupla pertence à (está dentro de) uma tabela. Se a tupla
pertencer à tabela o in retorna verdadeiro, senão retorna falso.
Not-in: testa se uma tupla não pertence a uma tabela.
Exemplo: 8) Forneça o nome das agências onde não há nenhum empréstimo com valor
maior que 20.000,00.
Select Nome_ag
From C_Empréstimo, Agência
Where C_Empréstimo.Cód_Ag = Agência.Cód_Ag and valor ≤ 20.000,00
A consulta acima não resolve a questão, pois mostra o nome da agencia se existir um
empréstimo com valor menor do que 20.000,00. Para mostrar se não há nenhum
empréstimos com valor maior que 20.000,00 devemos usar:
Select Nome_Ag.
From Agências
Where Cod_Ag not in (Select Cód_Ag
From C_Empréstimo
Where Valor > 20.000,00)
Exemplo: 9) Forneça o nome do clientes que têm depósitos e empréstimos na agência 0052
(usando in)
Exemplo: 10A) Encontre o nome e código das agências onde clientes de Itatiba tenham
empréstimos.
10B) Forneça o nome dos clientes que têm conta de deposito na mesma agência que o
Cliente José, mas com saldo maior que o dele (José).
Select nome_cli
From c_depositos D1, c_depositos D2
Where D1.nome_cli = “ José” and D2.nome_cli <> “José” and D1.cod_ag = D2.cod_ag
and D2.saldo > D1.saldo;
CONECTIVO > ANY (OU > SOME): usado para verificar se um valor é maior que algum
dos valores armazenados em uma tabela.
Conectivos análogos: < ANY (ou < some), ≤ ANY (ou ≤ some), ≥ ANY (ou ≥ some),
=ANY (ou = some), ≠ ANY (ou ≠ some).
Exemplo: 11) Forneça o nome e endereço dos clientes que tenham saldos (de depósitos)
maior que algum dos saldos do clientes Carlos.
CONECTIVO > all: usado para verificar se um valor é maior que todos os valores
armazenados em uma tabela. Análogos: > all, ≤ all, ≥ all.
Exemplo: 12) Forneça o código e nome das agências que fizeram empréstimos com valores
maiores que todos os empréstimos da agência 0052.
- As tuplas são ordenadas primeiro pelo atributo A1, onde há valores iguais, a
ordenação é feita por A2 e assim sucessivamente.
- O padrão de ordenação é ordem crescente (Asc), para obter ordem decrescente
usaremos um desc após o nome do atributo.
- A ordenação de um grande número de tuplas é uma operação de alto custo, portanto
deve ser feito quando estritamente necessária.
Exemplo: 14) Forneça o nome dos clientes que têm depósitos maiores que 1000 em ordem
alfabética.
15) Forneça o valor dos empréstimos e o nome e o endereço dos clientes que os fizeram em
ordem decrescente de valor e crescente de nome.
FUNÇÕES DE GRUPO:
Exemplo: 18) Encontre o nome das agências e a quantidade de empréstimos feitas em cada
agência (mostrar só o nome das agências onde há mais do que 10 empréstimos).
Exemplo: 19) Forneça o nome e endereço do cliente com o maior total de depósitos na
agência 010.
Exemplo: Forneça o nome dos clientes que têm depósitos nas mesmas agências que o
Carlos, mas com saldo maior que o dele nessa agência.
Select D2.Nome_Cli
From C_Depósitos D1, C_Depósitos D2
Where D1.Nome_Cli = ‘Carlos’ and D2.Nome_Cli ≠ ‘Carlos’ and D1.Cod_Ag =
D2.Cód_Ag and D2.Saldo > D1.Saldo;
Claudio Vasconcelos Apostila de SQL página: 7
Usados para testar se existe (ou não) pelo menos uma tupla em uma tabela.
Exists --> retorna verdadeiro se a tabela está vazia.
Exemplo: Encontre o nome dos clientes que tenham depósitos na agência 0052 que não
estão cadastrados na tabela de clientes.
Exemplo: Forneça o nome dos clientes que possuem empréstimos em todas as agências de
Campinas.
Select
From Clientes C
Where not exists (Select Cód._Ag.
From Agências
Where Cidade = ‘Campinas’ and Cod_Ag not in
(Select Cod._Ag
From C_Empréstimos E
Where C.Nome_Cli = E.Nome_Cli ) ) ;
Claudio Vasconcelos Apostila de SQL página: 8
Delete C_Empréstimos;
b) Faz-se uma consulta cujo resultado é um conjunto de tuplas que será inserido na
tabela “r”.
Insert into r
Select A1, A2, . . . . . An
From r1, r2, . . . . . . rm
Where p
Os valores dos atributos A1, A2, . . . . . An, serão cadastrados nos atributos
correspondentes de r (devem pertencer aos domínios dos mesmos).
Exemplo: Abra uma conta de depósito para cada cliente que tem um empréstimo na agência
0052. Essa nova conta terá o mesmo número que o empréstimo e saldo inicial de 20,00.
Insert into C_Depósitos
Select 0052, n_empr, nome_cli, 20,00
From C_Empréstimo
Where Cod_Ag = 0052
3) ATUALIZAÇÃO:
Update r
Set Ai = Vi
Where p
As tuplas da tabela “r” que satisfazem o predicado “p” tem o atributo Ai atualizado.
A ordem de atualização é importante !!!!!
Exemplo:
1) Atualize o saldo das contas de depósitos da agência 010 com 3% de juros.
Update C_Depósitos
Set Saldo = Saldo*1,03
Where Cod_Ag = 010;
2) Aplique os requisitos taxas de juros nas contas da agência 0052:
- 3% para contas com até 1.000,00
- 5% para as demais
Update C_Depósitos
Set Saldo = Saldo * 1,05
Where Cod_Ag = 0052 and Saldo > 1000,00
Update C_Depósitos
Set Saldo = Saldo * 1,03
Where Cod_Ag = 0052 and saldo <= 1000,00
Claudio Vasconcelos Apostila de SQL página: 10
VISÕES:
VISÃO é uma relação (tabela) virtual montada a partir das relações (tabelas) reais. O
objetivo do uso das visões é restringir o acesso de usuários a apenas parte dos dados de
uma ou mais tabelas ou por comodidade (para o usuário acessar apenas os dados que
lhe são de interesse).
Definição:
Create view V as
From r1, r2, . . . . rn
Where p
Um conjunto de tabelas de um BD pode suportar várias visões diferentes. Os dados
apresentados na visão não são salvos (na visão). Então, toda vez que uma visão for
referenciada, seus dados são acessados nas tabelas originais (isto porque os dados das
tabelas originais podem estar sofrendo alteração e a visão deve refletir essas mudanças).
Exemplo:
1) Crie uma visão com nome e endereço de todos clientes da agência 010.
Creat view Clientes_010 as
Select distinct C.Nome_cli, endereço
From C_Depósitos D, Clientes C
Where C.Nome_cli = D.Nome_cli and Cod_ag = 010
UNION
Select distinct C.Nome_cli, endereço
From C_Empréstimos E, Clientes C
Where C.Nome_cli = E.Nome_cli and Cod_ag = 010
2) Crie uma visão com nome e saldo dos clientes da agência 010.
Create view Depósitos_010 as
Select Nome_cli, saldo
From C_Depósitos
Where Cód_Ag = 010
3) Mostre o nome e endereço dos clientes da agência 010 com o saldo menos que 500,00
(use a visão do exercício 2)
Select C.Nome_cli, endereço
From Depósitos_010 D, Clientes C
Where C.Nome_cli = D.Nome_cli and saldo < 500,00.
Exemplos:
4) Crie uma visão para apresentar o nome dos clientes com empréstimos na agência 010, a
quantidade de empréstimos que eles fizeram e o total emprestado.
Create view Total_Empr (Nome_cli, Quant_Empr, Total) as
Select Nome_cli, count (*), sum (Valor)
From C_Empréstimo
Where Cod_Ag. = 010
Group by Nome_cli;
5) Mostre o nome dos clientes com mais do que 5 empréstimos na agência 010 e o total
emprestado.
Select Nome_cli
From Total_Empr
Where Quant_Empr > 5;
Uma visão pode ser referenciada por qualquer comando (no lugar que apareceria a
referência a uma tabela). Obs: visões são ótimas em consultas, mas apresentam restrições
em operações que modificam dados na base de dados.
Modificações via visão devem ser refletidas nas tabelas originais. A maioria dos
sistemas comerciais só permite modificações nas visões montadas a partir de uma única
tabela real (mesmo assim para que a modificação se complete nenhuma regra de
integridade da tabela original pode ser violada. Por exemplo, em inserções não podem faltar
campos que compõem a chave primária nem campos obrigatório).
Exemplo:
6) Crie uma visão com número da conta, saldo, nome do cliente e endereço para os
clientes com saldo maior que 1000,00.
Create view Visão6 as
Select n_conta, Saldo, C.Nome_cli, Endereço
From Clientes C, C_Depósitos D
Where C.Nome_cli = D.Nome_cli and Saldo > 1000,00
Supondo que fosse possível inserir dados via essa visão mostre o comando para inserir
o cliente João de endereço Rua X, n.º 10 com conta 1214-6, de saldo 2.000,00. Mostre
também como ficariam esses dados nas tabelas originais.