Trabalhando com Subqueries
O SQL Server oferece um recurso chamado de
subquery (subconsulta) conhecido também como subselect. Uma subquery nada mais é
do que um consulta dentro de outra.
Neste primeiro exemplo vou mostrar como podemos colocar uma subquery no lugar de
uma coluna que será retornada na instrução SELECT:.
Select CAMPO1 , (Select CAMPO2 from TABELA2) as CAMPO2 , CAMPO3 from TABELA1
Podemos ver, no exemplo acima, que as colunas CAMPO1 e CAMPO3 pertencem à
TABELA1 e CAMPO2 é um campo calculado através de uma subquery, que obtém CAMPO2
de TABELA2.
**********************************************************************************************************************************************
Podemos também utilizar o resultado de uma subquery na cláusula WHERE da
instrução SELECT como veremos a seguir.
Select PROD_COD , PROD_PRC from PRODUTOS where PROD_PRC = (Select Max(PROD_PRC)
from PRODUTOS)
O que a instrução SELECT mais interna faz é retornar o preço máximo de todos o
produtos da tabela PRODUTOS, através da função de agregação Max().
Com isso, este valor é comparado com todos os produtos e somente aqueles que
possuírem o valor máximo serão retornados pela query mais externa.
**********************************************************************************************************************************************
Aqui somente trago os clientes que fizeram compras antes da data atual:
Select CLI_COD , CLI_NOME from CLIENTES where CLI_COD In (Select CLI_COD from
PEDIDOS where PED_DATA < GETDATE())
GetDate() = retorna a data atual do servidor SQL Server
Aqui trago todos os clientes somente se qualquer cliente já fez algum pedido:
SELECT CLI_COD , CLI_NOME from CLIENTE where Exists (Select CLI_COD from PEDIDO)
As subquerys devem sempre serem informadas entre parênteses, pois assim o SQL
Server consegue saber que estamos nos referindo a uma subquery. É preferível que
utilizemos uma JOIN ao invés de uma subquery sempre que possível, pois o Query
Otimizer (o mecanismo que otimiza as instruções enviadas ao banco de dados) pode
executar algumas operações a mais quando se utiliza subqueries, deteriorando,
assim, a performance da execução.