ページのトップに戻る
Symfoware Server SQLビギナーズガイド

5.5 複数の表から行の集合和を求める

複数の表に含まれる行の間で集合和を求めることができます。集合和を求めるには、2つ以上の問合せ指定を“UNION”で結合して指定します。それぞれの問合せ指定には、処理対象の表およびデータを取り出す条件を指定します。集合和を求めるときに、それぞれの列同士で値が同じ行を1行にすることができます。あるいは、元の行数のままにすることもできます。

集合和で重複する行を1行にする

問合せ指定をUNIONで結合した結果、それぞれの問合せ指定の結果の行が集められて表が導出されます。このとき、重複する行は1行になります。重複する行とは、複数の行の間で各列の値が同じ行のことです。問合せ指定をUNIONで結合した結果、どのような表が導出されるかを“図5.7 問合せ式にUNIONを指定した例”に示します。

1

図5.7 問合せ式にUNIONを指定した例”で示す表TBL1の列COLA、COLCと、表TBL2の列COLZ、COLXのそれぞれの行の間で集合和を求めます。表TBL1および表TBL2はスキーマSCMに含まれます。

 SELECT COLA, COLC FROM SCM.TBL1 UNION SELECT COLZ, COLX FROM SCM.TBL2 
                   (1)                               (2)

(1) 問合せ指定[1]

(2) 問合せ指定[2]

(1)~(2) 問合せ式

図5.7 問合せ式にUNIONを指定した例

問合せ指定をUNIONで結合すると、両方の問合せ指定の結果の列が左から順に対応し新たな表が導出されます。それぞれの問合せ指定は、以下のように指定することが必要です。

  • 問合せ指定同士で、結果の列の数は同じであることが必要です。

  • それぞれの対応する結果の列のデータ型は、比較可能であることが必要です。

比較可能なデータ型については、“表6.5 比較可能なデータ型”を参照してください。

なお、問合せ式の結果の表の列名は、左側の問合せ指定で指定した列名となります。ただし、左側の問合せ指定の選択リストが演算式や集合関数の場合は、結果の表の列は名前なしとなります。

集合和で重複する行もそのまま含める

重複する行を1行にせず、それぞれの問合せ指定の結果のすべての行から表を導出するには、UNIONとともにALLを指定します。どのような表が導出されるかを“図5.8 問合せ式にUNION ALLを指定した例”に示します。

2

図5.8 問合せ式にUNION ALLを指定した例”で示す表TBL1の列COLA、COLCと、表TBL2の列COLZ、COLXのそれぞれの行の間で集合和を求めます。なお、重複する行もすべて含みます。

 SELECT COLA,COLC FROM SCM.TBL1 UNION ALL SELECT COLZ,COLX FROM SCM.TBL2
                (1)                                  (2)

(1) 問合せ指定[1]

(2) 問合せ指定[2]

(1)~(2) 問合せ式

図5.8 問合せ式にUNION ALLを指定した例

UNIONによる集合和の順序

UNIONの結合は、左から順に処理されます。なお、括弧(“(”および“)”)を使用して評価順序を指定することができます。括弧の中の問合せ式は、ほかに先立って処理されます。括弧を使用した例を以下に示します。

3

表TBL1、表TBL2、表TBL3および表TBL4の集合和を求めます。まず表TBL1と表TBL2で重複する行を取り除いて求めます([1])。次に表TBL3と表TBL4で重複する行を取り除いて求めます([2])。最後にそれらの結果同士で重複する行を含めて求めます([3])。

(SELECT COLA FROM SCM.TBL1 UNION SELECT COLZ FROM SCM.TBL2)
                            [1]
   UNION ALL
      [3]
   (SELECT COL1 FROM SCM.TBL3 UNION SELECT COL1 FROM SCM.TBL4)
                               [2]