- [[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`に相当