2011-05-24 83 views
0

我正在学习计算机科学,并且正在研究数据库系统。我在抓取某些部分时遇到困难。关系代数联合,联接和相交

说我有如下关系:

Lecturers(LecturerID, Name, DeptID) 
Course(DeptID, CrsCode, CrsName, Description) 

我注意到,他们都有着共同的属性,DEPTID,因此他们是联盟兼容。

我该如何列出属于计算机科学系(CS)或电子工程系(eEng)的讲师授课的所有课程?

我的答案是使用与选择相交。以下内容是否正确或接近商标?

πDeptID,CrsName(Course) intersection πDeptID,Name(σDeptID = CS or DeptID = eEng(Lecturers)) 

我确信连接可以在这里使用,但我不确定如何使用它的谓词。

感谢您的帮助。一旦我明白在几种情况下使用什么,我相信其余的会更容易。

感谢您的任何帮助。

回答

0

我会用这个简单的INNER JOIN

SELECT DEPTID, CRSNAME 
FROM COURSE A 
INNER JOIN LECTURERS B on A.DEPTID=B.DEPTID 
WHERE B.DEPTID='eENG' or B.DEPTID='CS' 
+0

当然,表达式可以用来执行其他表达式的动作。感谢SQL,但我不知道如何在关系代数中表达。 – Lee 2011-05-24 11:28:28

+0

我会将此标记为答案。我不知道同一个功能有很多不同的名字。内部连接是我被教导为自然连接。我只需要解决如何使用rel来表达这个问题。代数,我想我已经破解它: 'σLecturers.DeptID= CS或Lecturers.DeptID = eEng(πDeptID,CrsName(Course))x(πDeptID,Name(Lecturers))' – Lee 2011-05-24 12:21:42

0

由于您对DeptID字段应该是一个INT,所以还必须有一个Departments表。我假设它是部门和部门代码字段。在这种情况下:

SELECT 
* 
FROM 
    Course C 
INNER JOIN 
    LECTURERS L on C.DeptId = L.DeptID 
INNER JOIN 
    Departments D on C.DeptID = D.DeptID 
WHERE 
    D.code = 'eENG' or D.code = 'CS' 
+0

DeptID字段只是一个据我所知,这两种关系中的每一种关键都是关键的?这个例子来自练习考卷,没有提到另一个关系。你能用代数来表达你的SQL吗?虽然我在测试中将这个特定问题表达为SQL,但我也希望用代数表示它。 – Lee 2011-05-24 11:34:27