根据下面的数据库,使用关系代数预测未注册课程的学生的姓名。
Students(snum, sname, major, standing, age, gpa) Faculty(fid, fname, deptid) Courses(cnum, cname, course_level, credits) Offerings(onum, cnum, day, starttime, endtime, room, max_occupancy, fid) Enrolled(snum, onum)
我可以通过以下方式获得未参加课程的所有学生的snum:
π snum Students - π snum Enrolled
但是如何用我找到的snum来预测学生的哼唱?
答案 0 :(得分:0)
每个基表都包含从某些(特征)谓词(由列参数化的语句模板)构成真正的命题(语句)的行。设计师给出了谓词。用户保持表格更新。
-- rows where student [snum] is named [sname] and has major [major] and ...
Students
-- rows where student [snum] is enrolled in offering [onum]
Enrolled
每个查询结果都包含从某个谓词中生成真命题的行。关系表达式的谓词根据其谓词非终结符从其参数表达式的谓词组合而来。 DBMS评估结果。
/* rows where
student [snum] is named [sname] and has major [major] and ...
AND student [snum] is enrolled in offering [onum]
*/
Student ⨝ Enrolled
AND
提供NATURAL JOIN
,AND
condition
提供RESTRICT
condition
,EXISTS
columns
提供PROJECT
other columns
。 OR
& AND NOT
& OR
& MINUS
。等
/* rows where
THERE EXISTS sname, major, standing, age & gpa SUCH THAT
student [snum] is named [sname] and has major [major] and ...
*/
π snum Students
/* rows where
THERE EXISTS onum SUCH THAT
student [snum] is enrolled in offering [onum]
*/
π snum Enrolled
/* rows where
( THERE EXISTS sname, major, standing, age & gpa SUCH THAT
student [snum] is named [sname] and has major [major] and ...
AND NOT
THERE EXISTS onum SUCH THAT
student [snum] is enrolled in offering [onum]
)
AND student [snum] is named [sname] and has major [major] and ...
*/
(π snum Students - π snum Enrolled) ⨝ Students
您可以从中推出任何您不想要的列。
(请注意,我们不需要知道要查询的约束。)
Relational algebra for banking scenario
Forming a relational algebra query from an English description
Is there any rule of thumb to construct SQL query from a human-readable description?