Subconsultas

Para realizar alguma operação de consulta, às vezes, necessitamos dos dados obtidos em outras consultas, isto pode ser feito em uma única consulta, utilizando as subconsultas.

Por Sara Alvarez Langa - Tradução de Celeste Veiga


Publicado em: 31/1/11
Valorize este artigo:
Uma subconsulta nada mais é que um select dentro de outro select. As subconsultas são aquelas sentenças select que fazem parte da cláusula where de outra sentença select. O formato é o seguinte:

SELECT ...
FROM ...
WHERE coluna operador_comparativo ( SELECT... FROM... WHERE... ) ;

Quando se executa esta sentença primeiro se realiza a subconsulta e depois o resto de sentença.

Condições de busca em subconsultas

As subconsultas normalmente aparecem como parte da condição de uma busca dentro do where ou do having.
Condições de busca que pode haver dentro de uma subconsulta:
Comparação de subconsultas: Comparam o valor da expressão com um valor único obtido na subconsulta. São os símbolos típicos de comparação (<,>,=,<=,>=).

Select * from empregado where oficio=(select oficio from empregado where sobrenome='Lopez');

Pertencer a um conjunto de valores devolvidos pela subconsulta: Comprova se o valor está dentro do conjunto de valores devolvido pela subconsulta.

Select * from empregado where oficio IN (select oficio from empregado where departamento=20);

Existência: nos diz se a subconsulta devolve alguma fila ou não. Para isso utilizamos as palavras EXISTS ou NOT EXITS.

Select * from departamento where EXISTS (select * from empregado where empregado.id_departamento = departamento.id_departamento);

Comparação quantificada: Para isto também utilizamos os comparadores básicos unidos a ANY ou a ALL.
ANY compara o valor de uma expressão com cada um do conjunto de valores obtidos na subconsulta. De modo que uma das comparações de TRUE a consulta dá TRUE

Select * from empregado where salario = ANY (select salario from empregado where id_departamento=30);

ALL compara o valor de uma expressão com cada um do conjunto de valores obtidos na subconsulta. Têm que ser todos TRUE para que a subconsulta retorne TRUE

Select * from empregado where salario < ALL (select salario from empregado) where id_departamento=20);

Subconsultas que geram valores simples

São as subconsultas que obtém um só registro. Para isso utilizamos os operadores de comparação básicos. Se a subconsulta retorna mais de um registro aparece um mensagem de erro.

Subconsultas que geram listas de valores

São as subconsultas que nos retornam mais de um registro. Para estas subconsultas utilizamos o operador IN.

Subconsultas correlacionadas

Estas subconsultas fazem referência a uma coluna ou várias da consulta principal. Para vê-lo melhor colocamos um exemplo.
Queremos obter os dados dos empregados cujo salário seja o salário máximo do departamento.

Select * from empregado E where salario = (select max(salario) form empregado where id_empregado=E.id_empregado);

Esta sentença retorna para cada fila obtida o salário máximo do departamento que se está obtendo na consulta principal.






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato