#翻译#原文来自Database.System.Concepts(6th.Edition.2010)2.6Relational Operations,原文作者Abraham Silberschaz , Henry F. Korth , S. Sudarshan

2.6关系操作

所有的过程关系查询语言都提供一组操作,这些操作可以应用于单个关系或一对关系。这些操作具有良好的和期望的属性,它们的结果总是一个单一的关系。这个属性允许一个以模块化的方式组合其中的几个操作。具体来说,由于关系查询的结果本身就是一个关系,因此关系操作可以应用于查询的结果和给定的关系集。

具体的关系操作根据语言的不同而有所不同,但是适合我们在本节中描述的通用框架。在第3章中,我们展示了用SQL表示操作的具体方式。

最常见的操作是从单个关系(比如教练)中选择特定的元组,这些元组满足某些特定的谓词(比如$8.5万美元)。结果是一种新的关系,它是原始关系的子集(内结构)。例如,如果我们从图2.1的讲师关系中选择元组,满足谓词工资大于$85000,我们得到如图2.10所示的结果。

表2.10  查询选择讲师的结果,工资超过$85000

另一个常见的操作是从一个关系中选择某些属性(列)。结果是只有那些选择的属性的新关系。例如,假设我们想要一个教师ID和薪水的列表,而不需要从图2.1的讲师关系中列出姓名和dept的名称值,那么结果如图2.11所示,具有两个属性ID和薪水。结果中的每个元组都来自于讲师关系的一个元组,但是只包含所显示的选定的属性。

连接操作允许将两个关系的组合合并成一个元组,将两个关系中的一个元组合并成一个元组。有许多不同的方式来连接关系(我们将在第3章中看到)。图2.12显示了一个从教师和部门表中加入元组的例子,新的元组显示了关于每个教师和她正在工作的部门的信息。这个结果是通过将每个元组与讲师关系中的元组结合在一起的。

在图2.12中所示的连接的形式中,这被称为“自然连接”,来自于讲师关系的一个元组与部门关系中的一个元组匹配,如果它们的dept名称属性的值相同的话。所有这些匹配的元组都出现在连接结果中。一般来说,两个关系中的自然连接操作会匹配元组的值,这些元组的值在所有的属性名称中都是相同的。

表2.11 从教师关系中选择属性ID和薪水的结果

表2.12教师与部门关系的自然加入

笛卡尔积操作结合了两个关系中的元组,但是不像连接操作,它的结果包含了两个关系中的所有元组,不管它们的属性值是否匹配。

因为关系是集合,所以我们可以对关系进行正常的集合操作。union操作执行两个类似结构的表的集合(比如所有研究生的表和所有本科生的表)。例如,一个部门可以获得所有学生的集合。其他的集合操作,例如交叉和设置差异也可以执行。

如前所述,我们可以对查询结果执行操作。例如,如果我们想找到那些年薪超过8.5万美元的教师的ID和薪水,我们将在上面的例子中执行前两个操作。首先,我们从教师关系中选择这些元组,其中的工资值大于$8.5,然后,从这个结果中选择两个属性ID和薪水,结果显示在图2.13中所示的关系,包括ID和薪水。在本例中,我们可以以任意顺序执行操作,但在所有可能出现的情况下,我们所能看到的事实并非如此。

表2.13 选择年薪超过8.5万美元的教师的属性ID和工资

关系代数

关系代数定义一组关于关系的运算,与通常的代数运算,如加法、减法或乘法运算,这些运算都是对数字运算的。正如对数字的代数运算将一个或多个数字作为输入,并返回一个数字作为输出,关系代数操作通常会将一个或两个关系作为输入,并作为输出返回一个关系。

在第六章中详细介绍了关系代数,但是我们概述了下面的一些操作。

有时,查询的结果包含重复的元组。例如,如果我们从教师关系中选择dept name属性,就会有一些重复的例子,包括合成。Sci。它出现了三次。某些关系语言严格遵循一个集合的数学定义,并删除副本。另外,考虑到从大型结果关系中删除副本所需的大量处理,保留副本。在后一种情况下,关系并不是纯粹的数学意义上的关系。

当然,数据库中的数据必须随时间变化。可以通过插入新的元组、删除现有的元组或修改某些属性的值来更新关系。可以删除整个关系,并创建新的关系。

