我是关系代数的新手。我在以下表达式中找到了*
运算符
这与使用联接
的不同之处是什么
答案 0 :(得分:3)
*
应更正确地写为×
,因为它代表Cartesian product。此操作返回所有元组的集合,这些元组是每个操作数的元组串联。联接将笛卡尔积向下过滤为仅具有指定属性匹配值的元组。如果连接是自然连接,如在您的示例中,匹配的属性是具有相同名称的属性。
例如,假设显示以下两个关系R
和S
:
R ( a, b, c ) S ( b, c, d )
( 1, 2, 3 ) ( 2, 7, 9 )
( 2, 4, 6 ) ( 5, 3, 4 )
( 3, 6, 9 ) ( 2, 3, 6 )
笛卡儿积R × S
是:
( R.a, R.b, R.c, S.b, S.c, S.d )
( 1, 2, 3, 2, 7, 9 )
( 1, 2, 3, 5, 3, 4 )
( 1, 2, 3, 2, 3, 6 )
( 2, 4, 6, 2, 7, 9 )
( 2, 4, 6, 5, 3, 4 )
( 2, 4, 6, 2, 3, 6 )
( 3, 6, 9, 2, 7, 9 )
( 3, 6, 9, 5, 3, 4 )
( 3, 6, 9, 2, 3, 6 )
自然加入R ⨝ S
是仅过滤为b
和c
值匹配的元组的产品:
( a, b, c, d )
( 1, 2, 3, 6 )
加入R ⨝b S
是仅过滤到b
值匹配的元组的产品:
( R.a, b, R.c, S.c, S.d )
( 1, 2, 3, 7, 9 )
( 1, 2, 3, 3, 6 )