Реляционная алгебра - PullRequest
       9

Реляционная алгебра

3 голосов
/ 25 января 2010

Мне было интересно, смогу ли я получить некоторую обратную связь по реляционной алгебре, которую я сделал, и любой совет по ее улучшению, а также, если вы видите что-то не так с моим 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';

countСчет числа исследователей ((C) (StudentNo) (Student (σCourseName = ’Research’ (Course))))

Ответы [ 3 ]

3 голосов
/ 25 января 2010

есть проблема в предложении from, я удалил точку между C.Course

SELECT CU.UnitNo
FROM C Course, CU CourseUnit
WHERE C.CourseName = CU.CourseNo
AND C.CourseName = 'Research';
1 голос
/ 25 января 2010

Помимо комментария 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 будет жаловаться на это и не выполнит запрос. Не уверен в других СУБД)

0 голосов
/ 25 января 2010

Если ваш синтаксис будет использоваться, я думаю, что специальные символы должны быть заменены. (помните клавиатуры APL?)

Расстояние между курсом и C в вашем последнем примере является тревожным.

Также ваше Присоединение в 3-м примере не завершено.

Я думаю, Query By Example или Linq - более интересные альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...