DB/SQL/集合演算子の利用
集合演算子の種類†
集合演算子は、複数の SELECT 文の結果の和集合、積集合、差集合を求めるためのもの。
集合演算子には以下の種類がある。
| 演算子 | 説明 |
| union | 重複を除いた和集合を求める |
| union all | 重複を含む和集合を求める |
| intersect | 積集合を求める |
| minus | 差集合を求める |
UNION†
二つの SELECT 文の結果の和集合を求める。重複行は除かれる。
SELECT 文の一番最初の列でソートされて出力される。
- 方法
-- 基本 select hoge, fuga from piyo union select foo, bar from buz -- 型を無理やり合わせるならこう select hoge, to_date(null), fuga from piyo union select foo, bar, to_number(null) from baz
- 補足
- NULL は重複のチェックでは無視される
- 各 SELECT 文の列の数と型は一緒でないとダメ。無理やりやるなら例を参照
UNION ALL†
二つの SELECT 文の結果の和集合を求める。重複行も重複しただけ出力される。
ソートはされない。
- 方法
-- 基本 select hoge, fuga from piyo union all select foo, bar from buz
- 補足
- 各 SELECT 文の列の数と型は一緒でないとダメ。無理やりやるなら UNION の例を参照
INTERSECT†
二つの SELECT 文の結果の積集合を求める。共通部分。
ソートはされない。
- 方法
-- 基本 select hoge, fuga from piyo intersect select foo, bar from buz
- 補足
- NULL は無視されない。考慮される
- 各 SELECT 文の列の数と型は一緒でないとダメ。無理やりやるなら UNION の例を参照
MINUS†
二つの SELECT 文の結果の差集合を求める。
順番が大事。ひとつめの SELECT の結果から、ふたつめの SELECT の結果が除かれる。逆にすれば結果が変わる。
- 方法
-- 基本 select hoge, fuga from piyo minus select foo, bar from buz
- 補足
- WHERE 句を使う場合は、WHERE 句に使うすべての列を元の SELECT 文に含める必要がある
- 各 SELECT 文の列の数と型は一緒でないとダメ。無理やりやるなら UNION の例を参照
順序の制御†
表示順を SELECT 文の順序に合わせたいときなどに使うテクニック。NOPRINT を指定したダミーの列に任意の整列用の値を与えて、それで ORDER BY する。
- 方法
-- まず非表示にするソート用の列を指定する colmun fuga noprint -- 各 SELECT 文に、任意の値を持たせたダミーの列を与える select hoge, 10 fuga from piyo union select foo, 20 fuga from baz order by fuga
Last-modified: 2011-10-17 (月) 20:05:29