CryptoMoedas

Desenvolvido por Investing.com

RL Info News - Tecnologia e Informação Feeds

quarta-feira, 15 de agosto de 2012

Curso Linguagem SQL, Lição 03


Lição 03 - Comandos avançados

Conjuntos
É possível realizar operações de conjuntos através da SQL, mas é necessário que os resultados das pesquisas sejam de tipos equivalentes.

União
(select nome from cliente)
union
(select nome from associado)

Nesse exemplo, têm-se como resultado o nome de todas as pessoas que são cliente ou dependentes (ou os dois). Veja que como numa operação de união de conjuntos, essa operação elimina automaticamente todas as repetições.
Para que os resultados repetidos sejam apresentados deve-se acrescentar all após union.

Intersecção
(select codigo from cliente)
intersect
(select codigo_titular from associado)

Nessa operação, são selecionados os códigos de todos os clientes que possuem dependentes. Assim como a união, essa operação elimina repetições e para não eliminar as repetições deve-se usar all assim como na união.

Exceção
(select codigo from cliente)
except
(select codigo_titular from associado)

Nesse exemplo, são selecionados todos os clientes que não possuem dependentes. Assim como as operações anteriores repetições não são apresentadas, para apresentá-las usa-se, novamente, o all.

Subconsultas Aninhadas
Por meio da SQL podemos aninhar subconsultas, isto é, colocar uma consulta dentro de outra.
Por exemplo:
Vamos supor que queremos pesquisar o nome dos clientes que alugaram filmes nos quais o "Tom Cruise" é o ator principal.
- Primeiro temos que pesquisar todos os filmes nos quais o "Tom Cruise" é o ator principal.
- Depois vemos quem são as pessoas que alugaram.

Para isso vamos usar duas pesquisas.
IN e NOT IN

Select cliente.nome
from cliente, aluguel
where cliente.codigo=aluguel.codigo_cliente
and
aluguel.nome_filme in (select nome from filme where ator_principal = "Tom Cruise")

Note que para igualar ao resultado de outra pesquisa usa-se a palavra in. Assim com essa pesquisa, primeiro seleciona-se o nome de todos os filmes nos quais o "Tom Cruise" é o ator principal e depois pesquisa-se o nome de todos os clientes que alugaram um dos filmes que foram resultados da primeira pesquisa.

Quando deseja-se excluir um resultado, ou seja, se quiséssemos o nome dos clientes que não alugaram filme do "Tom Cruise" é só usar not in ao invés de in.

SOME E ALL
Podemos também comparar resultados de outros modos. A expressão "maior que algum" é representada pela expressão >some, comparativamente podem ser usadas as expressões <some, <=some, >=some, =some e <>some. Um sinônimo de some que caiu no desuso é o any, foi abandonado por causar ambiguidade.

Quando a idéia é "maior que todos" usa-se o >all. Assim como com o some, outras variações podem ser usada como: <all, <=all, >=all, =all e <>all.
Vamos mostrar um exemplo de como o some e o all podem ser aplicados.

Select cliente.nome
from cliente, aluguel
where cliente.nome = "Maria Aparecida da Silva"
and cliente.codigo=aluguel.codigo_cliente
and sum(preco)<=some (selectsum(preco) from aluguel group by codigo_cliente)

Nesse exemplo, verifica-se se existe algum cliente que tenha a soma de todos os aluguéis de dvds maior ou igual que o da Maria Aparecida da Silva.

Select cliente.nome
from cliente, aluguel
where cliente.nome = "Maria Aparecida da Silva"
and cliente.codigo=aluguel.codigo_cliente
and sum(preco)<=all (select sum(preco)from aluguel group by codigo_cliente)

Esse exemplo é muito parecido com o anterior só que verifica se todos os clientes possuem a soma de seus aluguéis maior ou igual ao da Maria Aparecida.
EXISTS e NOT EXISTS
Quando desejamos verificar se o resultado de uma pesquisa possui algum resultado específico podemos usar a cláusula exists.
Vamos pesquisar se existe algum cliente que possui dependentes. Para isso vamos usar a pesquisa a seguir:

select nome
from cliente
where exists (select * from cliente, associado where cliente.codigo = associado.codigo_titular)

Caso queira verificar se um determinado resultado não existe usamos o not exists.
UNIQUE
Quando queremos verificar se um resultado é único, podemos usar a cláusula unique. No exemplo a seguir, acharemos todos os cliente que possuem apenas um dependente.

Select nome
from cliente,associado
where cliente.codigo = associado.codigo_titular
and unique ( select codigo_titular from associado)

Visões
Visões podem ser entendidas como uma maneira alternativa de visualizar os dados de uma tabela. Pode ser considerada uma tabela virtual. As visões são utilizadas quando não é desejável que o usuário tenha um acesso aos modelo lógico como um todo, quando você tem a intenção de que ele veja apenas o necessário.
Suponha que na nossa locadora os dependentes só podem ser esposa ou marido, que filhos não são mais aceitos como dependentes. Criaremos uma visão que agrupará as pessoas que se encaixam nessa restrição mas o banco de dados não será alterado. Como citamos anteriormente, é como se uma tabela virtual fosse criada, sem alterar as existentes.

Createview dependetes_restritos as(select RG, nome, cidade, parentesco, codigo_titular
from associado
where parentesco = "marido"
or
parentesco = "esposa")

Criamos uma visão chamada dependentes_restritos onde só selecionou-se os dependentes que eram marido ou esposa do titular.
Após criar uma visão você pode acessá-la como uma tabela qualquer. Por exemplo:

select nome
from dependentes_restritos
where codigo_titular = 012345

Nesse exemplo, ele procurará na visão o nome do dependente do titular com código 012345.
Para destruir a visão que criamos basta executar o seguinte comando:

drop view dependentes_restritos


Exercício
Descreva um pouco sobre os comandos avançados e para o que eles podem ser utilizados?

Deixe suas respostas nos comentários. Obrigado!

Fonte: Comunidade CDTC

Nenhum comentário:

Postar um comentário