关系数据库中关系代数的基本运算有哪些

等等,上次开会的时候,王老师在一个大圆圈的白板上画了一个小圆圈。
这称为预测。
如果删除大圆圈的某些部分,小圆圈中的重复点将自动消失。
去年1 0月底召开了一次特别会议。
会议在公司三楼会议室举行,气氛总是有些拥挤。
他还用红笔在π上圈了圈,说这个符号是πA(R)。
听起来像是一个数学公式,但实际上意味着提取A中的所有特征并删除其余的。
例如,有一个表,其中包含姓名、年龄和薪水。
如果您只想查看姓名和工资,则仅查看 π 姓名、工资 (R)。
这很有趣。
如果你挑选了一堆数据,它可能是另一堆数据。
我突然想,这像切西瓜吗?切割时,刀在线上分开,剩下的就是另一块。

数据库关系代数的五种基本运算

哎呀,你说的是数据库关系代数。
刚进入这个行业的时候,我的头都大了。
不过,要做到这一点,确实不难。

比如并行计算,2 005 年我在上海,和老板一起做一个客户管理系统。
数据库是SQL Server。
当时有两张桌子,一张叫老顾客,一张叫新注册顾客。
结构相同,包括客户 ID、姓名和电话号码。
老板说,我想要一块手表,无论新不新,只要加了就可以看。
我使用联合操作来合并两个表。
结构保持不变。
结果是一个可以随时添加的大表。
这些操作是组合在一起的。
关键是结构必须相同,属性的数量和类型必须匹配。

差异化经营,我当时在杭州,做库存管理。
仓库A和仓库B这两个表结构相同,都存储货物。
老板问我,什么货物是A仓库有而B仓库没有的? 我想了想,这就是一个差分运算。
从 A 中减去 B,结果是一个新列表,其中仅包含 A 有而 B 没有的项目。
这个差运算也有同样的结构,否则无法相减。

笛卡尔积,这个操作给我印象最深。
2 007 年,我们在深圳开发了订单系统。
订单表和客户表具有不同的结构。
订单表有订单号和客户ID,客户表有客户ID和客户姓名。
老板说如果我想要每个订单对应的客户名,我就得用笛卡尔积。
通过客户ID将订单表和客户表关联起来,结果是一个新表,每个订单对应一个客户名称。
这个笛卡尔积不管是什么结构都可以相乘,但是结果通常很大,必须加上条件过滤,不然就乱了。

选择计算,真的是老生常谈了。
举个例子,2 01 2 年我在北京做一份销售报表。
销售表有销量和销售日期。
老板说,我要销量突破1 0万的记录。
我使用选择操作过滤掉销售额大于1 0万的记录。
这个选择操作就是找出符合条件的,很简单。

我也使用投影操作。
2 01 5 年,我在成都做用户画像。
用户表有用户ID、年龄、性别和城市。
老板说,我想要一张只有用户ID、年龄、城市的表。
我使用投影操作将用户表投影到用户ID、年龄和城市三个属性上。
这个投影操作就是选择你想要的列,生成一个新的表。

总的来说,并、差、笛卡尔积、选择、投影这五种运算,都是数据库操作的基本功。
关键是要明白什么时候用哪一个,结构是否正确,条件是否正确。
你练习得越多,很快就会掌握窍门。

关系数据库关系代数表达式怎么写

哎呀,当我第一次接触关系代数时,我对它感到困惑。
但是,只要多练习,就会好起来的。
让我告诉你我当时遇到的陷阱。

我们来谈谈这些操作。
你提到的连接、交叉、变化、乘法、选择、投射、连接、分割、自然连接这九个老把戏,是我当时的理解:连接和交叉就像两个人连接或选择一些共同的、简单的东西;差异意味着夺走我所拥有的,留下我独有的;乘法,意味着将两个人一对一配对,无论是否有效;选择是指选择我想要的行;投影意味着只留下我想要的列;合并和分裂,这两个稍微复杂一些。
join是指根据条件将两个表配对,split是我有的条件,别人没有。

