値のリストをマージする方法

値のリストをマージする UNION キーワードの使用方法は複数あります。

合併 操作とは SQL 操作の一種であり、2 つの SELECT ステートメントの 結果を結合して単一の結果表を形成します。DB2® は UNION キーワードを検出した時点で、各 SELECT ステートメントを処理して一時結果表 を形成します。次に、DB2 は、各ステートメントの一時結果表を結合します。UNION を使用して同一名が付いた 2 つの列を結合する場合、結果表の対応する列はその名前を継承します。

UNION キーワードを使用して、合併の結果表にある個別の行を入手するか、またはオプション・キーワードの ALL を指定した UNION を使用してすべての行 (重複を含む) を入手することができます。

重複の除去方法

複数の表から得られた値のリストをマージ時に、UNION を使用して重複を除去します。以下の例では、EMP 表と EMPPROJACT 表からの値を結合します。

例 1: 次のいずれかのステートメントが真である全従業員の従業員番号のリストを出します。
  • 社員の部門番号が「D」で始まる。
  • プロジェクト番号が「MA」で始まるプロジェクトに、社員が割り当てられている。
SELECT EMPNO FROM EMP
  WHERE DEPT LIKE 'D%'
  UNION
  SELECT EMPNO FROM EMPPROJACT
  WHERE PROJNO LIKE 'MA       

結果の表は、次の例のようになります。

EMPNO
======
000010
000020
000060
000200
000220  

この結果は、2 つの結果表を合併したものとなります。 結果表の 1 つは EMP 表から作成され、 もう 1 つは EMPPROJACT 表から作成されます。 この結果 (1 列だけの表) は従業員番号のリストです。このリストの各エントリーは別個になります。

重複を残しておく方法

合併の結果の中に重複を残しておきたい場合、UNION キーワードの後ろにオプション・キーワードの ALL を指定します。

例 1: 直前の例の UNION キーワードを UNION ALL で置き換えます。
SELECT EMPNO FROM EMP
  WHERE DEPT LIKE 'D%'
  UNION ALL
  SELECT EMPNO FROM EMPPROJACT
  WHERE PROJNO LIKE 'MA       

結果の表は、次の例のようになります。

EMPNO
======
000220
000200
000060
000010
000020
000010

これで、000010 は 2 回以上リストに組み込まれます。その理由は、この社員は「D」で始まる部門に従事し、かつ「MA」で始まるプロジェクトにも従事しているからです。