はじめに
テーブルに対し縦方向(行)に作用する集合演算子と、横方向(列)に作用する結合を覚えることで、複数のテーブルに分散しているデータを組み合わせて望む結果を選択することが出来るようになります。
集合演算とは
片方のテーブルだけにあるレコードを集めた結果などを得ることが出来ます。そして、このような集合演算を行なうための演算子を「集合演算子」
テーブルの足し算 UNION
最初に紹介する集合演算子は、レコードの足し算を行なう UNION(和)です。以下に構文を示します。
UNION に限らず集合演算子は、通常は重複行が排除されます。
縦に結合されます。以下は例です。
従業員
従業員コード | 従業員名 |
---|---|
A0001 | チャーリー |
A0002 | ペパーミント |
受給者
受給者コード | 受給者名 |
---|---|
A0001 | チャーリー |
B0001 | スヌーピー |
B0002 | ウッドストック |
SQL
SELECT * FROM 従業員
UNION
SELECT * FROM 受給者
結果
従業員コード | 従業員名 |
---|---|
A0001 | チャーリー |
A0002 | ペパーミント |
B0001 | スヌーピー |
B0002 | ウッドストック |
集合演算の注意事項
- 演算対象となるレコードの列数は同じであること 例えば、片方の列数が 2 列なのに、片方が 3 列という足し算を行なうことは出来ません。
- 足し算の対象となるレコードの列のデータ型が一致していること。左から数えて同じ位置にある列は、同じデータ型である必要があります。また、どうしても 違うデータ型の列を使いたい場合は、型変換の関数 CAST を使うことで集合演算子を使用が可能になります。
- ORDER BY 句は 1 つだけUNION で足せる SELECT 文は、どんなものでもかまいません。これまでに学んだ WHERE、GROUP BY、HAVING といった句を使うことも出来ます。ただし、ORDER BY 句だけは、全体として 1 つを最後につけられるだけです。
重複行を残す集合演算 ALL オプション
ALL オプションは UNION の後ろに「ALL」というキーワードを追加
SELECT * FROM 従業員
UNION ALL
SELECT * FROM 受給者