为什么,当在 table 之间形成笛卡尔积时,必须始终检查 table 之间的公共属性是否相等?

Why,when the cartesian product is being formed between tables must one always check that the common attribute is equal across the table?

我丢失了关于这部分的笔记,而且在任何地方都找不到关于它的任何信息。我知道笛卡尔积是什么,但我不知道共同属性是什么意思,也不知道为什么必须相等。说我说

SELECT *
FROM STUDENT,ENROLS

这里的共同属性是什么,或者那是其中的一行吗?

不,您不需要检查公共属性。但是,如果你不这样做,你会得到一个交叉 join/outer 加入,这可能不是你想要的(将每个学生与每个注册结合起来)。通常,这样的交叉连接会根据某些条件(如槽位规划)进行过滤。但是对于 "list students with possible enrollments" 或 "list all enrolled students" 之类的问题,LEFT 或 RIGHT 连接更好。

详情请看这里:What is the difference between "INNER JOIN" and "OUTER JOIN"?

当在 SQL 查询中形成笛卡尔积时,例如

SELECT table1.column1, table2.column2... FROM table1, table2

在逻辑上等同于 内部联接,其中测试条件 - 始终 - 计算结果为真。

因此,结果 table 将是一个交叉连接(或笛卡尔积),其中第一个 table 操作数的每一行都与第二个 table 的所有行组合操作数.

笛卡尔积不是通过检查任何测试条件或公共属性形成的,但可以随后通过测试条件进行过滤,例如。 WHERE 子句,就像 Inner Join 一样。