2010-01-24 60 views
3

我想知道是否可以獲得關於我已經完成的關係代數的一些反饋,並且還有關於改進它的任何建議,如果您發現我的SQL有任何問題,您是否可以指出它。關係代數

SELECT CourseName 
FROM Course 
WHERE CourseNo = 6; 

ΠCourseName(σCourseNo= 6(場))

SELECT CU.UnitNo 
FROM C.Course, CU CourseUnit 
WHERE C.CourseName = CU.CourseNo 
AND C.CourseName = 'Research'; 

ΠUnitNo(CourseUnit(σCourseName= '研究'(場)))

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'(Student))))

SELECT count(S.StudentNo) ResearchStudents 
FROM C Course, S Student 
WHERE C.CourseNo = S.CourseNo 
AND C.CourseName = 'Research'; 

ΠResearchStudents((C)計數(StudentNo)(學生(σCourseName= '研究'(場))))

回答

3

有在從子句的問題,我刪除的點C.Course

SELECT CU.UnitNo 
FROM C Course, CU CourseUnit 
WHERE C.CourseName = CU.CourseNo 
AND C.CourseName = 'Research'; 
1

在Pentium10的評論的頂部之間,你可以考慮使用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)

-1

如果您的語法將被使用,我猜測必須交換特殊字符。 (還記得APL鍵盤嗎?)

在上一個例子中,球場和球場之間的距離令人不安。

另外,您在第3個示例中的加入不完整。

我認爲Query By Example或Linq是更有趣的選擇。

+0

呃......什麼? – 2010-01-25 00:10:52