- [[Relational Model|Relation]]のなかで、タプルを探索・操作するための演算
- 演算子
- Select $\sigma$
- Projection $\pi$
- Union $\cup$
- Intersection $\cap$
- Difference $-$
- Product $\times$
- Join $\bowtie$
**Select**: リレーション$R$のなかで、述語を満たすタプルを抽出する(Rのサブセットを取る)
- シンタックス: $\sigma_\mathrm{predicate}(R)$
- predicate(述語)で条件を指定する
- 例: $\sigma_\mathrm{a\_id='a2'}(R)$ → カラムa_idがa2のタプルだけ抽出される
- SQLの`WHERE`に相当
**Projection**: リレーション$R$の中で、特定の属性のみのリレーションを生成する(特定の列のみ抽出する)
- シンタックス: $\pi_\mathrm{A_1, A_2, ..., A_n}(R)$
- $A_1, ..., A_n$に、抽出したい列名を指定する
- 例: $\pi_\mathrm{name}(R)$ → リレーションRから、name列だけ抽出する
- SQLの`SELECT`に相当
**Union**: リレーション$R$と$S$の和集合を取る(どちらかに含まれるタプルをすべて集める)
- シンタックス: $R \cup S$
- $R$と$S$は互換(同じ属性数・対応する属性のドメインが一致)である必要がある
- 例: $R \cup S$ → RまたはSに含まれるタプルの集合(重複は排除される)
- SQLの`UNION`に相当
**Intersection**: リレーション$R$と$S$の積集合を取る(両方に含まれるタプルのみ集める)
- シンタックス: $R \cap S$
- $R$と$S$は和両立(Union互換)である必要がある
- 例: $R \cap S$ → RとSの両方に含まれるタプルの集合
- SQLの`INTERSECT`に相当
**Difference**: リレーション$R$から$S$に含まれるタプルを取り除く
- シンタックス: $R - S$
- $R$と$S$は和両立である必要がある
- 例: $R - S$ → Rに含まれ、かつSには含まれないタプルの集合
- SQLの`EXCEPT`(`MINUS`)に相当
**Product**: リレーション$R$と$S$の直積(デカルト積)を取る(すべての組み合わせを生成する)
- シンタックス: $R \times S$
- $R$のタプル数×$S$のタプル数の行数を持つリレーションになる
- 例: $R \times S$ → Rの各タプルとSの各タプルをすべて組み合わせたタプルの集合
- SQLの`CROSS JOIN`に相当
**Join**: リレーション$R$と$S$を、共通の条件(属性)で結合する
- シンタックス: $R \bowtie_\theta S$($\theta$は結合条件)、条件を省略した自然結合は$R \bowtie S$
- 実質的には「Product → Select(条件で絞り込み)」と等価な演算
- 例: $R \bowtie_\mathrm{R.a\_id = S.a\_id} S$ → Rのa_idとSのa_idが一致するタプルを結合する
- SQLの`JOIN`に相当