美文网首页
sql与代数关系运算之间的关系

sql与代数关系运算之间的关系

作者: dxaxin | 来源:发表于2018-08-25 15:34 被阅读0次

# sql与代数关系运算之间的关系

关系实际上是“组域”上的笛卡尔积的一个子集,所以sql对关系数据库上的操作实际上在这个子集上的代数关系运算。

- **代数关系运算的介绍**

- **sql与代数关系之间的关系**

-------------------

## 关系运算

> 一群元组的集合称为“关系”,关系之上进行一些“操作”,这些“操作”称为关系运算,包括“选择”、“投影”、“笛卡尔积”、“连接”、“外连接”,“更名”等等。

### 选择

**sql** select * from TABLE **where** name='zhangsan';

**运算** $\sigma_{name='zhangsan'}(TABLE)$;

### 投影

**sql** select **name**,**age** from TABLE ;

**运算** $\Pi_{name,age}(TABLE)$;

**注释** 从TABLE中投影出name、age两个属性;

### 笛卡尔积

**sql** select * from **TABLE1,TABLE2 **;

**运算** $TABLE1\times TABLE2$;

**注释** 将TABLE1中的元组与TABLE2中的元组两个任意拼接成一个新的元组,改元组的长度是TABLE1与TABLE2元祖长度的和 ;

### 自然连接

**sql** select * from **TABLE1,TABLE2 ** where **TABLE1.id=TABLE2.id ** ;

**运算** $TABLE1\Join TABLE2$;

**注释** 将TABLE1与TABLE2中具有重复属性的元组的拼接成一个新的元组,改元组的长度是TABLE1与TABLE2元祖长度的和减去重复属性的个数 ;

###左外连接

**运算** $TABLE1 ⟕  TABLE2$;

**注释** 左外连接的结果包含TABLE1 中所有元组,对每个元组,若在TABLE12中有在公共属性名字上相等的元组,则正常连接,若在TABLE1 中没有在公共属性名字上相等的元组,则依旧保留此元组,并将对应其他列设为NULL。

###右外连接

**运算** $TABLE1  ⟖  TABLE2$;

**注释** 右外连接的结果包含TABLE2中所有元组,对每个元组,若在TABLE1中有在公共属性名字上相等的元组,则正常连接,若在TABLE1中没有在公共属性名字上相等的元组,则依旧保留此元组,并将对应其他列设为NULL。

###实体关系图

一个实体关系图是用一个图形方式表现我们数据的逻辑结构。它可以帮助我们形象化表现我们不同的数据实体怎么关联到另一个实体。其中主码属性用下划线表示。

**主码、外码** 其中一个关系S的属性中包含另一个关系R的主码,这个属性叫做该主码在S上外码,S叫做外码的**参照关系**,R叫做改外码的**被参照关系**,外码参照R。

![这里写图片描述](https://img-blog.csdn.net/20180825111129823?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R4YXhpbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

![这里写图片描述](https://img-blog.csdn.net/20180825111146641?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R4YXhpbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

**解析**

$A \xrightarrow {A.id=B.id} B$ 表示多个A共享一个B,则B中包换多个A,这是“**多对一**”的关系。

$C\xrightarrow {C.name=A.name} A \xleftarrow{A.id=B.id}  B$ 表示多个A共享一个B,同时多个A共享一个C,那么对于B和C则是“多对一”,例如一个顾客可以下多个订单,一个商品可以包括多个订单,那么$N_1$可以买$N_2$个商品。

###关系完整性约束

若关系A关联关系B,关系A的属性中包含另一个关系B的主码,那个A的这个属性的取值范围应该是B主码取值范围的一个子集。

相关文章

  • sql与代数关系运算之间的关系

    # sql与代数关系运算之间的关系 关系实际上是“组域”上的笛卡尔积的一个子集,所以sql对关系数据库上的操作实际...

  • Calcite optimizer

    代数 关系代数是方解石的核心。每个查询都表示为关系运算符树。您可以从SQL转换为关系代数,也可以直接构建树。 规划...

  • 关系除法

    关系代数中除法的SQL实现 [TOC] 引言 关系代数中的运算主要有选择、投影、连接(或者说乘法,即笛卡尔积)、除...

  • 关系数据库--关系代数

    关系代数 关系代数是以关系为运算对象的一组高级运算的集合。由于关系定义为属性个数相同的元组的集合,因此集合代数的操...

  • 51 SQL 复习 语句关系代数(二)

    SELECT 查询指定多个列 关系代数 操作 关系代数与SQL 练习 WHERE 去重 查询结果排序 BETWEE...

  • 掌握关系代数运算

    关系代数关系代数是以关系为运算对象的一组高级运算的集合。关系代数中的操作可以分为两类:传统的集合操作,并、差、交、...

  • PostgreSQL 源码解读(16)- 查询语句#1(基础:关

    本文简单介绍了数据库系统实现中的数学基础-关系代数,包括关系代数的基本概念以及关系代数的运算如集合运算/投影/选择...

  • 数据库Mooc笔记(4)关系代数

    什么是关系代数 关系代数运算的特点 (1)基于集合,提供了一系列的关系代数操作:并、差、笛卡尔积(广义积)、选择、...

  • 【数据库】数据库入门(九): 关系代数(Relational A

    前言 关系代数的出现,主要是源于对声明性语言与程序性语言的讨论,两边的代表分别是 SQL 和 关系代数(RA)。 ...

  • 【抽象代数】代数系统、群与商群

    【抽象代数】代数系统、群与商群 一、代数系统 1.1 运算律 我们已经知道函数的概念,它表示集合间的一种映射关系。...

网友评论

      本文标题:sql与代数关系运算之间的关系

      本文链接:https://www.haomeiwen.com/subject/rfdgiftx.html