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(σC​​ourseName='Research'(コース)))

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='ジョン・ペリー'(生徒))))

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'(コース))))

4

3 に答える 3

3

from 句に問題があります。C.Course 間のドットを削除しました

SELECT CU.UnitNo
FROM C Course, CU CourseUnit
WHERE C.CourseName = CU.CourseNo
AND C.CourseName = 'Research';
于 2010-01-24T23:18:12.750 に答える
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についてはわかりません)

于 2010-01-24T23:32:21.350 に答える
0

あなたの構文が使用される場合、特殊文字を交換する必要があると思います。(APL キーボードを覚えていますか?)

最後の例では、Course と C の間の距離が気になります。

また、3 番目の例の Join は完全ではありません。

例によるクエリまたは Linq は、より興味深い代替手段だと思います。

于 2010-01-24T23:35:16.643 に答える