DB2 - Exemplos simples - UNION



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

DB2 - Exemplos simples - UNION

Using the UNION keyword, you can combine two or more subselects to form a fullselect.
When SQL encounters the UNION keyword, it processes each subselect to form an interim result table, then it combines the interim result table of each subselect and deletes duplicate rows to form a combined result table.
You can use different clauses and techniques when coding select-statements.
You can use UNION to eliminate duplicates when merging lists of values obtained from several tables.
For example, you can obtain a combined list of employee numbers that includes:

  • People in department D11
  • People whose assignments include projects MA2112, MA2113, and AD3111
The combined list is derived from two tables and contains no duplicates.
To do this, specify:

Usando a palavra-chave UNION, você pode combinar duas ou mais subseleções para formar uma seleção completa.
Quando o SQL encontra a palavra-chave UNION, ele processa cada subseleção para formar uma tabela de resultados provisória e, em seguida, combina a tabela de resultados provisória de cada subseleção e exclui linhas duplicadas para formar uma tabela de resultados combinada.
Você pode usar diferentes cláusulas e técnicas ao codificar instruções select.
Você pode usar UNION para eliminar duplicatas ao mesclar listas de valores obtidos de várias tabelas.
Por exemplo, você pode obter uma lista combinada de números de funcionários que inclui:

  • Pessoas no departamento D11
  • Pessoas cujas atribuições incluem os projetos MA2112, MA2113 e AD3111
A lista combinada é derivada de duas tabelas e não contém duplicatas.
Para fazer isso, especifique:

    SELECT EMPNO
      FROM CORPDATA.EMPLOYEE
     WHERE WORKDEPT = 'D11'
    UNION
    SELECT EMPNO
      FROM CORPDATA.EMPPROJACT
     WHERE PROJNO = 'MA2112' OR
           PROJNO = 'MA2113' OR
           PROJNO = 'AD3111'
     ORDER BY EMPNO

To better understand the results from these SQL statements, imagine that SQL goes through the following process:
Para entender melhor os resultados dessas instruções SQL, imagine que o SQL passa pelo seguinte processo:

Step 1. SQL processes the first SELECT statement - SQL processa a primeira instrução SELECT:

    SELECT EMPNO
      FROM CORPDATA.EMPLOYEE
     WHERE WORKDEPT = 'D11'

The query returns the following interim result table.
A consulta retorna a seguinte tabela de resultados provisórios.

    EMPNO from CORPDATA.EMPLOYEE

    000060
    000150
    000160
    000170
    000180
    000190
    000200
    000210
    000220
    200170
    200220

Step 2. SQL processes the second SELECT statement - SQL processa a segunda instrução SELECT

    SELECT EMPNO
      FROM CORPDATA.EMPPROJACT
     WHERE PROJNO = 'MA2112' OR
           PROJNO = 'MA2113' OR
           PROJNO = 'AD3111'

The query returns another interim result table.
A consulta retorna outra tabela de resultados provisória.

    EMPNO from CORPDATA.EMPPROJACT

    000230
    000230
    000240
    000230
    000230
    000240
    000230
    000150
    000170
    000190
    000170
    000190
    000150
    000160
    000180
    000170
    000210
    000210

Step 3. SQL combines the two interim result tables, removes duplicate rows, and orders the result:
O SQL combina as duas tabelas de resultados provisórias, remove linhas duplicadas e ordena o resultado:

    SELECT EMPNO 
      FROM CORPDATA.EMPLOYEE
     WHERE WORKDEPT = 'D11'
    UNION
    SELECT EMPNO 
      FROM CORPDATA.EMPPROJACT
     WHERE PROJNO = 'MA2112' OR
           PROJNO = 'MA2113' OR
           PROJNO = 'AD3111'
     ORDER BY EMPNO

The query returns a combined result table with values in ascending sequence.
A consulta retorna uma tabela de resultados combinados com valores em sequência crescente.

    EMPNO

    000060
    000150
    000160
    000170
    000180
    000190
    000200
    000210
    000220
    000230
    000240
    200170
    200220

When you use UNION:

  • Any ORDER BY clause must appear after the last subselect that is part of the union.
    In this example, the results are sequenced on the basis of the first selected column, EMPNO.
    The ORDER BY clause specifies that the combined result table is to be in collated sequence.
    ORDER BY is not allowed in a view.
  • A name may be specified on the ORDER BY clause if the result columns are named.
    A result column is named if the corresponding columns in each of the unioned select-statements have the same name.
    An AS clause can be used to assign a name to columns in the select list.

Quando você usa UNION:

  • Qualquer cláusula ORDER BY deve aparecer após a última subseleção que faz parte da união.
    Neste exemplo, os resultados são sequenciados com base na primeira coluna selecionada, EMPNO.
    A cláusula ORDER BY especifica que a tabela de resultados combinados deve estar em sequência intercalada.
    ORDER BY não é permitido em uma visualização.
  • Um nome pode ser especificado na cláusula ORDER BY se as colunas de resultado forem nomeadas.
    Uma coluna de resultado será nomeada se as colunas correspondentes em cada uma das instruções de seleção unidas tiverem o mesmo nome.
    Uma cláusula AS pode ser usada para atribuir um nome às colunas na lista de seleção.
    SELECT A + B AS X ...
    UNION
    SELECT X ... 
     ORDER BY X

If the result columns are unnamed, use a positive integer to order the result.
The number refers to the position of the expression in the list of expressions you include in your subselects.

Se as colunas de resultado não tiverem nome, use um número inteiro positivo para ordenar o resultado.
O número se refere à posição da expressão na lista de expressões que você inclui em suas subseleções.

    SELECT A + B ...
    UNION
    SELECT X ... 
     ORDER BY 1

To identify which subselect each row is from, you can include a constant at the end of the select list of each subselect in the union.
When SQL returns your results, the last column contains the constant for the subselect that is the source of that row.

For example, you can specify:
Para identificar de qual subseleção cada linha vem, você pode incluir uma constante no final da lista de seleção de cada subseleção na união.
Quando o SQL retorna seus resultados, a última coluna contém a constante para a subseleção que é a origem daquela linha.
Por exemplo, você pode especificar:

    SELECT A, B, 'A1' ... 
    UNION 
    SELECT X, Y, 'B2'...

When a row is returned, it includes a value (either A1 or B2) to indicate the table that is the source of the row's values.
If the column names in the union are different, SQL uses the set of column names specified in the first subselect when interactive SQL displays or prints the results, or in the SQLDA resulting from processing an SQL DESCRIBE statement.

Quando uma linha é retornada, ela inclui um valor (A1 ou B2) para indicar a tabela que é a origem dos valores da linha.
Se os nomes das colunas na união forem diferentes, o SQL usará o conjunto de nomes das colunas especificado na primeira subseleção quando o SQL interativo exibir ou imprimir os resultados, ou no SQLDA resultante do processamento de uma instrução SQL DESCRIBE.

Note:
Sort sequence is applied after the fields across the UNION pieces are made compatible.
The sort sequence is used for the distinct processing that implicitly occurs during UNION processing.

Nota: A sequência de classificação é aplicada depois que os campos nas peças UNION são tornados compatíveis.
A sequência de classificação é usada para o processamento distinto que ocorre implicitamente durante o processamento UNION.