给定关系R(A,B,C,D,E)与S(A,B,C,F,G),那么与表达式等价的 SQL 语句如下:SELECT (【R.A,R.B,D,F,G】) FROM R,S WHERE (【R.A=S.A AND R.B=S.B AND R.C=S.C AND R.A<S.F】);
关系代数与SQL等价转换的核心知识点:自然连接的本质是对两表所有同名公共属性执行等值连接,连接条件需用AND合取,不可用OR析取;连接后的属性默认按公共属性、左表非公共属性、右表非公共属性的顺序排列。关系代数中的选择运算σ若用列号指定条件,需先对应连接后的属性位置,再映射为SQL中具体的属性名比较;投影运算π的列号同样要转换为对应属性,属性无歧义时可省略表前缀,存在同名冲突则必须添加表名限定。选择运算的条件直接对应SQL的WHERE子句,需准确匹配属性间的逻辑关系,避免列名或比较对象混淆。
本题考察的是关系代数到SQL的等价转换与自然连接后的属性顺序。
自然连接R ⋈ S会按公共属性合并A、B、C,其典型输出属性顺序为ABCDEFG。表达式中的σ{1<6}指在该顺序下的第1列小于第6列,即A<F;π{1,2,4,6,7}要求投影出第1、2、4、6、7列,即A、B、D、F、G。
问题 1:
A选项 R.A,R.B,R.E,S.C,G:投影包含E与C,但π{1,2,4,6,7}要求的是A、B、D、F、G,错误。
B选项 R.A,R.B,D,F,G:正好对应A、B、D、F、G。D在R,F在S且两者不歧义,正确。
C选项 R.A,R.B,R.D,S.C,F:包含C而非G,与目标列集不符,错误。
D选项 R.A,R.B,R.D,S.C,G:包含C而非F,与目标列集不符,错误。
所以选择 B。
问题 2:
A选项 … OR …:自然连接应使用等值连接条件的合取,不能用析取OR,且还混入A<R.S.F条件但整体逻辑错误,错误。
B选项 … OR …:同样用OR,不是自然连接的语义,且比较成R.A<S.B也与σ{1<6}不符,错误。
C选项 R.A=S.A AND R.B=S.B AND R.C=S.C AND R.A<S.F:三对公共属性等值实现自然连接,再加选择条件A<F,完全对应σ{1<6}(R ⋈ S),正确。
D选项 … AND R.A<S.B:最后的比较应是A与F而不是A与B,错误。
所以选择 C。
