DB2 - Exemplos simples - CORRELATED SUBQUERY



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

DB2 - Exemplos simples - CORRELATED SUBQUERY

In correlated subquery, the inner query does not work independently of the outer query.
Na subconsulta correlacionada, a consulta interna não funciona independentemente da consulta externa.

In this, the inner query is performed once for each row of the outer query.
Nesse caso, a consulta interna é executada uma vez para cada linha da consulta externa.

To correlate the table in the inner query with the table in the outer query, you need to define an alias for the outer query and use it as a qualifier in the inner query.
Para correlacionar a tabela na consulta interna com a tabela na consulta externa, você precisa definir um alias para a consulta externa e usá-lo como um qualificador na consulta interna.

  1. When you use the alias in this context, it is called "correlation name" and the connection it makes is called a "correlated reference".
    Quando você usa o alias neste contexto, ele é chamado de "nome de correlação" e a conexão que ele faz é chamada de "referência correlacionada".

  2. A correlated subquery with the EXISTS keyword does not name any column because no data is transferred when you use EXISTS.
    Uma subconsulta correlacionada com a palavra-chave EXISTS não nomeia nenhuma coluna porque nenhum dado é transferido quando você usa EXISTS.

Example - Exemplo:

    SELECT cust_name
      FROM tb_cust A
     WHERE NOT EXISTS
          (SELECT * FROM tb_inv WHERE inv_cust = A.cust_no)

EXISTS Operator - Operador EXISTS

  • The EXISTS operator is used for correlated subqueries.
    O operador EXISTS é usado para subconsultas correlacionadas.

  • It tests if the subquery returns at least one row.
    Ele testa se a subconsulta retorna pelo menos uma linha.

  • The EXISTS operator returns true or false, never unknown.
    O operador EXISTS retorna verdadeiro ou falso, nunca desconhecido.

  • Because EXISTS tests only if a row exists, the columns shown in the SELECT list of the subquery are irrelevant.
    Typically, you use a single character text literal such as '1' or 'X' or the keyword NULL.
    Como EXISTS testa apenas se existe uma linha, as colunas mostradas na lista SELECT da subconsulta são irrelevantes.
    Normalmente, você usa um literal de texto de um único caractere, como '1' ou 'X', ou a palavra-chave NULL.

Example - Exemplo:

This is a correlated subquery displays instructors where the INSTRUCTOR_ID has a matching row in the SECTION table.
Esta é uma subconsulta correlacionada para os instrutores de exibição em que INSTRUCTOR_ID tem uma linha correspondente na tabela SECTION.

The result shows the INSTRUCTOR_ID, INSTRUCTOR_FIRST_NAME column values of instructors assigned to at least one section.
O resultado mostra os valores das colunas INSTRUCTOR_ID e INSTRUCTOR_FIRST_NAME de instrutores atribuídos a pelo menos uma seção.

    SELECT instructor_id, instructor_last_name
      FROM tb_instructor I
      WHERE EXISTS
           (SELECT 'X'
              FROM tb_section
             WHERE I.instructor_id = instructor_id)

For every row of the INSTRUCTOR table, the outer query evaluates the inner query.
It checks to see if the current row's INSTRUCTOR_ID value exists for the SECTION table's INSTRUCTOR_ID column.
Only if a row with the appropriate value is found, the condition is true and the outer row is included in the result.

Para cada linha da tabela INSTRUCTOR, a consulta externa avalia a consulta interna.
Ele verifica se o valor INSTRUCTOR_ID da linha atual existe para a coluna INSTRUCTOR_ID da tabela SECTION.
Somente se uma linha com o valor apropriado for encontrada, a condição é verdadeira e a linha externa é incluída no resultado.

NOT EXIST Operator - Operador NOT EXIST

The NOT EXISTS operator is the opposite of the EXISTS operator; it tests if a matching row cannot be found.
O operador NOT EXISTS é o oposto do operador EXISTS; ele testa se uma linha correspondente não pode ser encontrada.