先决条件 – 关系代数
我们已经知道关系只不过是一组元组,这里我们将有 2 组元组。
在对两组元组上的两个关系应用笛卡尔积时,它将一个一个地从左侧集合(关系)中取出每个元组,并将其与右侧集合(关系)中的所有元组配对。
因此,度数为 p 的两个关系 A(R1, R2, R3, …, Rp) 和度数为 n 的 B(S1, S2, S3, …, Sn) 的交叉积是关系 C(R1, R2, R3, …, Rp, S1, S2, S3, …, Sn) 具有度数 p + n 属性。
CROSS PRODUCT 是一种二元集合运算手段,一次我们可以对两个关系应用该运算。但是我们正在执行操作的两个关系没有相同类型的元组,这意味着这两个关系的联合兼容性(或类型兼容性)是没有必要的。
符号:
A ✕ S
其中 A 和 S 是关系,
符号“✕”用于表示 CROSS PRODUCT运算符。
例子:
考虑下面两个关系 STUDENT(SNO, FNAME, LNAME) 和 DETAIL(ROLLNO, AGE) :
SNO | FNAME | LNAME |
---|---|---|
1 | Albert | Singh |
2 | Nora | Fatehi |
ROLLNO | AGE |
---|---|
5 | 18 |
9 | 21 |
在 STUDENT 和 DETAIL 上应用 CROSS PRODUCT:
STUDENT ✕ DETAILS
SNO | FNAME | LNAME | ROLLNO | AGE |
---|---|---|---|---|
1 | Albert | Singh | 5 | 18 |
1 | Albert | Singh | 9 | 21 |
2 | Nora | Fatehi | 5 | 18 |
2 | Nora | Fatehi | 9 | 21 |
我们可以观察到 STUDENT 关系中的元组数为 2,DETAIL 中的元组数为 2。因此执行 CROSS PRODUCT 的结果关系中的元组数为 2*2 = 4。
笛卡尔积(CROSS PRODUCT)运算要点:
- 交叉乘积操作产生的关系的基数(元组数)等于第一个关系中的属性数(比如 m)乘以第二个关系中的属性数(比如 n)。
Cardinality = m*n
- 度数为 p 的两个关系 A(R1, R2, R3, …, Rp) 和度数为 n 的 B(S1, S2, S3, …, Sn) 的叉积是关系 C(R1, R2, R3, …, Rp, S1, S2, S3, …, Sn) 具有度数 p + n 属性。
Degree = p+n
- 在 SQL 中,可以使用 CROSS JOIN 应用 CARTESIAN PRODUCT(CROSS PRODUCT)。
- 一般来说,我们不会不必要地使用笛卡尔积,这意味着没有适当的含义我们不使用笛卡尔积。一般情况下,我们使用笛卡尔乘积,然后选择操作和运算符比较如下图所示:
σ A=D (A ✕ B)
上面的查询给出了有意义的结果。
而这种 Select 和 Cross Product 操作的组合非常流行,以至于 JOIN 操作都受到了这种组合的启发。
- CROSS PRODUCT 是一种二元集合运算手段,一次我们可以对两个关系应用该运算。