今回は、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 |
+--------+--------+
---------------------
目次