関係代数の基本演算子まとめ!選択・射影・直積・和・差・改名を例題付きで解説
関係代数(Relational Algebra)とは
関係代数は手続き型問い合わせ言語の一つで、複数のリレーション(表)に対して演算を順次適用し、その結果として新しいリレーション(1つの表)を得るために用いられます。データベース理論の根幹をなし、SQLの動作を理解する上でも欠かせない重要な概念です。
本記事では、次の3つのリレーション(表)を使用して、基本的な演算子を具体的に見ていきます。
表1:course(コース)
| course_id | name |
|---|---|
| 1 | コンピュータサイエンス |
| 2 | 情報技術 |
| 3 | 機械工学 |
表2:students(学生)
| 出席番号 | 名前 | 住所 | 年齢 |
|---|---|---|---|
| 1 | Ram | デリー | 18 |
| 2 | Raju | ハイデラバード | 20 |
| 4 | Faiz | デリー | 22 |
| 5 | Salman | ハイデラバード | 20 |
表3:hostel(宿舎)
| 学生番号 | 名前 | 住所 | 年齢 |
|---|---|---|---|
| 1 | Ram | デリー | 18 |
| 2 | Akash | ハイデラバード | 20 |
| 3 | Neha | ジャーンシー | 21 |
これらのリレーションに対して演算を行うことで、新しいリレーションを作成します。以下、主要な6つの演算子を順に解説します。
1. 選択演算(σ:シグマ)
選択演算子は記号 σ で表され、指定した条件を満たすタプル(行)だけをリレーションから取り出します。条件に該当しない行は結果に含まれません。
構文
σ(条件)(リレーション名)
例
年齢が22歳の学生を選択する
σ(age = 22)(students)
実行結果
| 出席番号 | 名前 | 住所 | 年齢 |
|---|---|---|---|
| 4 | Faiz | デリー | 22 |
2. 射影演算(π:パイ)
射影演算子は記号 π で表され、リレーションから特定の列(属性)だけを取り出します。指定されていない列は結果に出力されません。
構文
π(列1, 列2, …, 列n)(リレーション名)
例
宿舎にいる全学生の番号と名前を取り出す
π(st_no, name)(hostel)
実行結果
| 学生番号 | 名前 |
|---|---|
| 1 | Ram |
| 2 | Akash |
| 3 | Neha |
射影には重複行が自動的に除去されるという特徴があります。たとえば同名の学生が複数人いた場合、同一内容の行は1つにまとめられます。
3. 直積(×:クロス積)
直積は記号 × で表され、2つのリレーションのすべての組み合わせを求める演算です。リレーション1の各タプルと、リレーション2の各タプルがすべて組み合わされます。そのため、出力されるリレーションのタプル数は n×m となります(n:リレーション1のタプル数、m:リレーション2のタプル数)。結合(JOIN)の基礎となる演算でもあります。
構文
リレーション1 × リレーション2
例
students表とcourse表の直積を求める
students × course
実行結果(3行 × 3行 = 9行)
| 学生番号 | 名前 | 住所 | 年齢 | course_id | コース名 |
|---|---|---|---|---|---|
| 1 | Ram | デリー | 18 | 1 | コンピュータサイエンス |
| 1 | Ram | デリー | 18 | 2 | 情報技術 |
| 1 | Ram | デリー | 18 | 3 | 機械工学 |
| 2 | Akash | ハイデラバード | 20 | 1 | コンピュータサイエンス |
| 2 | Akash | ハイデラバード | 20 | 2 | 情報技術 |
| 2 | Akash | ハイデラバード | 20 | 3 | 機械工学 |
| 3 | Neha | ジャーンシー | 21 | 1 | コンピュータサイエンス |
| 3 | Neha | ジャーンシー | 21 | 2 | 情報技術 |
| 3 | Neha | ジャーンシー | 21 | 3 | 機械工学 |
4. 和演算(∪:ユニオン)
2つのリレーション R1 と R2 の和は、「R1 または R2 のいずれかに含まれるすべてのタプル」を返します。両方のリレーションに共通して存在するタプルは、結果に1回だけ現れます。
なお、和を求めるには、両方のリレーションが同じ属性構造(和両立/ユニオン互換)である必要があります。
構文
リレーション1 ∪ リレーション2
例
studentsとhostelの和を求める
students ∪ hostel
実行結果
| 出席番号 | 名前 | 住所 | 年齢 |
|---|---|---|---|
| 1 | Ram | デリー | 18 |
| 2 | Raju | ハイデラバード | 20 |
| 4 | Faiz | デリー | 22 |
| 5 | Salman | ハイデラバード | 20 |
| 2 | Akash | ハイデラバード | 20 |
| 3 | Neha | ジャーンシー | 21 |
5. 差演算(−:マイナス)
差演算は記号 − で表されます。「R1 − R2」は、R1 には存在するが R2 には存在しないタプルからなるリレーションを返します。差を計算する場合も、2つのリレーションが和両立であることが前提となります。
構文
リレーション1 − リレーション2
例
students − hostel を求める
students − hostel
実行結果
| 出席番号 | 名前 | 住所 | 年齢 |
|---|---|---|---|
| 2 | Raju | ハイデラバード | 20 |
| 4 | Faiz | デリー | 22 |
| 5 | Salman | ハイデラバード | 20 |
6. 改名演算(ρ:ロー)
改名演算子は記号 ρ で表され、リレーションやその属性に別の名前を付けるために使用します。演算結果を後続の処理で扱いやすい名前に変更したい場合などに役立ちます。
構文
ρ(新しい名前, 元の名前)
まとめ
関係代数の基本演算子を整理すると、次のようになります。
- 選択(σ):条件を満たす行を取り出す
- 射影(π):必要な列だけを取り出す(重複は除去)
- 直積(×):2つの表の全組み合わせを作る
- 和(∪):どちらかに含まれる行を集める(共通部分は1回のみ)
- 差(−):片方にのみ存在する行を取り出す
- 改名(ρ):リレーションに別名を付ける
これらの演算を組み合わせることで、複雑な問い合わせも表現できます。SQLのSELECT文や結合処理の裏側で何が起きているのかを理解する上でも、関係代数の考え方は非常に重要です。
-
Pythonの基本演算子まとめ|算術・比較・論理・ビット・代入演算子の使い方
このチュートリアルでは、Pythonで使われる基本的な演算子について詳しく解説します。演算子をマスターすれば、数値計算や条件分岐など、プログラミングの基礎がぐっと固まります。サンプルコードと実行結果も併せて紹介するので、ぜひ手を動かしながら読み進めてください。 算術演算子(Arithmetic Operators) 算術演算子は、足し算・引き算・掛け算などの数学的な計算を行うために使われます。主な算術演算子は以下の通りです。 加算(+) ----- 2つの数値を足します 減算(-) ----- ある数値から別の数値を引きます 乗算(*) ----- 2つの数値を掛け合わせます 除算(/)
-
Pythonの基本演算子一覧|7種類の演算子の使い方を徹底解説
Pythonには、値や変数に対してさまざまな処理を行うための「演算子」が多数用意されています。演算子はその役割によって、算術演算子・比較(関係)演算子・論理演算子・ビット演算子・代入演算子・同一性演算子・メンバーシップ演算子の7種類に分類されます。この記事では、それぞれの種類ごとに使い方をわかりやすく解説します。 1. 算術演算子 数値の計算に使用する最も基本的な演算子です。 +:加算(足し算) -:減算(引き算) *:乗算(掛け算) /:除算(割り算)。結果は常に浮動小数点数になる //:切り捨て除算。小数点以下を切り捨てた結果を返す %:剰余(割り算の余り) a = 10 b = 3