値のリストをマージする方法
値のリストをマージする 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」で始まるプロジェクトにも従事しているからです。