DB/SQL/集合演算子の利用

Top / 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 (2383d)