包含相同列的表的笛卡尔积

时间:2015-11-26 15:31:16

标签: relational-algebra cartesian-product

我对此感到很困惑。我搜索了很多教程,但我找不到明确的答案。

A  B        B  D
1  X        x  5
2  x        y  6
            x  4

我想跨越这两个表.A,B,B,d是属性。

A  B   B  D
1  X   x  5
2  x   x  5
1  X   y  6
2  x   y  6
1  X   x  4
2  x   x  4

这应该根据笛卡儿的规则正常回答。越过所有行。但我对同一列B感到困惑。相同的列会出现两次?

2 个答案:

答案 0 :(得分:1)

你不需要以下内容;

SELECT * FROM TAbleA CROSS JOIN TableB

答案 1 :(得分:1)

某些关系查询语言/代数关系具有有序列名。有一种方法可以按列号引用列。因此,属性名称可以命名多个列。笛卡尔乘积运算符可以采用任意两种关系,因为属性名称在输出(或输入)上出现多次不是问题。

某些关系查询语言/代数笛卡尔积产品运算符更改输出上的属性名称。输入关系有名称。 (输入是关系变量/常量的以太名称或关系值及其名称。)每个输出列名称是输入列名称和输入关系名称的组合。笛卡尔积运算符可以采用任意两种关系。因为在输入时出现在具有相同属性名称的不同关系中的列将通过输出上的输入关系名称来区分。

一些关系查询语言/代数都有。笛卡尔积运算符可以采用任意两种关系。

某些关系查询语言/代数关系只有属性名称的一个副本。因此,只有在输入不共享任何属性名称时才能调用笛卡尔积。 (这只是NATURAL JOIN和/或EQUIJOIN的特例。)

因此,您必须密切关注关系查询语言/代数与关系和运算符

PS:SQL查询语言

SELECT表达式的FROM子句生成其表的临时笛卡尔积。每个列名都是一个输入列名,前缀为给定的表名或表别名,加上一个点。这是上面笛卡尔积的变更命名版本。点名称用于SELECT表达式的其余部分。 SELECT 子句最终删除前缀和点。因此,SELECT表达式之外的SQL表值中没有点。 (列也是有序的,可能有重复的列名。)

如果您的SQL表表达式是 AB & BD 然后你需要

SELECT * FROM AB ab CROSS JOIN BD bd