2011-05-24 82 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