数据库关系代数的聚集函数

聚 集 运 算 ( a g g r e g a t i o n    o p e r a t i o n ) G 通 常 的 形 式 如 下 : 聚集运算(aggregation\;operation)\mathcal{G}通常的形式如下: aggregationoperationG

G 1 , G 2 , . . . , G n G F 1 ( A 1 ) , F 2 ( A 2 ) , . . . , F m ( A m ) ( E ) _{G_1, G_2, ..., G_n}\mathcal{G}_{F_1(A_1), F_2(A_2), ..., F_m(A_m)}(E) G1,G2,...,GnGF1(A1),F2(A2),...,Fm(Am)(E)

其 中 E 是 任 意 关 系 代 数 表 达 式 ( 或 者 说 是 一 个 关 系 ) , G 1 , G 2 , . . . , G n 是 用 于 分 组 的 一 系 列 属 性 ; 每 个 F i 是 一 个 聚 集 函 数 , 每 个 A i 是 一 个 属 性 名 。 运 算 含 义 如 下 , 表 达 式 E 的 结 果 中 元 组 以 如 下 方 式 被 分 成 若 干 组 其中E是任意关系代数表达式(或者说是一个关系),G_1, G_2, ..., G_n是用于分组的一系列属性;\\每个F_i是一个聚集函数,每个A_i是一个属性名。运算含义如下,表达式E的结果中元组以如下\\方式被分成若干组 EG1,G2,...,GnFiAiE

(1)同一组中所有元组在 G 1 , G 2 , . . . , G n G_1, G_2, ..., G_n G1,G2,...,Gn上的值相同;
(2)不同组中元组在 G 1 , G 2 , . . . , G n G_1, G_2, ..., G_n G1,G2,...,Gn上的值不同。

写 成 S Q L 查 询 语 句 的 形 式 : 写成SQL查询语句的形式: SQL

select G 1 , G 2 , . . . , G n , F 1 ( A 1 ) , F 2 ( A 2 ) , . . . , F m ( A m ) G_1, G_2, ..., G_n, F_1(A_1), F_2(A_2), ..., F_m(A_m) G1,G2,...,Gn,F1(A1),F2(A2),...,Fm(Am)
from E E E
group by G 1 , G 2 , . . . , G n G_1, G_2, ..., G_n G1,G2,...,Gn

所 以 最 后 得 到 的 关 系 模 式 为 ( G 1 , G 2 , . . . , G n , F 1 ( A 1 ) , F 2 ( A 2 ) , . . . , F m ( A m ) ) 。 通 常 采 用 更 名 运 算 为 这 个 模 式 更 改 新 的 关 系 名 以 及 属 性 名 , 然 后 再 使 用 自 然 连 接 或 θ 连 接 进 行 筛 选 得 到 目 标 元 组 。 考 虑 以 下 关 系 数 据 库 , 分 别 给 出 下 列 查 询 的 关 系 代 数 表 达 式 : 所以最后得到的关系模式为(G_1, G_2, ..., G_n, F_1(A_1), F_2(A_2), ..., F_m(A_m))。\\ 通常采用更名运算为这个模式更改新的关系名以及属性名,然后再使用自然连接或\theta连接\\进行筛选得到目标元组。\\ 考虑以下关系数据库,分别给出下列查询的关系代数表达式: (G1,G2,...,Gn,F1(A1),F2(A2),...,Fm(Am))使θ
下划线表示主码
( 1 ) 找 出 员 工 最 多 的 公 司 。 先 分 组 聚 集 得 到 每 个 公 司 的 员 工 数 目 ( 模 式 : 公 司 名 称 , 员 工 数 目 ) : t 1 ← ρ r 1 ( c o m p a n y _ n a m e , e m p l o y e e _ c o u n t ) ( c o m p n a y _ n a m e G c o u n t ( p e r s o n a l _ n a m e ) ( w o r k s ) ) 再 聚 集 得 到 员 工 数 目 最 多 的 公 司 ( 模 式 : 员 工 数 目 , 而 且 该 模 式 只 有 一 个 元 组 ) : t 2 ← ρ r 2 ( e m p l o y e e _ c o u n t ) ( G m a x ( e m p l o y e e l _ c o u n t ) ( t 2 ) ) 最 后 做 自 然 连 接 过 滤 筛 选 出 员 工 最 多 的 公 司 名 称 : Π c o m p a y _ n a m e ( t 1 ⋈ t 2 ) (1)找出员工最多的公司。\\ 先分组聚集得到每个公司的员工数目(模式:公司名称,员工数目):\\ t_1\leftarrow \rho_{r_1(company\_name, employee\_count)}(_{compnay\_name}\mathcal{G}_{count(personal\_name)}(works))\\ 再聚集得到员工数目最多的公司(模式:员工数目,而且该模式只有一个元组):\\ t_2\leftarrow \rho_{r_2(employee\_count)}(\mathcal{G}_{max(employeel\_count)}(t_2))\\ 最后做自然连接过滤筛选出员工最多的公司名称:\\ \Pi_{compay\_name}(t_1\bowtie t_2) 1t1ρr1(company_name,employee_count)(compnay_nameGcount(personal_name)(works))t2ρr2(employee_count)(Gmax(employeel_count)(t2))Πcompay_name(t1t2)

