给定关系 \(R(A_1, A_2, A_3, \cdots, A_n), t\in R\),则关系 \(R\) 对应到数据库中的表结果如下:

\(A_1\)\(A_2\)\(A_3\)\(\cdots\)\(A_n\)

\(t[A_1\)]

\(t[A_1\)]

\(t[A_3\)]

\(\cdots\)

\(t[A_n\)]

即:

  • 关系模式 \(R\) 对应数据库中的表。

  • 属性 \(A_n\) 对应数据库中的字段。

  • \(t\in R\) 表示 \(t\) 是 \(R\) 中的一行。

  • \(t[A_n\)] 表示元组 \(t\) 对应 \(A_n\) 中的一个分量。

关系代数代表了关系模式之间的运算,常见的运算有:选择、投影、集合并、集合差和笛卡尔积、交、差、自然连接和赋值。

交、并、差

交、并、差运算来自数学概念中集合的运算,表示符号和集合相同:

给定关系模式 \(R\) 和关系模式 \(S\),则交、并、差结果如下:

  • \(R\cap S\)

  • \(R\cup S\)

  • \(R-S\)

选择

选择操作使用希腊字母 \(\sigma\) 表示。例如:

\[\sigma_{id=1}{user}\]

对应到 SQL 语句中的操作为:

SELECT * FROM user WHERE id = 1;

投影

投影操作使用希腊字母 \(\pi\) 表示。投影表示从关系模式 \(R\) 中选出指定字段。例如:

\[\pi_{id, name}{R}\]

对应到 SQL 语句中的操作为:

SELECT id, name FROM R;

笛卡尔积

笛卡尔积代表了两个关系模式的全排列,使用 \(\times\) 表示:

\[R\times S\]

连接

连接使用 \(\bowtie\) 表示。连接是在笛卡尔积的基础上根据关系模式 \(R\) 和 \(S\) 的字段进行进一步的过滤和筛选。

根据字段之间的比较关系可以分为等值连接和不等值连接:

SELECT id, name FROM R JOIN S WHERE R.C = S.E; /* 等值连接 */
SELECT id, name FROM R JOIN S WHERE R.C > S.E; /* 不等值连接 */

自然连接

自然连接是一种特殊的等值连接。在等值连接的基础上去除了重复的列。

\[\pi_{id, name}{R\bowtie S}(C=E)\]

对应的 SQL 语句为:

SELECT R.id, name FROM R JOIN S WHERE C=E

例题

  1. 给定关系 \(R(A, B, C, D, E)\) 与 \(S(A, B, C, F, G)\),那么与表达式 \(\pi_{1, 2, 4, 6, 7}(\sigma_{1<6}(R\bowtie S))\) 等价的 SQL 语句为:

首先从 \(R\bowtie S\) 可以看出 \(R\) 和 \(S\) 发生了自然连接。因此对应的 SQL 语句为:

SELECT R.A, R.B, R.C, D, E, F, G FROM R, S;

其次使用选择操作 \(\sigma_{1<6}\),也就是 WHERE R.A < F;最后使用投影表达式 \(\pi_{1, 2, 4, 6, 7}\) 选择了字段 R.A, R.B, D, F, G。因此最终的 SQL 语句为:

SELECT R.A, R.B, D, F, G FROM R, S WHERE R.A < F;
Last moify: 2024-10-22 01:46:27
Build time:2025-07-18 09:41:42
Powered By asphinx