2013-05-31 2 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 by или count.

Спасибо :)

+4

Не пишите "' FROM Employee, Room'", как это. Это плохо. Используйте ключевое слово JOIN: 'FROM Employee INNER JOIN Room ON employee.roomID = Room.roomID'. Это не так важно на данном этапе, но по мере того, как вы начинаете строить более сложные запросы, это делает разницу _huge_. –

+0

@JoelCoehoorn не то, что ваш комментарий сделал что-нибудь, чтобы помочь плакату вообще, какие рассуждения вы можете привести для этого утверждения? Мне всегда кажется, что если программисты не хотят, чтобы вы делали это определенным образом, они не допустили бы конструкцию? –

+0

Причина, по которой синтаксис существует вообще, является историческим. Это из стандарта анси-89. ansi-92 и более поздние версии предпочитают использовать ключевое слово join, а некоторые недавние стандарты даже не одобряют старый синтаксис A, B в определенных ситуациях. –

ответ

4

Агрегирование и группировка операций не могут быть построены из основных операций реляционной алгебры. Для этого вам нужно будет определить свои собственные операторы COUNT и GROUP BY.

Существует много предлагаемых расширений базовой алгебры реляций, которые вы могли бы использовать, или вы могли бы даже определить свои собственные. Но, чтобы сделать это формально, я подозреваю, что математика будет достаточно сложной.

Простое предложение (без большой формальности) можно найти здесь, http://myweb.lmu.edu/dondi/share/db/relational3.pdf. (Раздел 3,2)

Используя расширенную алгебру, предложенную в этой связи, ваше выражение будет записано как:

Смежные вопросы