SQL Subquery




SQL > Linguagem SQL avançada > Subquery

É possível integrar uma instrução SQL noutra. Quando tal é efetuado nas instruções WHERE ou HAVING, possuem uma construção de consulta secundária.

A sintaxe será a seguinte:

SELECT "nome_coluna1"
FROM "nome_tabela1"
WHERE "nome_coluna2" [Comparison Operator]
(SELECT "nome_coluna3"
FROM "nome_tabela2"
WHERE "condição"
);

[Comparison Operator] pode ser um operador de igualdade como =, >, <, >=, <=. Também pode ser um operador de texto como "LIKE". A parte a vermelho é considerada como sendo uma "consulta interna", enquanto a parte verde é considerada como sendo a "consulta externa".

Vamos utilizar o mesmo exemplo conforme utilizado para ilustrar as uniões SQL:

Tabela Store_Information
Store_NameSalesTxn_Date
Los Angeles150005-Jan-1999
San Diego25007-Jan-1999
Los Angeles30008-Jan-1999
Boston70008-Jan-1999

Tabela Geography
Region_NameStore_Name
EastBoston
EastNew York
WestLos Angeles
WestSan Diego

e pretendemos utilizar uma consulta secundária para descobrir as vendas de todas as lojas na região West. Para tal, utilizamos a seguinte instrução SQL:

SELECT SUM(Sales) FROM Store_Information
WHERE Store_Name IN
(SELECT Store_Name FROM Geography
WHERE Region_Name = 'West');

Resultado:

SUM(Sales)
2050

Neste exemplo, em vez de unir diretamente as duas tabelas e, em seguida, adicionar apenas o montante de vendas para as lojas na região West, primeiro utilizamos a consulta secundária para descobrir que lojas se encontram na região West e, em seguida, somamos o montante de vendas dessas lojas.

No exemplo acima, a consulta interna é executada em primeiro lugar e o resultado é então fornecido à consulta externa. Este tipo de consulta secundária denomina-se consulta secundária simples. Se a consulta interna estiver dependente da consulta externa, iremos obter uma consulta secundária correlacionada. Abaixo é apresentado um exemplo de uma consulta secundária correlacionada:

SELECT SUM(a1.Sales) FROM Store_Information a1
WHERE a1.Store_Name IN
(SELECT Store_Name FROM Geography a2
WHERE a2.Store_Name = a1.Store_Name);

Repare na cláusula WHERE na consulta interna, enquanto a condição envolve uma tabela da consulta externa.

SQL EXISTS >>



Copyright © 2016   1keydata.com   Todos os direitos reservados.