Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

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.