技術とか戦略とか

証券レガシーシステムを8年いじってから転職した普通の文系SEによるブログ。技術のみではなく趣味の戦略考察についても。

情報処理技術者試験対策「select文の結果の結合等(集合演算子)」

今回は、select文の結果を結合する文法の紹介です。
結果を結合するためには、集合演算子のUNION(重複排除したい場合はUNION ALL)を用います。
実務では複数のselect文の結果を1回のSQL文発行で取得したいことが結構あるので、知っておくと便利です。
情報処理技術者試験でも出題されることがあります。
 
ついでに、UNIONやUNION ALL以外の集合演算子についても紹介します。
 
【文法】
select文
集合演算子
select文
[集合演算子 select文…]
[order by…]
 
※集合演算子には以下のようなものがある
・UNION
 前後のselect文の結果を結合する。
 重複する結果は1行にまとめられる。
・UNION ALL
 前後のselect文の結果を結合する。
 重複する結果はまとめられない。
・MINUS、EXCEPT
 前のselect文の結果から後のselect文の結果を取り除く。
 OracleはMINUS、それ以外はEXCEPTを用いる。
 (MySQLではサポート外)
・INTERSECT
 前のselect文の結果と後のselect文の結果で一致するものだけを抽出する。
 (MySQLではサポート外)
 
※「order by」は個別のselect文にはかからず、集合演算子で結合した結果全体にかかる。

 

【対象テーブル例】
・A支店商品
  +--------+--------+
  | 商品ID | 商品名 |
  +--------+--------+
  | 1      | 商品1 |
  | 2      | 商品2 |
  | 3      | 商品3 |
  +--------+--------+
 
・B支店商品
  +--------+--------+
  | 商品ID | 商品名 |
  +--------+--------+
  | 3      | 商品3 |
  | 4      | 商品4 |
  | 5      | 商品5 |
  +--------+--------+
 
【使用例】
・UNION
select * from A支店商品
union
select * from B支店商品
order by 商品ID;

  +--------+--------+
  | 商品ID | 商品名 |
  +--------+--------+
  | 1      | 商品1 |
  | 2      | 商品2 |
  | 3      | 商品3 |
  | 4      | 商品4 |
  | 5      | 商品5 |
  +--------+--------+
 
・UNION ALL
select * from A支店商品
union all
select * from B支店商品
order by 商品ID;

  +--------+--------+
  | 商品ID | 商品名 |
  +--------+--------+
  | 1      | 商品1 |
  | 2      | 商品2 |
  | 3      | 商品3 |
  | 3      | 商品3 |
  | 4      | 商品4 |
  | 5      | 商品5 |
  +--------+--------+
 
・MINUS(EXCEPT)
select * from A支店商品
minus
select * from B支店商品
order by 商品ID;

  +--------+--------+
  | 商品ID | 商品名 |
  +--------+--------+
  | 1      | 商品1 |
  | 2      | 商品2 |
  +--------+--------+
 
・INTERSECT
select * from A支店商品
intersect
select * from B支店商品
order by 商品ID;

  +--------+--------+
  | 商品ID | 商品名 |
  +--------+--------+
  | 3      | 商品3 |
  +--------+--------+
 
---------------------
目次

https://1drv.ms/b/s!AivF3bzWXOzuhG1Xk5hscKYqkLkM