O uso de subselects pode facilitar a escrita de algumas consulta complexas, principalmente quando muitas tabelas estão envolvidas ou há necessidade de Group By porém não se deseja usá-lo.
Os exemplos abaixo especificam os casos de uso mais comuns para subselects.
/* TIPO 1 : SUBSELECT NA CLAUSULA WHERE */
SELECT
*
FROM VENDAS
WHERE DATAPEDIDO =
( SELECT
MAX(DATAPEDIDO)
FROM VENDAS)
/* TIPO 2 : SUBSELECT NA CLAUSULA SELECT */
SELECT V.VendaID,
(SELECT
SUM(QTD*ValorUnitario)
FROM VendasDetalhe VD
WHERE VD.VendaID = V.VendaID )
as qtdTotal
FROM Vendas V
/* TIPO 3 : SUBSELECT NA CLAUSULA FROM*/
SELECT Venda, Total FROM
( SELECT
TOP 10 *
FROM Vendas )
AS VVENDA
Considerações:
Tipo 1: A subconsulta é executada uma única vez. Antes da consulta externa.
Tipo 2: A subconsulta é executada para cada linha da tabela externa. CUIDADO !
– Esse comportamento pode prejudicar em muito o desempenho da consulta.
Tipo 3: Podemos selecionar quaisquer campos da tabela externa, como se esta fosse uma tabelea real . (Note o apelido VVENDA, é fundamental dar um apelido para a tabela, sem isso a consulta dará erro!)
é o subselect é muito eficaiz pois nos permite fazer uma consulta dentro de outra e este é o seu principal objectivo.
Muito obrigado, foi de grande ajuda, não lembrava como era realizado consultas em cima de uma outra consulta.