演算とは、表に対する操作のことです。
データベースに関係する集合は、次の2種類です。
- 集合演算(一般的に用いられる)
- 関係演算(データベース独自)
関係演算については、こちらの記事で解説しています。
ぜひ参考にしてください。
- TechAcademy [テックアカデミー]
豊富なコースで目的にあわせて選択可能、初心者から転職希望者までタイプ別にプランをカスタマイズ。マンツーマンのサポートがつく。 - DMM WEBCAMP
転職成功率98%&離職率2.3%。転職できなければ全額返金。DMM.comグループならではの非公開求人も多数 - アイデミー
AIやデータサイエンスに特化。オンライン学習なのでいつでも学習可能。学習したい講座を自由に追加受講することができる。
集合演算とは?
集合演算には、次の3種類があります。
- 和:表同士を合体する
- 差:表同士の差分を取る
- 積:表同士の共通レコードを導出する
- 直積:表同士の全ての掛け合わせを導出する
和・差・積は、同じスキーマの表に対して演算ができるよ。
一方で、直積は、どのようなスキーマ同士でも演算可能だ!
同じスキーマの表…。どういうこと?
簡単にいうと、表同士が同じ項目で構成されていることが必須条件ということだよ。
例えば、A(氏名,住所)、B(大学,学部)という2つの表で和・差・積をしようとしても、AとBとでは属性が違うから演算できないんだ!
上記の場合でも、直積は演算可能だよ。
次の表を例に、それぞれの演算の説明をします。
和
和は、2つの関係表のいずれかに含まれる行の集合を取り出す演算です。
和は、論理和と同じです。
学生表1と学生表2には、学生番号1・学生番号2が重複しています。
このように、同一の行をまとめて導出する場合のSQLは、UNIONを使って結合します。
通常なら、同じ行は1つにされてしまうんだね。
SELECT * FROM 学生表1
UNION
SELECT * FROM 学生表2
同一の行(重複する行)もまとめない場合は、UNION ALLを使って結合します。
SELECT * FROM 学生表1
UNION ALL
SELECT * FROM 学生表2
差
差は、同じ行を取り除いた表を作る演算です。
例えば、A-Bの場合、Aだけにある行を導出します。
SELECT * FROM 学生表1
EXCEPT
SELECT * FROM 学生表2
積
積は、どちらの表にもある行を導出する演算です。
論理積と同義です。
SELECT * FROM 学生表1
INTERSECT
SELECT * FROM 学生表2
直積
直積は、表同士の全ての掛け合わせを導出する演算です。
異なるスキーマの表に対しても演算できるという特徴があります。
m行n列、k行j列の表を直積した場合、行数はm*k、列数はn+jになります。
SQLでは、CROSS JOINを使います。
SELECT * FROM 学生表
CROSS JOIN 学部表
まとめ
いかがでしたか?
今回は、集合演算について説明しました。
集合演算の仲間「関係演算」についても解説しています。
こちらもぜひご参照ください。
データサイエンスを本気で学ぶなら、プログラミングスクールがおすすめ
おすすめのスクールはこちらからCHECK!