2013-05-31 63 views
3

我有這個問題。如何將Sql命令轉換爲關係代數?

兩個表:第一,是員工:Employee(id, roomID)和第二個是:Room(roomID, roomName)

的問題是:有多少員工在每個房間的工作。

我可以在SQL語言很容易做到這一點:

select Room.roomID, COUNT(Employee.id) as NumofEmployee 
from Employee, Room 
where employee.roomID = Room.roomID 
group by Room.roomID 

同樣的問題,但在關係代數語言編寫。這個問題讓我頭疼了這麼多,因爲我知道在這個語言,只是有一些簡單的操作:joinselectionprojectiondifference。因此,許多SQL命令,我不知道該怎麼做,例如:group bycount

謝謝:)

+4

不要寫 「'FROM員工,Room'」 這樣的。這不好。使用JOIN關鍵字:'FROM Employee INNER JOIN Room ON employee.roomID = Room.roomID'。在這個階段它不是那麼重要,但是當你開始構建更強大的查詢時,它會產生一個_huge_差異。 –

+0

@JoelCoehoorn不是你的評論做了什麼,以幫助海報可言,你能舉出這個說法有什麼道理?如果程序員不希望你以某種方式做他們不允許的構造,我總是會產生這樣的印象? –

+0

語法存在的原因是歷史的。它來自於ansi-89標準。 ansi-92和更高版本更喜歡使用join關鍵字,並且某些最新標準甚至在某些情況下不贊成舊的A,B語法。 –

回答

4

聚合和分組操作不能從基本的關係代數運算來構造。您必須定義您自己的COUNTGROUP BY運營商才能執行此操作。

有很多提議的擴展的基本關係代數,你可以使用,或者你甚至可以定義自己 - 但正式做到這一點,我懷疑數學會得到相當複雜。

一個簡單的建議(沒有太多的手續),可以在這裏找到,http://myweb.lmu.edu/dondi/share/db/relational3.pdf。 (第3.2節)

使用該鏈接所提出的延長代數,你的表情會這樣寫: