我想知道是否可以得到一些关于我所做的关系代数的反馈,以及关于改进它的任何建议,如果您发现我的SQL有什么问题,可以指出它。
SELECT CourseName
FROM Course
WHERE CourseNo = 6;∏CourseName(σCourseNo=6(Course))
SELECT CU.UnitNo
FROM C.Course, CU CourseUnit
WHERE C.CourseName = CU.CourseNo
AND C.CourseName = 'Research';∏UnitNo(CourseUnit(σCourseName=’Research’(Course)))
SELECT U.UnitName
FROM S Student, SU StudentUnit, U Unit
WHERE S.StudentNo = SU.StudentNo
AND SU.UnitNo = U.UnitNo
AND S.StudentName = 'John Perry';( ∏UnitName(Unit(StudentUnit(σStudentName=’John Perry‘s(学生)
SELECT count(S.StudentNo) ResearchStudents
FROM C Course, S Student
WHERE C.CourseNo = S.CourseNo
AND C.CourseName = 'Research';∏ResearchStudents((C)count(StudentNo)(Student (σCourseName=’Research’(Course))))
发布于 2010-01-24 23:18:12
from子句中有一个问题,我删除了C.Course之间的一个点
SELECT CU.UnitNo
FROM C Course, CU CourseUnit
WHERE C.CourseName = CU.CourseNo
AND C.CourseName = 'Research';发布于 2010-01-24 23:32:21
除了奔腾10的注释之外,您可以考虑使用JOIN子句,而不是在WHERE子句中指定联接。在我看来,这会导致更容易理解的查询。所以
SELECT CU.UnitNo
FROM C Course, CU CourseUnit
WHERE C.CourseName = CU.CourseNo
AND C.CourseName = 'Research';变成了
SELECT CU.UnitNo
FROM C Course
INNER JOIN CU CourseUnit
ON C.CourseName = CU.CourseNo
WHERE C.CourseName = 'Research';(附带注意:这些表已经给出了别名,但是没有使用别名--如果我的内存服务正确,SQL Server就会抱怨这一点,而不会执行查询。(不确定其他RDBMS)
发布于 2010-01-24 23:35:16
如果要使用语法,我想必须交换特殊字符。(还记得APL键盘吗?)
在最后一个例子中,课程和C之间的距离是令人不安的。
另外,在第三个示例中,您的联接还没有完成。
我认为示例查询或Linq是更有趣的替代方案。
https://stackoverflow.com/questions/2129311
复制相似问题