ITとdesign エンジニアのブログ by エンジ庭

IT業界のトレンドなどIT分野について学んだ事を書いていきます。プログラミング技術などについて現在Qiitaメインに書いてますので、そちらを参照ください。  https://qiita.com/kota_sho

SQL 集計演算子編

2019-08-27

集合演算子

 

構造が似たテーブルを合算させることができるのが集合演算子

構造が似たというのは、列数、列名が同じテーブルのことです。

例えば、家計簿データベースで行数が増えてきたので、アーカイブテーブルに古いデータを写した場合、構造が同じテーブルが2つできることになりますので、それらをもう一度がっちゃんこできるということです。

集合演算子には、いくつかの演算子がありますので、それぞれまとめます。

 

和集合を求める UNION

 2つのSERECT文の検索結果を足し合わせます。

イメージとしてはテーブルの足し算(行の足し算)です。

なおUNIONでは重複行があった場合、1つにまとめます。

SELECT shohin_id, shohin_mei  --式1
FROM shohin
UNION
SELECT shohin_id, shohin_mei  --式2
FROM shohin2;

 

UNION ALL

は重複行があった場合も全て含めます。

SELECT shohin_id, shohin_mei  --式1
FROM shohin
UNION ALL
SELECT shohin_id, shohin_mei  --式2
FROM shohin2;

 

差集合を求める EXCEPT

レコードの引き算です。

式1EXCEPT 式2は式1から式2を引く、つまり式1にはあって式2にはないものが最後残ります。下記で言えば、shohinテーブルにはあるけど、shohin2テーブルにはないものが選ばれます。

SELECT shohin_id, shohin_mei  --式1
FROM shohin
EXCEPT
SELECT shohin_id, shohin_mei  --式2
FROM shohin2;

 

積集合を求める INTERSECT

両方のテーブルにある共通のものが選ばれます。

SELECT shohin_id, shohin_mei  --式1
FROM shohin
INTERSECT
SELECT shohin_id, shohin_mei  --式2
FROM shohin2;

 

集合演算子の注意点:

・集合対象となるレコードの数は同じであるべし

・足し算の対象となるレコードの列のデータ型は一致しているべし

・SELECT文はどんなものを指定してもいいが、ORDER BYは最後に一つだけ