SQL
Álvaro Vinícius de Souza Coêlho
[email protected]
SQL
• Sigla de Structured Query Language
• Desenvolvida no hoje Centro de Pesquisa
Almadem (IBM)
• Início dos anos 70
• 1o Produto comercial, Oracle RDBMS
(Oracle Co), 1979
• 1o Padrão publicado pelo Ansi em 1986
SQL
• Estrutura básica
Select a1, a2, ... an
From r1, r2, …, rn
Where P
SQL
• “Mostrar as agências onde há depósito”
select agencia_nome
from deposito
SQL
• Para suprimir as repetições
Select distinct agencia_nome
From deposito
SQL
• “Mostrar a cidade e o nome dos clientes
com empréstimo em alguma agência”
select distinct cliente.cliente_nome,
cliente_cidade
from empréstimo, cliente
where cliente.cliente_nome =
empréstimo.cliente_nome
SQL
• O nome da tabela na cláusula From é
desnecessário quando não há ambigüidade
• Pode-se substituir o nome da tabela por
variáveis tipo tupla
...
from empréstimo e, cliente c
where c.cliente_nome = e.cliente_nome
SQL
• O nome das colunas é desnececssário
quando todas as colunas forem
selecionadas. Usa-se o *
select * from agencia
SQL
• Os conectores lógicos são and, or e not
• “Mostrar o nome e a cidade dos clientes
com empréstimo na agência Cruzeiro”
select distinct c.cliente_nome, c.cliente_cidade
from empréstimo e, cliente c
where e.cliente_nome = c.cliente_nome and
e.agencia_nome = “Cruzeiro”
SQL
• Pode-se usar os comparadores =, <>, >, >=,
<, <=, like e between
• “Mostrar as contas com saldo entre 90000 e
100000”
select conta_numero
from deposito
where saldo >= 90000 and
saldo <= 100000
SQL
• O operador between simplifica consultas
deste tipo:
...
where saldo between 90000 and 100000
SQL
• MetaCaracteres
• Substituição de cadeias de caracteres: % e _
• % substitui uma seqüência qualquer de
caracteres
• _ substitui um único caractere
SQL
• like “Santo%” aceita qualquer nome
começado assim
• Santos, Santo Estêvão, Santo André, etc.
• like “Dom Pedro _” aceita qualquer
caractere (logo não pode formar Dom Pedro
II)
• Usa-se o comparador like
SQL
• “Mostre o nome de todos os clientes
começados com a letra A” (sic)
select cliente_nome
from clientes
where cliente_nome like “A%”
SQL
• Comparação de conjuntos: IN
• “Mostrar todas as agências que ficam em
Ilhéus ou em Itabuna”
select agencia_nome
from agencia
where agencia_cidade in (“Ilhéus”, “Itabuna)
SQL
• Pode-se usar in para verificar a pertinência
em conjuntos formados a partir de outras
consultas (subquery)
• Característica de SQL não presente em QBE
ou Quel
SQL
• “Mostrar as agências com ativos maiores
que algum dos ativos de Ilhéus”
select agencia_nome
from agencia
where ativos > Some (select ativos
from agencia
where agencia_cidade = “Ilhéus”)
SQL
• “Mostrar as agências com ativos maiores do
que qualquer agência no Ilhéus”
select agencia_nome
from agencias
where ativos > All (select ativos
from agencia
where agencia_cidade = “Ilhéus”)
SQL
• Some: algum. All: qualquer (todos)
• Poderia-se usar, conforme será mostrado,
Min e Max. Qual a diferença?
SQL
• Exists: “Mostre os clientes e as cidades que
possuem pelo menos uma conta em
Cruzeiro”
Select distinct cliente_nome, cliente_cidade
From cliente c
Where exists (select cliente_nome from depositos
Where agencia_nome = “Cruzeiro”)
SQL
• Exists pára a verificação e retorna TRUE se
algum elemento surge na seleção, ou segue
até o fim caso contrário.
SQL
• Ordenação - order by: “Mostre os clientes
em ordem alfabética”
Select cliente_nome
From cliente
Order by cliente_nome
SQL
• O SQL Ordena, por padrão, em ordem
crescente. Caso se deseje ordenação inversa,
usa-se desc após o nome da coluna
SQL
• Pode-se ordenar mais de uma coluna:
“Mostrar os clientes em ordem crescente,
com os respectivos saldos de conta em
ordem decrescente”
Select cliente_nome, saldo
From depósitos
Order by cliente_nome, saldo desc
SQL
• Agregação
• O SQL contém as funções de agregação
AVG, MIN, MAX, SUM e COUNT
• “Mostrar a média dos saldos em Cruzeiro”
select avg(saldo)
from deposito
where agencia_nome – “Cruzeiro”
SQL
• “Mostrar também quantas contas tem a
agência Cruzeiro”
select avg(saldo), count(distinct conta_numero)
from deposito
where agencia_nome = “Cruzeiro”
SQL
• Agrupamento: Group by
• “Mostre a media dos saldos e o número de
contas de todas as agências”
select agencia_nome,avg(saldo), count(distinct
conta_numero)
from deposito
group by agencia_nome
SQL
• Caso se desejasse ordenar pelo nome da
agência, era necessário acrescentar
Order by agencia_nome
SQL
• Condicionando grupos: having
• Having é como um where, mas serve para
as funções de agrupamento.
SQL
• “Mostrar a média dos saldos e o número de contas
de todas as agências com média inferior a 1200”
select agencia_nome,avg(saldo), count(distinct
conta_numero)
from deposito
group by agencia_nome
having avg(saldo) < 1200
order by agencia_nome
SQL
• DML em SQL
• Exclusão: Delete
Delete r
Where p
• “Remover todos os empréstimos
cadastrados”
delete emprestimo
SQL
• “Remover os depositos da cidade de Ilhéus”
delete depósitos
where agencia_nome in (select agencia_nome
from agencias
where agencia_cidade = ”Ilhéus”)
SQL
• Inclusão: Insert
Insert into t (a1, a2, ..., an)
Values (v1, v2, … vn)
SQL
• A lista (a1, a2, …, an) pode ser dispensada
se todas as colunas forem valoradas e a
ordem dos dados for a mesma da estrutura
da tabela
SQL
• “Incluir o depósito de 1200 em nome de
Sandra na agência Cruzeiro, conta número
9732”
insert into deposito
values (“Cruzeiro”, 9732, “Sandra”, 1200)
SQL
• “Incluir o depósito em nome de Sandra na
agência Cruzeiro, conta número 2997. Não
especificar valor”
insert into deposito (agencia_nome,
conta_numero, cliente_nome)
values (“Cruzeiro”, 2997, “Sandra”)
SQL
• Incluir a partir de outras tabelas – O velho
exemplo: “Incluir um depósito de 200 para
clientes de Cruzeiro, com número da conta
igual ao número do empréstimo”
Insert into deposito
Values (select “Cruzeiro”, e.emp_numero,
e.cliente_nome, 200
From empréstimos e
Where e.agencia_nome = “Cruzeiro”)
SQL
• Atualização. Update
Update t
Set c1 = u1, c2 = u2, ..., cn = un
Where P
SQL
• “Pagar juros de 5% a todas as contas”
update deposito
set saldo = 1.05*saldo
• “Pagar juros de 5% às contas com saldo
inferior a 10000 e 6% às demais” – duas
operações (não esquecer: a ordem é
relevante).
SQL
update depósitos
set saldo = 1.06*saldo
where saldo > 10000
update depósitos
set saldo = 1.05*saldo
where saldo <= 10000
SQL
• Recursos adicionais
• Teste de nulo (is null) ou não nulo (is not
null)
...
where saldo is (not) null
SQL
• Visões: create view
Create view v as (consulta)
• Caso seja necessária uma visão com todos
os clientes cujas contas tem saldo sem valor
(nulo):
SQL
• Create view Cliente_Conta as (
Select cliente_nome
From depósitos
Where saldo is null
Order by cliente_nome)
SQL
• Uma consulta a esses clientes agora pode
ser feita assim:
Select Cliente_Nome from Cliente_Conta
O que são Bancos de Dados.
FIM!
“ Melhor cair em contradição do que cair do oitavo andar”
Barão de Itararé
Escher
Download

SQL - GEOCITIES.ws