数据库查询

您所在的位置:网站首页 专门的关系运算有 数据库查询

数据库查询

2024-07-09 19:54| 来源: 网络整理| 查看: 265

关系代数运算

关系代数用对关系的运算来表达查询,运算对象是关系,结果得到关系

关系可以理解为一张二维表,例如一张学生表,就是一个关系,关系代数运算就是我们写sql的一些查询操作,操作表生成新的表或者视图

关系代数的运算有两种:

运算符为传统的集合运算符:并、差、交、笛卡尔积运算符为专门的关系运算符:选择、投影、连接、除

传统的集合运算符:从表的行的角度进行运算,所以需要运算的关系R、S具有相同的属性列的类型、属性列数目

专门的关系运算符:涉及到列、行,没有那些限制

其他:选择、投影、并、差、笛卡尔积是查询操作的基本操作,其他操作可以由这5种基本操作推出

关于这些操作的概念是很晦涩的,结合具体的SQL来理解

并(union)

并操作两个关系R、S,得到的关系由属于R或S的元组组成,就是逻辑并

在这里插入图片描述

对应的Sql操作就是Union 第一次查询的id=1的关系 并 第二次查询id=2的关系 的结果:

在这里插入图片描述

and的结果也是这样的,为什么不说and呢?

这里主要谈的是并的思想,两个关系的并运算,and的话并不是两个关系的运算

差(except)

差:关系R与关系S的差由属于R而不属于S的所有元组组成

在这里插入图片描述

很明显,完成差的查询操作只需要从R中排除R与S交集关系即可,用not in关键字sql查询

在这里插入图片描述

实际上存在except关键字,Mysql不支持

换成Sql Server试试:

select * from 学生 where 学号 、 teacher.tid;

在这里插入图片描述

内连接不加限制就是交叉连接了,也就是笛卡尔积

外连接:R、S中舍弃的元组也保存到结果中,而在其他属性上填空值

左外连接:只保留左边关系R的舍弃的元组 select * from student left join teacher on student.id = teacher.tid;

在这里插入图片描述

右外连接:只保留右边关系S的舍弃的元组,因为我们teacher表比student表少,所以交换一下位置 select * from teacher right join student on student.id = teacher.tid;

在这里插入图片描述

全连接:左右两表中的舍弃的元组都保留 MySQL不支持full join关键字,但可以通过左连接 union 右连接实现

Sql Server: select * from 学期成绩 R full join 课程注册 S on R.课程编号 = S.课程编号;

这两个表是这样的: 在这里插入图片描述

可以获得查询结果:

在这里插入图片描述

Mysql通过左连接 union 右连接就不实现了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3