Sql 如何使用计数(*)表示组>;1在关系代数中?
在考试中,我被要求获取具有多个租金的客户机列表,既可以作为SQL查询,也可以作为代数表达式 由于某些原因,修正没有提供代数版本 所以现在我只剩下:Sql 如何使用计数(*)表示组>;1在关系代数中?,sql,relational-algebra,Sql,Relational Algebra,在考试中,我被要求获取具有多个租金的客户机列表,既可以作为SQL查询,也可以作为代数表达式 由于某些原因,修正没有提供代数版本 所以现在我只剩下: SELECT IdClient, Name, ... FROM Client WHERE IdClient IN ( SELECT IdClient FROM Rental GROUP BY IdClient HAVING COUNT(*) > 1 ) 我不知道是否有代数符号的标准,因此: π投影 ×笛卡尔
SELECT IdClient, Name, ...
FROM Client
WHERE IdClient IN (
SELECT IdClient
FROM Rental
GROUP BY IdClient
HAVING COUNT(*) > 1
)
我不知道是否有代数符号的标准,因此:
- π投影
- ×笛卡尔积
- ⋈ 自然连接
- σ选择
Π IdClient, Name, ... (
σ (count(IdClient)>1) (Π Rental) ⋈ (Client ⋈ Rental)
)
但我找不到任何来源来证明我是对还是错,尤其是:
- 数学背后的逻辑
似乎是一个阴暗的行业出租∏
我在上看到了
count()
的用法,虽然它的用法不同,但如果没有投影(这是我想避免的),我想不出一种使用它的方法。有许多“关系代数”的变体,甚至在关系是什么方面也有所不同。你需要告诉我们你应该用哪一个
另外,您也没有解释一对RA&SQL查询彼此“具有形式”或“相同”的含义。(早期版本。)
你也没有解释“获取客户名单”是什么意思。结果有哪些属性
如果您试图编写一个计数的定义
您试图在σ计数(IdClient)>1(…)
中使用它的输入和输出——您将看到您不能。那种只接受属性的count
与关系运算符不对应。它在分组表达式中使用——您缺少了该表达式。这样的count
&group
实际上并不是关系运算符,它们是所谓的关系代数中的非终结符,这些关系代数实际上是SQL辩护者设计的查询语言,这表明将SQL映射到关系代数很容易,但却回避了如何在代数中聚合的问题。不过,也许这就是你被告知要使用的那种“关系代数”
我在那里看到了count()的用法
代数的本质是,我们将“运算符”与“其他运算符”一起“使用”的唯一意义是将运算符调用的输出作为输入传递给其他运算符调用。(因此一些所谓的代数不是。)在链接答案中,分组运算符G
输入聚合名称count
和属性名称name
,这会影响输出。答案引用了数据库系统概念,第5版:
其中E是任何关系代数表达式;G1、G2、…、Gn构成要分组的属性列表;每个Fi都是一个聚合函数;每个Ai都是一个属性名
G
返回具有属性的行G1,…,A1,…
,其中一个或多个具有相同G1,…
子视图的行位于E
中,每个Ai
保存在Ai
上聚合Fi
对这些行的输出
但是,当你阅读并链接它时,答案不正确地使用了这个定义。(我从那以后就把它修好了。)正确的是:
π name (σ phone>1 (name G count(phone) (Person)))
如果仔细阅读定义,这一点就很清楚了
G
有误导性的语法count(电话)
不是话务员的电话;它只是一对参数,一个聚合名count
,一个属性名phone
。更少误导的语法将是
π name (σ phone>1 (name G count phone (Person)))
编写查询不需要分组运算符。这使得了解“关系代数”在考试中的含义变得更加重要。如果不能使用分组运算符,则更难
“
的∏租赁
似乎是一个阴暗的行业”还不清楚。你确实不正确地使用了投影;正确使用是π属性(关系)
。我猜您使用的是π
试图包含一个分组运算符,如G
。关于“数学背后的逻辑”,请参见。我明天将重新修改我的问题,因为它似乎需要完全集中精力才能理解。如果您进行编辑,请不要使我的答案无效。我是根据我的评论写的,尽管你的问题不清楚,所以我可以用它作为所有其他不清楚问题的参考,这些问题没有说明他们在使用什么代数,没有说明“translate/convert”是什么意思,没有说明他们想要什么列和/或不理解语法。我可以添加您需要的任何内容(如果您可以使用count
&group
,我不知道您还需要什么),但我建议您最好提出一个新的、明确的问题,以获得简明的答案,并在此处的链接中编辑(以避免向下投票和向上投票)。PS编辑了我的答案。
π name (σ phone>1 (name G count phone (Person)))