![Page 2: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/2.jpg)
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
![Page 3: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/3.jpg)
SQL
• Estrutura básica
Select a1, a2, ... an
From r1, r2, …, rn
Where P
![Page 4: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/4.jpg)
SQL
• “Mostrar as agências onde há depósito”
select agencia_nome
from deposito
![Page 5: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/5.jpg)
SQL
• Para suprimir as repetições
Select distinct agencia_nome
From deposito
![Page 6: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/6.jpg)
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
![Page 7: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/7.jpg)
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
![Page 8: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/8.jpg)
SQL
• O nome das colunas é desnececssário quando todas as colunas forem selecionadas. Usa-se o *select * from agencia
![Page 9: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/9.jpg)
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”
![Page 10: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/10.jpg)
SQL
• Pode-se usar os comparadores =, <>, >, >=, <, <=, like e between
• “Mostrar as contas com saldo entre 90000 e 100000”select conta_numerofrom depositowhere saldo >= 90000 andsaldo <= 100000
![Page 11: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/11.jpg)
SQL
• O operador between simplifica consultas deste tipo:...
where saldo between 90000 and 100000
![Page 12: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/12.jpg)
SQL
• MetaCaracteres
• Substituição de cadeias de caracteres: % e _
• % substitui uma seqüência qualquer de caracteres
• _ substitui um único caractere
![Page 13: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/13.jpg)
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
![Page 14: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/14.jpg)
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%”
![Page 15: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/15.jpg)
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)
![Page 16: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/16.jpg)
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
![Page 17: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/17.jpg)
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”)
![Page 18: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/18.jpg)
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”)
![Page 19: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/19.jpg)
SQL
• Some: algum. All: qualquer (todos)
• Poderia-se usar, conforme será mostrado, Min e Max. Qual a diferença?
![Page 20: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/20.jpg)
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”)
![Page 21: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/21.jpg)
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.
![Page 22: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/22.jpg)
SQL
• Ordenação - order by: “Mostre os clientes em ordem alfabética”Select cliente_nome
From cliente
Order by cliente_nome
![Page 23: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/23.jpg)
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
![Page 24: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/24.jpg)
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
![Page 25: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/25.jpg)
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”
![Page 26: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/26.jpg)
SQL
• “Mostrar também quantas contas tem a agência Cruzeiro”select avg(saldo), count(distinct conta_numero)
from deposito
where agencia_nome = “Cruzeiro”
![Page 27: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/27.jpg)
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
![Page 28: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/28.jpg)
SQL
• Caso se desejasse ordenar pelo nome da agência, era necessário acrescentarOrder by agencia_nome
![Page 29: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/29.jpg)
SQL
• Condicionando grupos: having
• Having é como um where, mas serve para as funções de agrupamento.
![Page 30: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/30.jpg)
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
![Page 31: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/31.jpg)
SQL
• DML em SQL
• Exclusão: DeleteDelete r
Where p
• “Remover todos os empréstimos cadastrados”delete emprestimo
![Page 32: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/32.jpg)
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”)
![Page 33: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/33.jpg)
SQL
• Inclusão: InsertInsert into t (a1, a2, ..., an)
Values (v1, v2, … vn)
![Page 34: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/34.jpg)
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
![Page 35: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/35.jpg)
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)
![Page 36: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/36.jpg)
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”)
![Page 37: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/37.jpg)
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 depositoValues (select “Cruzeiro”, e.emp_numero,
e.cliente_nome, 200From empréstimos eWhere e.agencia_nome = “Cruzeiro”)
![Page 38: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/38.jpg)
SQL
• Atualização. UpdateUpdate t
Set c1 = u1, c2 = u2, ..., cn = un
Where P
![Page 39: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/39.jpg)
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).
![Page 40: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/40.jpg)
SQL
update depósitos
set saldo = 1.06*saldo
where saldo > 10000
update depósitos
set saldo = 1.05*saldo
where saldo <= 10000
![Page 41: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/41.jpg)
SQL
• Recursos adicionais
• Teste de nulo (is null) ou não nulo (is not null)...
where saldo is (not) null
![Page 42: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/42.jpg)
SQL
• Visões: create viewCreate view v as (consulta)
• Caso seja necessária uma visão com todos os clientes cujas contas tem saldo sem valor (nulo):
![Page 43: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/43.jpg)
SQL
• Create view Cliente_Conta as (Select cliente_nome
From depósitos
Where saldo is null
Order by cliente_nome)
![Page 44: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/44.jpg)
SQL
• Uma consulta a esses clientes agora pode ser feita assim:Select Cliente_Nome from Cliente_Conta
![Page 45: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br](https://reader036.vdocuments.pub/reader036/viewer/2022062318/552fc13b497959413d8d94b3/html5/thumbnails/45.jpg)
O que são Bancos de Dados.
FIM!
“ Melhor cair em contradição do que cair do oitavo andar”Barão de Itararé
Escher