《SQL与关系数据库理论——如何编写健壮的SQL代码》一3.4 关系及其主体

简介: 本节书摘来华章计算机《SQL与关系数据库理论——如何编写健壮的SQL代码》一书中的第3章 ,第3.4节 C. J. Date 著 单世民 何英昊 许侃 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

本节书摘来华章计算机《SQL与关系数据库理论——如何编写健壮的SQL代码》一书中的第3章 ,第3.4节 C. J. Date 著 单世民 何英昊 许侃 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4 关系及其主体

要讨论的第一点是,主体的任何子集仍是主体;或者,不严格地说,关系的任何子集仍是关系。(第1章讨论过,不过现在要多说几句。)特别的,因为空集是任何集合的子集,所以,一个关系的主体可以由空的元组集合构成,这样的关系称为空关系(empty relation)。比如,假设现在没有任何出货(shipment)。那么,关系变量SP的当前值就是一个空的出货关系,如下图所示(现在我们回归在非正式场合省略标题中类型名称的惯例;在本书的剩余部分,标题中是否包括类型名称取决于是否适合达到最佳表达目的)。
image

注意,对于确定的特定关系类型只有一个该类型的空关系;而不同类型的空关系并不相同,因为它们的类型不同。比如,供应商空关系就不等于零件空关系(它的主体相等,但是标题不等)。
考虑下述关系:
image

这个关系只包含一个元组(等价于其基数为1)。如果想存取该关系包含的唯一元组,那么就必须以某种方式从包含它的关系中提取元组。Tutorial D使用TUPLE FROM rx语法形式达到此目的。其中,rx表示基数为1的关系的任意表达式。比如,它可以是表达式RELATION{TUPLE{SNO 'S1', PNO 'P1', QTY 300}}。这个表达式事实上是一个关系选择器调用(实际上是文字的)。相反,SQL使用型转;如果:tx是用作行子查询的表表达式(其出现在期望行表达式之处),则由tx表示的表t应只包含一行r,并且表t型转为行r。示例如下(此例是2.9节“SQL中的行类型和表类型”中的行赋值示例):
SET SRV = ( S WHERE SNO = 'S1' ) ;
我们还要检测在确定的关系r中是否出现元组t,在Tutorial D中:
t image r
当t在r中出现时返回TRUE,否则返回FALSE。符号“image”表示集合成员(set membership)运算符;表达式timager可读为“t[是]在r中”或“t出现在r中”。
你可能已经想到了,“image”实质上就是SQL的IN。只不过,SQL的IN左运算元通常是个标量而不是行(这意味着又要进行一些型转,即标量型转为包含标量的行)。注5示例如下(“得到至少供应一种零件型号的供应商”):

SELECT SNO , SNAME , STATUS , CITY 
FROM   S
WHERE  SNO IN     /* “SNO” coerced to “ROW(SNO)” */
     ( SELECT SNO
       FROM   SP )

注意:你肯定知道,SQL也支持NOT IN。Tutorial D对应的是“”。换句话说,Tutorial D表达式“tr”的意思是“t不在关系r中”。

相关文章
|
13天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
52 10
|
2月前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据查询
【数据库SQL server】关系数据库标准语言SQL之数据查询
96 0
|
13天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
78 6
|
2月前
|
SQL 数据库
小技巧:如何让 ABAP OPEN SQL 代码具有自解释性(Self-Explained)
小技巧:如何让 ABAP OPEN SQL 代码具有自解释性(Self-Explained)
25 0
|
1月前
|
SQL XML Java
整理几个常用的sql和其他代码
整理几个常用的sql和其他代码
12 1
|
1月前
|
SQL 存储 关系型数据库
【MySQL】——关系数据库标准语言SQL(大纲)
【MySQL】——关系数据库标准语言SQL(大纲)
56 0
【MySQL】——关系数据库标准语言SQL(大纲)
|
2月前
|
SQL Java 关系型数据库
Flink SQL 问题之用代码执行报错如何解决
Flink SQL报错通常指在使用Apache Flink的SQL接口执行数据处理任务时遇到的问题;本合集将收集常见的Flink SQL报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
120 6
|
2月前
|
SQL 关系型数据库 MySQL
MySQL日期函数的SQL代码示例和使用场景
MySQL日期函数的SQL代码示例和使用场景
24 0
|
2月前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据更新
【数据库SQL server】关系数据库标准语言SQL之数据更新
33 0
|
2月前
|
SQL 数据库 数据库管理
【数据库SQL server】关系数据库标准语言SQL的基本知识
【数据库SQL server】关系数据库标准语言SQL的基本知识
58 0

热门文章

最新文章