DB2 - Banco de dados - Subqueries - www.cadcobol.com.br



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

Subqueries

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.