首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关系代数

关系代数
EN

Stack Overflow用户
提问于 2010-01-24 23:07:38
回答 3查看 678关注 0票数 2

我想知道是否可以得到一些关于我所做的关系代数的反馈,以及关于改进它的任何建议,如果您发现我的SQL有什么问题,可以指出它。

代码语言:javascript
复制
SELECT CourseName
FROM Course
WHERE CourseNo = 6;

∏CourseName(σCourseNo=6(Course))

代码语言:javascript
复制
SELECT CU.UnitNo
FROM C.Course, CU CourseUnit
WHERE C.CourseName = CU.CourseNo
AND C.CourseName = 'Research';

∏UnitNo(CourseUnit(σCourseName=’Research’(Course)))

代码语言:javascript
复制
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(学生)

代码语言:javascript
复制
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))))

EN

回答 3

Stack Overflow用户

发布于 2010-01-24 23:18:12

from子句中有一个问题,我删除了C.Course之间的一个点

代码语言:javascript
复制
SELECT CU.UnitNo
FROM C Course, CU CourseUnit
WHERE C.CourseName = CU.CourseNo
AND C.CourseName = 'Research';
票数 3
EN

Stack Overflow用户

发布于 2010-01-24 23:32:21

除了奔腾10的注释之外,您可以考虑使用JOIN子句,而不是在WHERE子句中指定联接。在我看来,这会导致更容易理解的查询。所以

代码语言:javascript
复制
SELECT CU.UnitNo
FROM C Course, CU CourseUnit
WHERE C.CourseName = CU.CourseNo
AND C.CourseName = 'Research';

变成了

代码语言:javascript
复制
SELECT CU.UnitNo
FROM C Course 
INNER JOIN CU CourseUnit
  ON C.CourseName = CU.CourseNo
WHERE C.CourseName = 'Research';

(附带注意:这些表已经给出了别名,但是没有使用别名--如果我的内存服务正确,SQL Server就会抱怨这一点,而不会执行查询。(不确定其他RDBMS)

票数 1
EN

Stack Overflow用户

发布于 2010-01-24 23:35:16

如果要使用语法,我想必须交换特殊字符。(还记得APL键盘吗?)

在最后一个例子中,课程和C之间的距离是令人不安的。

另外,在第三个示例中,您的联接还没有完成。

我认为示例查询或Linq是更有趣的替代方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2129311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档