Database 不使用聚合函数的关系代数查询
科目数据库系统的考试任务: 我有以下模式:Database 不使用聚合函数的关系代数查询,database,aggregate-functions,relational-algebra,Database,Aggregate Functions,Relational Algebra,科目数据库系统的考试任务: 我有以下模式: Excavator(EID, Type) - EID is a key Company(Name, HQLocation) - Name is a key Work(Name, EID, Site, Date) - All collumns together form a key 我必须用关系代数编写这个查询: "Which company was digging on exactly one site on 1st of May?" 如果没有聚合
Excavator(EID, Type) - EID is a key
Company(Name, HQLocation) - Name is a key
Work(Name, EID, Site, Date) - All collumns together form a key
我必须用关系代数编写这个查询:
"Which company was digging on exactly one site on 1st of May?"
如果没有聚合函数计数,我不知道如何表达它。我知道人们在关系代数中添加了这些函数,但在这次考试中我们被禁止这样做
您可以使用标准集运算、除法、投影、选择、联接、笛卡尔积。我现在忘记了正确的关系代数语法,但您可以这样做
(Worked on >= 1 site on 1st May)
minus (Worked on > 1 site on 1st May)
--------------------------------------
equals (Worked on 1 site on 1st May)
下面是一个仅使用注释中提到的运算符并假设重命名的SQL解决方案
SELECT Name
FROM Work
WHERE Date = '1st May' /*Worked on at least one site on 1st May */
EXCEPT
SELECT W1.Name /*Worked more than one site on 1st May */
FROM Work W1
CROSS JOIN Work W2
WHERE W1.Name = W2.Name
AND W1.Date = '1st May'
AND W2.Date = '1st May'
AND W2.Site <> W2.Site
我假设这将是相对直接的翻译我现在忘记了正确的关系代数语法,但您可以这样做
(Worked on >= 1 site on 1st May)
minus (Worked on > 1 site on 1st May)
--------------------------------------
equals (Worked on 1 site on 1st May)
下面是一个仅使用注释中提到的运算符并假设重命名的SQL解决方案
SELECT Name
FROM Work
WHERE Date = '1st May' /*Worked on at least one site on 1st May */
EXCEPT
SELECT W1.Name /*Worked more than one site on 1st May */
FROM Work W1
CROSS JOIN Work W2
WHERE W1.Name = W2.Name
AND W1.Date = '1st May'
AND W2.Date = '1st May'
AND W2.Site <> W2.Site
我认为这将是相对直接的翻译负号当然也可以使用。加上并集和交集。对不起,负号当然也可以用。加上并集和交集。很抱歉