( 2 ) 找 出 工 资 最 少 的 员 工 所 在 公 司 。 先 聚 集 得 到 工 资 最 少 的 员 工 ( 模 式 : 工 资 , 而 且 该 模 式 只 有 一 个 元 组 ) : t 1 ← ρ r 1 ( s a l a r y ) ( G m i n ( s a l a r y ) ( w o r k s ) ) 再 做 自 然 连 接 过 滤 筛 选 得 到 工 资 最 少 的 员 工 所 在 的 公 司 名 称 : Π c o m p a n y _ n a m e ( t 1 ⋈ w o r k s ) (2)找出工资最少的员工所在公司。\\ 先聚集得到工资最少的员工(模式:工资,而且该模式只有一个元组):\\ t_1\leftarrow \rho_{r_1(salary)}(\mathcal{G}_{min(salary)}(works))\\ 再做自然连接过滤筛选得到工资最少的员工所在的公司名称:\\ \Pi_{company\_name}(t_1\bowtie works) 2t1ρr1(salary)(Gmin(salary)(works))Πcompany_name(t1works)

( 3 ) 找 出 人 均 工 资 F i r s t    B a n k    C o r p o r a t i o n 人 均 工 资 高 的 公 司 。 先 聚 集 得 到 F i r s t    B a n k    C o r p o r a t i o n 的 人 均 工 资 ( 模 式 : 工 资 , 而 且 该 模 式 只 有 一 个 元 组 ) t 1 ← ρ r 1 ( s a l a r y ) ( G a v g ( s a l a r y ) ( σ c o m p a n y _ n a m e = " F i r s t    B a n k    C o r p o r a t i o n " ( w o r k s ) ) ) 再 做 θ 连 接 过 滤 筛 选 得 到 工 资 最 少 的 员 工 所 在 的 公 司 名 称 : Π c o m p a n y _ n a m e ( w o r k s ⋈ w o r k s . s a l a r y > t 1 . s a l a r y t 1 ) (3)找出人均工资First\; Bank\; Corporation人均工资高的公司。\\ 先聚集得到First\; Bank\; Corporation的人均工资(模式:工资,而且该模式只有一个元组)\\ t_1\leftarrow \rho_{r_1(salary)}(\mathcal{G}_{avg(salary)}(\sigma_{company\_name="First\; Bank\; Corporation"}(works)))\\ 再做\theta连接过滤筛选得到工资最少的员工所在的公司名称:\\ \Pi_{company\_name}(works\bowtie_{works.salary>t_1.salary}t_1) 3FirstBankCorporationFirstBankCorporationt1ρr1(salary)(Gavg(salary)(σcompany_name="FirstBankCorporation"(works)))θΠcompany_name(worksworks.salary>t1.salaryt1)

  • 24
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
数据库关系代数查询是一种用于在数据库中执行查询操作的形式化语言。CSND(CSDN)作为一个IT技术社区网站,也提供了数据库关系代数查询的学习资料和示例。 数据库关系代数是一种以代数方式描述和操作关系型数据库的方法。它包含了一组操作符,每个操作符都用于执行特定的数据库操作。常见的关系代数操作符有选择(σ)、投影(π)、并(∪)、交(∩)、差(-)等。通过这些操作符的组合,可以构建复杂的数据库查询。 假设我们要查询CSDN的用户表中年龄大于18岁的用户信息,可以使用选择操作符进行查询。具体操作可以是:“选择(σ)年龄 > 18(用户表)”。 如果我们还想查询符合某个条件的用户的用户名和邮箱,则可以使用投影操作符。具体操作可以是:“投影(π)用户名,邮箱(选择(σ)年龄 > 18(用户表))”。 此外,我们还可以使用联接(Join)操作符来查询不同表之间的关联信息。比如,如果我们希望查询用户发布的文章及其相关的标签信息,可以使用联接操作符。具体操作可以是:“选择(σ)用户表.用户ID = 文章表.用户ID (用户表 ⨝ 文章表)”。 总之,数据库关系代数查询是通过操作符和操作表达式对数据库进行查询和操作的一种形式化语言。在CSDN等技术社区网站上,我们可以找到相关的学习资料和示例,帮助我们更好地理解和应用数据库关系代数查询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值