2010-01-24 12 views
3

Je me demandais si je pouvais obtenir des commentaires sur l'algèbre relationnelle que j'ai faite et des conseils pour l'améliorer aussi si vous voyez quelque chose de mal avec mon SQL pourriez-vous le signaler.Algèbre relationnelle

SELECT CourseName 
FROM Course 
WHERE CourseNo = 6; 

ΠCourseName (σCourseNo = 6 (Cours))

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

ΠUnitNo (CourseUnit (σCourseName = 'Recherche' (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'; 

ΠNomUnité (Unité (StudentUnit (σStudentName = 'John Perry' (Étudiant))))

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 = (Cours) 'Recherche')))

Répondre

3

il y a un problème dans la clause, j'ai enlevé un point entre C.Course

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

en plus du commentaire de Pentium10, vous pouvez envisager d'utiliser des clauses JOIN par opposition à préciser les jointures dans la clause WHERE. À mon avis, cela peut mener à des requêtes plus faciles à suivre. Alors

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

devient

SELECT CU.UnitNo 
FROM C Course 
INNER JOIN CU CourseUnit 
    ON C.CourseName = CU.CourseNo 
WHERE C.CourseName = 'Research'; 

(remarque: les tables ont été alias donné, mais les alias ne sont pas utilisés - Si ma mémoire ne me trompe pas, SQL Server va se plaindre à ce sujet et non Exécuter la requête Pas sûr d'autres SGBDR)

-1

Si votre syntaxe va être utilisée, je suppose que les caractères spéciaux doivent être échangés. (rappelez-vous les claviers APL?)

La distance entre Course et C est dérangeante, dans votre dernier exemple.

Votre inscription dans le 3ème exemple est également incomplète. Je pense que Query By Example ou Linq sont des alternatives plus intéressantes.

+0

Euhhhhh ... quoi? –

Questions connexes