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 © 2014   1keydata.com   Todos os direitos reservados.


SQL Avançados
SQL UNION
SQL UNION ALL
SQL INTERSECT
SQL MINUS
SQL Subquery
SQL EXISTS
SQL CASE
SQL NULL
SQL ISNULL
SQL IFNULL
SQL NVL
SQL COALESCE
SQL NULLIF




Mapa do site