【SQL】集合演算とは?和・差・積・直積について解説

 

演算とは、表に対する操作のことです。

データベースに関係する集合は、次の2種類です。

  1. 集合演算(一般的に用いられる)
  2. 関係演算(データベース独自)




関係演算については、こちらの記事で解説しています。
ぜひ参考にしてください。

関係演算とは?選択・射影・結合を理解しよう

2022年7月26日

 

 

データサイエンスを学びたい人におすすめ!プログラミングスクール
  • TechAcademy [テックアカデミー]
    豊富なコースで目的にあわせて選択可能初心者から転職希望者までタイプ別にプランをカスタマイズマンツーマンサポートがつく。
  • DMM WEBCAMP
    転職成功率98%&離職率2.3%転職できなければ全額返金DMM.comグループならではの非公開求人も多数
  • アイデミー
    AIやデータサイエンスに特化オンライン学習なのでいつでも学習可能。学習したい講座を自由に追加受講することができる。





集合演算とは?

集合演算には、次の3種類があります。

  • 和:表同士を合体する
  • 差:表同士の差分を取る
  • 積:表同士の共通レコードを導出する
  • 直積:表同士の全ての掛け合わせを導出する

 

和・差・積は、同じスキーマの表に対して演算ができるよ。
一方で、直積は、どのようなスキーマ同士でも演算可能だ!

同じスキーマの表…。どういうこと?

簡単にいうと、表同士が同じ項目で構成されていることが必須条件ということだよ。
例えば、A(氏名,住所)、B(大学,学部)という2つの表で和・差・積をしようとしても、AとBとでは属性が違うから演算できないんだ!

上記の場合でも、直積は演算可能だよ。




次の表を例に、それぞれの演算の説明をします。

説明の例で使うDB
説明の例で使うDB

 

和は、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 学部表



まとめ

いかがでしたか?


今回は、集合演算について説明しました。

集合演算の仲間「関係演算」についても解説しています。


こちらもぜひご参照ください。

関係演算とは?選択・射影・結合を理解しよう

2022年7月26日




データサイエンスを本気で学ぶなら、プログラミングスクールがおすすめ

おすすめのスクールはこちらからCHECK!

【2023年最新版】データサイエンスが学べるおすすめスクール5選

2022年6月4日