sql Álvaro vinícius de souza coêlho [email protected]

45
SQL Álvaro Vinícius de Souza Coêlho [email protected]

Upload: internet

Post on 18-Apr-2015

115 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br

SQL

Álvaro Vinícius de Souza Coê[email protected]

Page 2: SQL Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

O que são Bancos de Dados.

FIM!

“ Melhor cair em contradição do que cair do oitavo andar”Barão de Itararé

Escher