数据库原理 (3)

当数据库的内模式由于某种原因要修改时,可通过对逻辑模式与内模式之间的映象的修改,使逻辑模式尽可能地保持不变,实现内模式的改变尽可能地不修改应用程序。

也就说:在改变内部结构的时候,只要不会触及外部的数据时,外部的数据并不需要做改变。两级映像概念的提出也就是程序中耦合的问题!

为什么我们要学习数据库关系运算?

学习和理解关系运算的机理,对于理解关系数据库中的数据查询机制有十分重要的意义。

我们可能知道多表查询的时候要消除重复多余的数据,那重复多余的数据怎么产生的呢??WHERE字句又是怎么筛选数据的呢??这些问题我们在关系运算中可以找到答案的。

学习数据库的关系运算,会让我们明白SQL语句是怎么执行的,是通过什么手段让我们得到想要的结果。

学习大纲

这里写图片描述

笛卡尔积 什么是笛卡尔积?

笛卡尔积简单来说就是两个集合相乘的结果

为什么查询数据库会出现笛卡尔积

前面的博文已经说了,关系模型是关系模式的集合

数据库中的两张表就相当于两个集合,当我们使用SELECT语句查询数据的时候,DBMS内部就是以集合相乘的运算得出结果

笛卡尔积的产生过程

我们发现:笛卡尔积的基数是每个集合的元组相乘

这里写图片描述

得出来的数据内容是难以符合现实中的实际情况的

这里写图片描述

为了更好地看见效果,我都会以实际的SQL语句来看效果,然后说明问题的。

emp表的记录有14条:

这里写图片描述

dept表有4条记录:

这里写图片描述

我们来看看SMITH,在emp表中,他只在20部门。

这里写图片描述

但在两张表查询后,10、20、30、40部门他都在了!!我们再观察56条数据,发现每个人都有4个部门,这样的数据是不合理的!!

这里写图片描述

再回到初衷,我们查询两张表的目的是什么??在查询员工信息的同时,也能知道员工的部门名称是什么!!!所以,我们查询的记录数是不应该有56条这么多的。。我们查询的记录数应该是员工表的记录数,也就是14条而已!

我们再来分析:emp表中有deptno字段,dept表中也有deptno字段!而且发现,emp表中的deptno字段的取值范围是由dept表中deptno字段来决定的!!!

所以,我们可以使用等值连接(emp.deptno=dept.deptno)来消除笛卡尔积,这样就达到我们的目的了!

这里写图片描述

基于传统集合理论的关系运算

在Oracle上,操作集合的语法提供了4个关键字:

UNION(并集,重复的元组不显示)

UNION ALL(并集,重复的元组也会显示)

MINUS(差集)

INTERSECT(交集)

显示查询结果的全部信息,消除重复的元组

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgzdx.html