Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用计数(*)表示组>;1在关系代数中?_Sql_Relational Algebra - Fatal编程技术网

Sql 如何使用计数(*)表示组>;1在关系代数中?

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 ) 我不知道是否有代数符号的标准,因此: π投影 ×笛卡尔

在考试中,我被要求获取具有多个租金的客户机列表,既可以作为SQL查询,也可以作为代数表达式

由于某些原因,修正没有提供代数版本

所以现在我只剩下:

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)))