关系模型给出了关系操作的能力的说明,但不对关系数据库管理系统(Database Management System, RDBMS)语言给出具体的语法要求,也就是说不同的关系数据库管理系统可以定义和开发不同的语言来实现这些操作。
1.基本的关系操作
关系模型中常用的关系操作包括查询(Query)操作和插入(Insert)、删除(Delete)、修改(Update)操作两大部分。 关系的查询表达能力很强,是关系操作中最主要的部分。查询操作又可以分为选择、投影、连接、除、并、差、交、笛卡尔积等。其中,选择、投影、并、差、笛卡尔积是5种基本操作,其他操作均可以使用基本操作来定义和导出。 关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为次一集合( set-at-a-time)的方式。
2.关系数据语言的分类
关系操作是通过关系语言来实现的。关系语言的特点(优点)是高度非过程化,即:用户不必请求数据库管理员为其建立特殊的存取路径,存取路径的选择由DBMS的优化机制来完成;用户也不必求助于循环和递归来完成数据的重复操作。 关系操作的能力可以用两种方式来表示:代数方式和逻辑方式。代数方式主要有关系代数,它是通过对关系的操作来表达查询要求的方式;逻辑方式主要有关系演算,它是用谓词来表达查询要求的方式。关系演算又可按谓词变元的基本对象是元组变量还是域变量,分为是完全等价的。因而,本书稍后只对关系代数进行相关介绍。 关系代数、元组关系演算和域关系演算均是抽象的查询语言,这些抽象的语言与具体的数据库管理系统中实现的实际语言并不完全相同,但它们可以用来评估实际系统中查询语言能力的标准或基础。实际的查询语言除了提供关系代数或关系演算的功能之外,还提供了许多附加功能,例如聚集函数、关系赋值、算术运算等。 另外,还有一种介于关系代数和关系演算之间的结构化查询语言( Structured Query Language,SQL)。SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、数据定义语言(DDL)、数据操纵语言(DML)和数据控制语言( Data Control Language,DCL)于一体的关系数据语言。它充分体现了关系数据语言的特点和优点,是关系数据库的标准语言。 因此,关系数据语言可以分为三类:关系代数语言、关系演算语言以及兼具两者双重特点的语言(例如SQL)。它们的共同特点是:语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够独立使用也可以嵌入高级语言中使用
3.关系代数
关系代数是关系操作语言的一种传统表示方式,它是以集合代数为基础发展起来的。任何一种操作都是将一定的操作符作用于一定的操作对象上,得到预期的操作结果,因而操作包含三大要素:操作对象、操作符、操作结果。在关系代数操作中,操作对象和操作结果均为关系。关系代数直接应用关系的运算来表达操作目的,而代数用到的运算符包括集合运算符和专门的关系运算符两类,其中比较操作符和逻辑操作符是用来辅助专门的关系运算符进行操作的。 关系代数操作经过有限次复合的式子称为关系代数操作表达式,简称为关系代数表达式。可以使用关系代数表达式表示所需要执行的各种数据库查询和修改处理。因而,关系代数也是一种抽象的查询语言,它通过对关系的操作来表达查询。例如,在关系代数概念的基础上,IBM公司研制成一个纯代数数据操作语言ISBL( Information System Base Language),它的每个询问语句都近似于一个关系代数表达式。 按照运算符的不同,关系代数的操作可分为传统的集合运算与专门的关系运算。下面,分别介绍这两类关系代数的运算。
A.传统的集合运算
传统集合运算是二目运算,它将关系看成元组的集合,其运算是从关系的“水平”方向,即行的角度来进行,具体有并、差、交、笛卡尔积4种运算。 如表2.9所示,给出了两个有关学生住宿登记的关系S1和S2,下面以此为例介绍传统的集合运算。
并(UNION)
假设有两个关系R1和R2,R1和R2的并运算产生一个新关系R3。R3是由属于关系R1和R2的所有不同元组所组成,记为R3=R1∪R2。R1和R2的属性个数相同,且相应属性分别有相同的值域。 表2.10给出的是表2.9中S1∪S2的结果,它由属于S1和S2的去掉重复元祖后的所有元组组成。
差(DIFFERENCE)
假设有两个关系R1和R2,R1和R2的差运算产生一个新关系R3。R3是由属于关系R1,但不属于R2的元组组成,记为R3=R1-R2.同样,进行差运算的两个关系必须具有相同的属性个数,且相应属性具有相同的值域。 表2.11给出的表2.9中S1-S2的结果。
交(INTERSECTION)
假设有两个关系R1和R2,R1和R2的交运算产生一个新关系R3。R3是由既属于关系R1,同时又属于R2的元组组成,记为R3=R1∩R2.参与交运算的两个关系必须具有相同的属性个数,且相应属性分别有相同的值域。交运算也可由差运算来表示,及R1∩R2=R1-(R1-R2)。 表2.12给出的是表2.9中S1∩S2的结果。
笛卡尔积(CARTESIAN PRODUCT)
假设有两个关系R1和R2,且R1为m元关系,R2为n元关系,R1和R2的笛卡尔积产生一个新关系R3,记作R3=R1×R2。R3是由R1和R2的所有元组连接而成的具有(m+n)个分量的元组组成。新关系R3中元组的前m个分量是R1的一个元组,后n个分量为R2的一个元组。 例如,表2.13中的“学生”和“课程”分别为二元和三元的关系,其笛卡尔积结果为表中给出的一个五元关系“学生选课”。
B.专门的关系运算
专门的关系运算不仅涉及行,而且涉及列,它可分为一元专门关系操作和二元专门关系操作。其中,一元专门关系操作包括对单个关系进行垂直分解的投影运算和进行水平分解选择运算;二元专门关系操作则是对两个关系进行操作,包括连接运算和除运算。
选择(SELECT)
选择运算表示为:σF(R),其中,F为条件表达式,R为指定的被运算关系名。 选择运算是从指定关系中选取满足给定条件的若干元组组成一个新关系,其形式为
SELECT 关系名 WHERE 条件
其中,条件是由常数、属性名或列名、比较操作符(>、≥、<、≤、=、≠)及逻辑操作符(┐、∧、∨)组成的条件表达式。例如,从表2.9所示的S1中找出所有的“男生”数据的操作可表示成:
SELECT S1 WHERE 性别=“男”