Você pode usar uma subquery (subconsulta) para restringir uma condição de pesquisa baseada nas informações em uma tabela provisória.
Uma subquery (subconsulta) é uma instrução SQL aninhada, ou subseleção , que contém uma instrução SELECT dentro da cláusula WHERE ou HAVING de outra instrução SQL.
Você também pode codificar subquery (subconsulta) mais complexas, como subconsultas correlatas e subconsultas com predicados quantificados.
Você pode usar uma subquery (subconsulta) quando precisar restringir sua condição de pesquisa com base nas informações de uma tabela provisória.
Por exemplo, convém encontrar todos os números de funcionários em uma tabela que também existem para um determinado projeto em uma segunda tabela.
Comece as informações da interface de programação de uso geral.
Exemplo
Suponha que você queira uma lista dos números, nomes e comissões de todos os funcionários que trabalham em um projeto específico, como o número do projeto IF2000.
A primeira parte da instrução SELECT é fácil de escrever:
SELECT EMPNO
, LASTNAME
, COMM
FROM EMP
WHERE EMPNO
|
Termine as informações da interface de programação de uso geral.
No entanto, você não pode ir mais longe porque a tabela EMP não inclui dados de número do projeto.
Você não sabe quais funcionários estão trabalhando no projeto IF2000 sem emitir outra instrução SELECT na tabela EMPPROJACT.
Você pode usar uma subseleção para resolver esse problema.
A instrução SELECT que envolve a subconsulta é o SELECT externo.
Comece as informações da interface de programação de uso geral.
Exemplo
Esta consulta expande a instrução SELECT iniciada no exemplo anterior para incluir uma subconsulta:
SELECT EMPNO
, LASTNAME
, COMM
FROM EMP
WHERE EMPNO IN
(SELECT EMPNO
FROM EMPPROJACT
WHERE PROJNO = 'IF2000');
|
Para entender melhor o que acontece como resultado desta instrução SQL, imagine que o DB2 passe pelo seguinte processo:
O DB2 avalia a subconsulta para obter uma lista dos valores EMPNO:
SELECT EMPNO
FROM EMPPROJACT
WHERE PROJNO = 'IF2000');
|
O resultado é a seguinte tabela de resultados intermediários:
EMPNO
======
000140
000140
000030
|
A tabela de resultados provisórios serve como uma lista na condição de pesquisa do SELECT externo.
Efetivamente, o DB2 executa esta instrução SELECT:
SELECT EMPNO
, LASTNAME
, COMM
FROM EMP
WHERE EMPNO IN ('000140', '000030')
|
A tabela de resultados fica assim:
EMPNO LASTNAME COMM
====== ======== =======
000140 NICHOLLS 2274.00
000030 KWAN 3060.00
|
© Copyright IBM Corp.