DBMSのリレーショナル集合演算子とは?UNION・INTERSECT・MINUSを例題で解説
はじめに
DBMS(データベース管理システム)では、リレーショナル集合演算子もサポートされています。主要な集合演算子には和集合(UNION)、積集合(INTERSECT)、差集合(MINUS)の3つがあり、それぞれ異なるSQLクエリによって実装できます。本記事では、以下の2つのサンプル表を使いながら、各演算子の動作を詳しく見ていきます。
| 学生番号 | 学生名 | 得点 |
| 1 | John | 95 |
| 2 | Mary | 80 |
| 3 | Damon | 57 |
| 学生番号 | 学生名 | 得点 |
| 2 | Mary | 50 |
| 3 | Damon | 98 |
| 6 | Matt | 45 |
これらの集合演算子を利用する際には、演算対象となる2つの結果セットが同じ列数・互換性のあるデータ型を持っていること(列の構成が一致していること)が必要条件となります。
和集合(UNION)
UNIONは、2つのクエリから得られた結果を1つの表として結合する演算子です。実行時に重複行は自動的に取り除かれ、重複のない値のみが表示されます。もし重複したデータも結果に含めたい場合は、UNION ALLを使用します。
UNIONの使用例は次のとおりです。
Select Student_Name from Art_Students UNION Select Student_Name from Dance_Students
このクエリを実行すると、Art_Students表とDance_Students表に登録されているすべての学生名、つまり John、Mary、Damon、Matt が表示されます。
積集合(INTERSECT)
INTERSECTは、交わる2つのデータセットに共通して存在する値を抽出する演算子です。こちらも2つのデータセットの列構成が一致している必要があります。また、結果を表示する前に重複行が自動的に除去されます。
INTERSECTの使用例は次のとおりです。
Select Student_Name from Art_Students INTERSECT Select Student_Name from Dance_Students
このクエリを実行すると、Art_Students表とDance_Students表の両方に存在する学生名、すなわち美術とダンスの両方の授業を受講している学生が表示されます。この例では MaryとDamon が該当します。
差集合(MINUS)
差集合演算子は、2つの集合を受け取り、「1つ目の集合には含まれているが、2つ目の集合には含まれていない値」を返します。
差集合の使用例は次のとおりです。
Select Student_Name from Art_Students MINUS Select Student_Name from Dance_Students
このクエリを実行すると、Art_Students表には存在するもののDance_Students表には存在しない学生名、すなわちダンスは受講せず美術のみを受講している学生が表示されます。この例では John が該当します。
補足:RDBMSによる違いに注意
なお、これらの演算子の名称やサポート状況はRDBMSによって異なります。MINUSはOracle Database固有のキーワードであり、SQL標準ではEXCEPTが使用されます(PostgreSQLやSQL Serverなど)。また、MySQLでは長らくINTERSECTやEXCEPTが直接サポートされていませんでしたが、MySQL 8.0.31以降でINTERSECTおよびEXCEPTが利用可能になっています。使用しているデータベース製品のドキュメントを確認することをおすすめします。
-
Redisでセットの和集合を求める方法 – SUNION・SUNIONSTOREコマンド徹底解説
このチュートリアルでは、Redisデータストアに保存された2つ以上のセット(Set)値に対して和集合演算を実行する方法を、SUNIONコマンドとSUNIONSTOREコマンドを使って解説します。 セットの和集合とは 集合論において、2つ以上の集合の和集合とは、それぞれの集合に含まれるすべての要素(重複は除く)をまとめて持つ集合のことです。具体例を見てみましょう。 A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8, 9} A と B の和集合: A U B = {1, 2, 3, 4, 5, 6, 7, 8, 9} SUNIONコマンドとは SUNIONコマンドは
-
Redis ZUNIONSTOREコマンド徹底解説 – ソート済みセットの和集合を計算する方法
このチュートリアルでは、Redisに保存された2つ以上のソート済みセット(Sorted Set)に対して、ZUNIONSTOREコマンドを使って和集合(ユニオン)操作を実行する方法を学びます。 セットの和集合とは? 集合論において、2つ以上の集合の和集合とは、それらすべての集合に含まれる要素(重複なし)をすべて持つ集合のことです。例を見てみましょう。 A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8, 9} AとBの和集合: A U B = {1, 2, 3, 4, 5, 6, 7, 8, 9} このように、両方の集合に存在するすべての要素が1つの集合にまとめられ