関係代数と関係論理は、関係を操作するために使用する2つの異なる、しかし同等の形式言語です。代数が手続き型であり、問合わせの最適化ルーチンとデータベース マネージャが操作できる、問合わせの内部表記用であるのに対して、論理は非手続き型であって、ユーザーによって適用可能な問合わせ言語の基礎となります。
基本的な問合わせSELECT-FROM-WHERE (問合わせ用に一般化された非手続き型関係論理のSQL表現形式)は、関係代数の形式で記述し直すことができます。そうするには、以下のようにします。
projection ( restriction ( product ) )
説明:
構文要素 | 指定内容 |
---|---|
projection | 1つ以上の関係から1つ以上の属性を抽出するPROJECT演算子を適用した結果。 これはSQL SELECT ... FROMを定義します。projectionはテーブルから列を選択します。 |
restriction | projectionから1つまたは複数の組を抽出するRESTRICT(またはSELECT)演算子を適用した結果。 関係代数のSELECTは、SQLのSELECT文とは異なります。これは、本質的にはPROJECT演算とRESTRICT演算を実行します。 restrictionはSQL SELECT文のWHERE、ON、およびQUALIFY句を定義します。restrictionは、テーブルから修飾された行を選択します。結合条件が存在していれば、restrictionは結合によって作成された中間結果テーブルから修飾された行を選択します。 |
product | 指定した各々の関係から、組の可能性のある組合わせすべてを作成するPRODUCT演算子を適用した結果。 これは結合を定義します。具体的には、内部結合です。 |
表現を明確にするには、元の式をprojection (内部結合)として再度記述します。
外部結合の関係代数
外部結合は残りの組を指定した内部結合の結果を、内部結合の結果テーブルの組と共通点のない結合関係のいずれか(または両方)にマージします。
外部結合はリレーショナル代数で以下のように表現できます。
projection ( inner_join UNION ALL extension )
説明:
構文要素 | 指定内容 |
---|---|
projection | 1つ以上の関係から1つ以上の属性を抽出するPROJECT演算子を適用した結果。 |
inner_join | RESTRICT(またはSELECT)演算子をprojection内の関係のPRODUCTに適用した結果。 |
UNION ALL | UNION ALL演算子。 UNION ALLは重複行を許可するため。これは厳密には関係演算子ではありません。 |
extension | RESTRICT演算子をprojection内の関係のPRODUCTに適用した結果の補足。 extensionは、問合わせの宣言方法によっては、左テーブルまたは右テーブル(あるいはその両方)から除外された組のいずれかを参照することができます。 これらはそれぞれ、左部結合、右部結合、および完全外部結合です。 |