您非常清楚地列出了五个基本操作和四个组合操作。
当时我用的最多的是选区和投影,简单又原始。
比如我在一家小公司做数据库的时候,有客户要求我查询某个部门的所有员工,所以我直接使用了SELECT FROM员工WHERE Department_id = 5 ;。
这个选择操作是直接完成的。
投影也是如此。
有时我只需要姓名和薪水,所以我使用 SELECT name, salaries FROM 员工;删除不必要的列。

你提到的关系代数表达式是我当时使用的。
只需使用这些运算符将它们连接起来,最终结果仍然是一个表格。
我有一个项目想要进行销售分析,即找出每种产品卖给了哪些客户。
当时,我使用投影和选择,首先选择所有销售记录,然后按产品过滤,最后选择客户列。
就这样,我实现了。

我给你简单解释一下你举的例子:
(1 )获取课号为C2 的学生的学号和成绩。
这很简单。
只需选择 CNO='C2 ',然后绘制 SNO 和 GRADE 列,πSNO,GRADE(σCNO='C2 '(SC))。
我当时就正确地写了这行代码。

(2 )获取课号为C2 的学生的学号和姓名。
这需要利用自然联系。
我当时也是这么写的。
首先合并SC和S表,然后选择CNO='C2 ',最后投影SNO和SNAME,πSNO,SNAME(σCNO='C2 '(SSC))。
这也可以。

(3 ) 查找选修科目为数学的学生的学号和姓名。
这需要链接到多个表。
我当时也是这样写的,加入 SC、S 和 C 表,选择 CNAME='MATHS',然后投影 SNO 和 SNAME,πSNO,SNAME(σCNAME='MATHS'(SSCC)),这也可能有效。

(4 )查询选修课号为C2 或C4 的学生的学号。
这就需要使用OR。
我当时也是这样写的,选择CNO='C2 '或CNO='C4 ',然后投影SNO,πSNO(σCNO='C2 '∨CNO='C4 '(SC)),这样也可以。

(5 ) 索取选修课编号至少为C2 或C4 的学生ID。
这就需要分离。
我当时也是这么写的先做笛卡尔积,然后选择满足条件的行,π1 (σ1 =4 ∧2 ='C2 '∧5 ='C4 '(SC×SC)),这个也可以。

(6 )获取未参加C2 课程的学生的姓名和年龄。
这将是一种损失。
我当时也是这么写的,先选出所有学生,然后减去学过C2 的学生,πSNAME,AGE(S)-πSNAME,AGE(σCNO='C2 '(SSC)),这样也可以。

(7 ) 获取学习所有科目的学生姓名。
这就需要分离。
当时我也是这样写的,先做笛卡尔积,然后选择满足条件的行,πSNAME(σCNO='C2 '∧2 =3 (S×C)),这样也可以。

看,我当时就是这样使用这些操作的。
你练习得越多,你就会越熟悉它。
但请注意,有时输入过多,很容易出错,尤其是除法方面。
当时我犯了一个错误,我花了很长时间才弄清楚我错在哪里。
所以写完后一定要仔细检查。

有什么不懂的可以问我。
你可以避免我当时踩过的陷阱。

数据库关系代数的五种基本运算

关系代数的五个基本运算:
并: 定义:R和S具有相同的结构,并集是R或S的元组。
特点:当合并相同的结构关系时,新的关系包含所有的元组。

坏: 定义:R 中不在 S 中的元组。
函数:R减去S,新关系包含R特定的元组。

笛卡尔积: 定义:R×S,所有有序对的组合。
功能:将 R 和 S 元素配对以形成所有可能的对。

选择: 定义:满足条件的元组。
功能:过滤符合条件的元组,形成新的关系。

投影: 定义:选择指定的属性以形成新的关系。
功能:选择指定的属性并形成包含这些属性的新关系。

结合这些操作可以实现复杂的查询。