关系代数基础

关系代数基础

名称英文符号说明
选择select$\sigma$类似于 SQL 中的 where
投影project$\sqcap$类似于 SQL 中的 select
union$\cup$类似于 SQL 中的 union
集合差set-difference$-$SQL中没有对应的操作符
笛卡儿积Cartesian-product$\times$类似于 SQL 中不带 on 条件的 inner join
重命名rename$\rho$类似于 SQL 中的 as
集合交intersection$\cap$SQL中没有对应的操作符
自然连接natural join$\Join$类似于 SQL 中的 inner join
赋值assignment

假设关系$info$有三个属性:$id$、$name$、$age$,代表的是这批人的年龄信息情况。

1. 基本运算

选择、投影和更名被称为一元运算,因为他们是对一个关系进行运算,另外三个运算对两个关系进行运算,称为二元运算

1.1. 选择运算

选择运算选出满足给定谓词的元组,用 σ来表示,对应的选择谓词是其下标,比如:

$$
\sigma_{id \gt 10} (info)
$$

从关系$info$中选出 $id$ 大于$10$的所有元组。

1.2. 投影关系

假设我们想从$info$列出所有人的$name$ 和$age$,而不关心 $id$,那么投影($project$)运算使得我们可以产生这样的关系。投影运算返作为参数的关系,但把不需要的参数排除在外,比如这个例子可以表示成:

$$
\Pi_{name,age}(info)
$$

1.3. 关系运算的集合

关系运算的结果也是一个关系,比如:找到$age$为$20$的所有人的名字:
$$
\Pi_{name}(σ_{age=20}(info))
$$

多个关系代数运算时就可以组合成一个关系代数表达式。

1.4. 并运算

这里也很好理解,比如我们要找到 $age$ 为20以及 $age$为30的所有人的名字,可以这样写(这里只是为了简化,实际上很少有人会这样写的):

$$
\Pi_{name} (\sigma_{age=20} (info)) \quad \cup \quad \Pi_{name} (\sigma_{age=20} (info))
$$

并运算有下面的要求:

  1. 左右两个关系必须是同元的,即它们的属性数目必须相同;
  2. 对应属性的域必须是相同的。

1.5. 集合差运算

这里用$-$表示集合差($set-difference$)运算,目的是找出在一个关系但不在另一个关系里的元组。

1.6. 笛卡尔积运算

用$\times$表示笛卡尔积运算,可以把两个关系的信息组合在一起。

1.7. 更名运算

用$\rho$表示更名运算,比如:

$$
\rho_x(E)
$$

表示:返回表达式 E 的结果,并给其赋名为 x。

2. 附加的关系代数运算

虽然前面的基本运算已经满足需要,但是如果只用上面介绍的基本运算,将会使某些查询显得特别冗长,因此,又定义了一些新的运算,来简化一些查询的表示。

2.1. 集合交运算

集合交用$\cap$来表示,集合交也可以换算成一些基本运算的表达式,如下所示:

$$
r\ \cap \ s= r\ -\ (r\ -\ s)
$$

2.2. 自然连接运算

自然连接($join$)运算主要是将某些选择跟笛卡尔积运算合并在一起表示,它会将两个关系模式中都出现的属性上的相等性进行选择,最后还要去除重复属性,用$\Join$来表示。

2.3. 赋值运算

通过临时关系变量赋值的方法来表示关系代数表达式会更方便,用$\longleftarrow$来表示。

另外还有外连接运算、聚集运算(对应 SQL 中的 Group by 的操作)等。

评论

Agile Angularjs Animation Application Artificial Intelligence BP Babel Bokeh Book C4.5 CART CD CLI CSS CentOS CheetSheet Cinder Clipboardjs Concept Continuous Delivery DeepLearning Department DevOps Develop Development Directive Distribution Django Document ECMA ELU ES5 ES6 ES7 Echarts Engine Entropy Filter Front End GELU Gallery Git Gradient descent Hexo Horizon ID3 ID3.5 Icarus JavaScript Javascript KVM LaTeX LeetCode LibreOffice Linux Logestic MNIST Machine Learning Mathematics Matrix MiddleWare Module Native Network Nginx NodeJS Numpy OOP OpenSSH OpenStack OpenStackApi Operations Oprations PDF PLA Pandas Pipline Probability Python ReLU React Relational algebra Restful Route SVD SVM Scalar Sigmoid SoftPlus Swish Team Tempest Tensor TensorFlow Testing Time TimeMachine Tips Vector Vmware Vue Vuex WSGI Web Word Cut aliyun auth babel certbot cost function debounce decision tree dns docker dockerfile eject error function footer git header homebrew html5 http https jupyter jwt keystone lab loader lodash loss function mathematics migrate nav openstack outline pdf2html pm2 proto prototype python replace request response rp rt ruby scikit-learn section singular value decomposition sklearn stylus tanh throttle url vue-router vue-ssr webpack 事件 事件代理 事件冒泡 事件捕获 位运算 低通滤波器 入门 全局 全局变量 全局对象 全栈 公式 决策树 几何意义 函数 分类器 剪枝 加速 动态变量 匹配滤波边缘检测 卷积 卷积核 原型链 双向绑定 反向传播 发布 变量类型 可视化 基尼指数 官方示例 对偶形式 对象 小技巧 平移和查分边缘检测 思维导图 感知机模型 手动实现 拉格朗日乘子法 推导 提交阶段 数据 数据绑定 最大似然估计 最小二乘估计 最小二乘回归树 最小二乘法 本地 朴素贝叶斯 朴素贝叶斯算法 机器学习 条件概率 标签模板 梯度下降 梯度方向边缘检测 概念 概率 模板字符 模板字符串 正则 求导 流程 源码 源码阅读 激活函数 灰度 特征值 特征向量 特征工程 生命周期 矩阵 神经元 神经网络 私有对象 科学计算 算法 算法实现 线性代数 线性回归 编译 缺失 联合概率 脚手架 识别 调试 贝叶斯 贝叶斯判定准则 边缘检测 边际概率 闭包 间隔 防抖动 限流 随机森林 高斯分布 高通滤波器
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×