我们将在第3章到第5章中讨论使用SQL语言的关系查询和更新。

时间: 2024-10-12 05:45:52

#翻译#原文来自Database.System.Concepts(6th.Edition.2010)2.6Relational Operations,原文作者Abraham Silberschaz , Henry F. Korth , S. Sudarshan的相关文章

程序猿最浪漫的表白,肯定会得到你的她——Jason niu 原文来自GitHub,本人已部分修改

程序猿最浪漫的表白,肯定会得到你的她--Jason niu    原文来自GitHub,主页本人已部分修改,感谢程序猿大神wuxia2001和hackerzhou的开源,感谢这两位大神! 视频结果展示网址:http://v.youku.com/v_show/id_XMzQzNjY5NTgxMg==.html?spm=a2h3j.8428770.3416059.1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" &q

System Center 2012 R2 POC部署之Operations Manager部署

System Center 2012 R2 POC部署之Operations Manager部署 一.准备工作 在安装Operations Manager之前需要先做准备工作,如IIS .NET的安装,SQL Report Vier的安装,另外还要安装Reporting Services并配置实用远程SQL服务器的实例. 1. 安装IIS..NET 打开添加角色和向导,点击下一步 选择基于角色或基于功能的安装,点击下一步 勾选Web服务器(IIS) 点击添加功能 点击下一步 勾选.NET 3.5

第十二周翻译-《Pro SQL Server Internals, 2nd edition》

<Pro SQL Server Internals, 2nd edition> 作者:Dmitri Korotkevitch 翻译:赖慧芳 译文: 专业SQL服务器内部 了解在引擎盖下发生了什么,以及它是如何影响你的 第二版 数据页和数据行 数据库中的空间被划分为逻辑8KB页面.这些页面从0开始连续编号,可以通过指定文件ID和页码来引用它们.页面编号总是连续的,这样当SQL Server增长数据库文件时,新页面的编号将从文件中最高的页码加1开始.类似地,当SQL Server压缩文件时,它会从

第十五周翻译-《Pro SQL Server Internals, 2nd edition》

<Pro SQL Server Internals, 2nd edition> 作者:Dmitri Korotkevitch 翻译:赖慧芳 译文: 55-58页 第三章 统计 SQL Server查询优化器在为查询选择执行计划时使用基于成本的模型.它估计不同执行计划的成本,并选择成本最低的一个.但是,请记住,SQL Server并不搜索可用于查询的最佳执行计划,因为评估所有可能的替代方案在CPU方面既费时又昂贵.查询优化器的目标是找到一个足够好的执行计划,足够快. 基数估计(在查询执行的每个步

LINQ to SQL语句非常详细(原文来自于网络)

LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句. Where操作包括3种形式,分别为简单形式.关系条件形式.First()形式.下面分别用实例举例下: 1.简单形式: 例如:使用where筛选在伦敦的客户 var q = from c in db.Customers where c.City == "London" select c

十五周翻译《Pro SQL Server Internals, 2nd edition》 CHAPTER 7

文章来自<Pro SQL Server Internals, 2nd edition>的CHAPTER 7 Designing and Tuning the Indexes中的Clustered Index Design Considerations> 原作者:Dmitri Korotkevitch 第七章  设计和调整索引 无法定义可在任何地方使用的索引策略. 每个系统都是独特的,需要它自己的索引方法基于工作量,业务需求和其他一些因素.但是,有几个设计考虑因素和指南可以应用于每个系统.

storm翻译(2):Concepts

Concepts:概念 原文:http://storm.apache.org/documentation/Concepts.html 这个列表展示了storm中的主要概念和相关详细信息.这些概念是: Topologies Streams Spouts Bolts Stream groupings Reliability Tasks Works Topologies 实时处理逻辑被包含在一个storm topology中.一个storm topology 与MapReduce job相似.其中一个

翻译:CREATE DATABASE语句

html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary { display: block } audio,canvas,progress,video { display: inline-block; vertical-align: baseline } audio:not([co

翻译:MariaDB DATABASE()

html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary { display: block } audio,canvas,progress,video { display: inline-block; vertical-align: baseline } audio:not([co