《交互式程序设计 第2版》一3.8 SQL中的表

3.8 SQL中的表

注意:在本节中,提到“表”一词我指的都是表值(即SQL表值),而不是表变量(就是CREATE TABLE和CREATE VIEW创建的那个)。第5章会讨论表变量。
第2章说过,SQL中实际上根本没有什么东西能类比于关系的关系类型;相反,一个SQL表只是某种类型的行的集合(一般是行的包而未必是集合)。所以,尽管从第2章可知SQL支持其他类型生成器(包括ROW、ARRAY和MULTISET),但SQL还真没什么能类比于RELATION类型生成器。不过,SQL有表值构造器可以基本类比于关系选择器,示例如下:

VALUES ( 1 , 2 ), ( 2 , 1 ), ( 1 , 1 ), ( 1 , 2 )

此表达式(实际上是表字面值,尽管SQL没用这个词)得到一个有4个(不是3个)行和2个列的表。而且,这些列没有名字。我说过,SQL表的列是自左至右有序的;所以,这些列可以(有的时候是必须的)使用排序位置而不是名字来识别。
再来考量下述的表值构造器调用:

VALUES ( 'S1' , 'Smith' , 20 , 'London' ) ,
       ( 'S2' , 'Jones' , 10 , 'Paris' ) ,
       ( 'S3' , 'Blake' , 30 , 'Paris' ) ,
       ( 'S4' , 'Clark' , 20 , 'London') ,
       ( 'S5' , 'Adams' , 30 , 'Athens')

注意,为了能让这个表达式基本贴近其在关系模型中的类比项(如图1.3所示代表关系的关系字面值,而所代表的关系为关系变量S的当前取值),就必须:

  1. 对于VALUES表达式所指定的表列,确保所有值都是类型贴切的。(尤其是,如果某行的确定位置对应于关系相对项的属性A的话,那么我们必须确保所有这些行的相同位置都对应于同一属性A。)
  2. 确保没有两次指定相同的行。
    注意:如你所知,关系模型中的标题是属性的集合。相反,因为SQL中的列具有自左至右的排序,所以在SQL中将标题看作属性(或列)的序列而非集合更为正确。不过,如果遵循本书的建议,这点逻辑区别基本上可以忽略。

表复制和比较运算符又是怎样的呢?表赋值是一个很大的主题,第5章会详细论述。SQL并不直接支持表比较(甚至对相等性比较的支持都没有)注9,但是有变通方案。比如,下面是与Tutorial D中的比较S{CITY }=P{CITY }相对应的SQL项。

NOT EXISTS ( SELECT CITY FROM S
          EXCEPT
          SELECT CITY FROM P )
AND
NOT EXISTS ( SELECT CITY FROM P
          EXCEPT
          SELECT CITY FROM S )

而下面是与Tutorial D中的比较S{SNO}※SP{SNO}对应的部分:

EXISTS ( SELECT SNO FROM S
         EXCEPT
         SELECT SNO FROM SP )
AND
NOT EXISTS ( SELECT SNO FROM SP
             EXCEPT
             SELECT SNO FROM S )
时间: 2024-09-20 09:11:25

《交互式程序设计 第2版》一3.8 SQL中的表的相关文章

《交互式程序设计 第2版》一1.2 交互领域中的编程

1.2 交互领域中的编程 这本书之所以名为<交互式程序设计>,是因为我们主要关注交互设计中要用到的编程知识,也就是用编程的手段,去创造用户能直接与之交互的应用.编程有很多种,其中有些技术和思维方法更适合用于服务器和数据库,而不是交互.而本书集中讨论的东西将是你用来建立用户和应用之间沟通的知识和技能.交互设计中的一大挑战是如何在你设计的作品和用户之间建立真正的交互. 1.2.1 交互的本质 那么,"交互"到底是什么呢?我们可以把它定义为双方或多方之间的信息交换.作家及电子游戏

《交互式程序设计 第2版》一第3章

第3章 使用ProcessingProcessing是较早的开源项目之一,它简化了创建交互式图形应用程序的难度.它就像是艺术家和设计师的专用工具一样,你无需高深的编程技巧,也可以容易地用它进行艺术创作.Processing是完全开源和免费的,你可以下载.使用甚至修改它.最初,麻省理工学院的Casey Reas和Ben Fry在John Maeda的指导下开始这个项目,后来一组开发人员不断更新Processing的内核和工具.现在Processing的最新版本是1.5版译注1,提供的工具支持创建J

《交互式程序设计 第2版》一3.11 小结

3.11 小结 Processing既是一个集成开发环境,也是一门程序设计语言.它们是一体的,可以在processing.org/download上下载.Processing语言是基于Java语言的,但作了简化,以便帮助艺术家和设计师容易地建立可视化样本和交互式应用程序.Processing集成开发环境顶端的工具栏上有几个按钮.单击"Run"按钮可以运行程序:单击"Stop"按钮可以停止应用程序的运行:此外还有"New"."Open&q

《交互式程序设计 第2版》一1.1 本书读者对象

1.1 本书读者对象 本书基于这样一个目标:技术和代码不是计算机科学家和工程师的专用工具,任何人都不需要畏惧或逃避电子技术.硬件和代码.艺术家和设计师可能想知道,如何通过定制的计算机应用程序来更好地实现用户之间以及应用之间的交互.你可能会关心如何创造出富有科技感的应用,这里有两种情况,一种是该应用本身具有突出的科技特性,另一种是看上去很高科技或者使用了一些代表了科技力量的元素,例如键盘.鼠标和触摸屏.你也可能关注交互领域的其他方面,又或者希望把冰冷的技术隐藏于更具生命机理的界面之下.本书会介绍用

《交互式程序设计 第2版》一1.5 数据交换与探索

1.5 数据交换与探索 交互设备的任务.目标和实现其交互的方式都很重要.与之前提到的一样,下面的分类并不是一个交互作品分类的完整清单,只是列举了一些最常见主题,为本书后面的内容提纲挈领一下. 支持数据可视化 我们身处的社会越来越以信息为中心,每天都有大量的数据在处理,数据可视化就变得越来越重要了.结构良好的数据可视化是一种有力的工具,它不仅让用户理解独立的数据点,还让用户明白数据点之间的关系,检测数据模式,甚至重新配置数据,或将其置于新的语境中.数据可视化不是向用户单方面灌输信息,而是通过和用户

《交互式程序设计 第2版》一3.9 导出Processing应用程序

3.9 导出Processing应用程序 如果你想看看应用程序运行情况,想检查代码,那么运行和调试的确很有用.但如果你要把应用程序与某个朋友分享,运行和调试就没有用了,需要做的是导出应用程序.第一步是点击菜单"File"→"Export Application",或者直接按Ctrl + E组合键(Mac OS X下是-E).会弹出如图3-10所示的对话框,让你选择程序将来运行所需的操作系统.如果你单击了Export(导出)按钮,会显示一个对话框,将当前应用程序所在的

《交互式程序设计 第2版》一导读

前 言 本书分三部分.第一部分(第1-6章)介绍贯穿本书的3个项目,第二部分(第7-10章)介绍交互设计和应用程序创作中最普遍的主题,第三部分(第11-17章)深入讨论相关进阶主题.当中还有对相关人士的采访,包括程序员.艺术家.设计师以及工具的开发者.本书涉猎如此广泛,无法对每一个主题进行深入探讨,有兴趣进一步研究的读者不妨参考书中所列出的书目.网站.设计师和艺术家. 本书包括及未包括的内容 当下交互设计领域迅猛发展,观念日新月异,笔者对此的兴奋之情难以言表.受时间和篇幅所限,无法囊括所有的方面

《交互式程序设计 第2版》一2.3.4 运算符

2.3.4 运算符 在程序中,运算符就是编译器用来执行命令和运算的符号,例如"="用来赋值,"=="用来比较等.运算符有三类:一是数学运算符,用于数学运算,就跟数学课上学到的一样:二是赋值运算符,用来改变变量的值:三是比较运算符,比较两个变量是否相等,谁大谁小. 数学运算符的用法就跟一般数学式子里的一样.用"+"可以把两个变量相加,例如: int apples = 5: int moreApples = apples + 3; // moreAp

《交互式程序设计 第2版》一3.4 Processing绘图基础

3.4 Processing绘图基础 因为Processing是为艺术家提供的工具,所以它简化了很多任务,其中最重要的一个任务是绘图.第8章和第9章会介绍利用矢量和位图绘图.第13章将介绍图形库OpenGL(Open Graphics Library)和一些3D(3 Dimension,三维)基础,以及如何创建复杂的绘图系统.在本节,你将学习如何绘制简单的形状和线条,以及如何创建颜色去填充它们. 3.4.1 rect().ellipse()和line()方法 有3个最简单的绘图方法rect().

《交互式程序设计 第2版》一1.2.4 交互语言

1.2.4 交互语言 任何一种交互都需要一套相应的词汇.例如,你要用鼠标把桌面上的某个文件删除,你会说"选中该文件,然后把它拖到回收站".事实上,对你这个动作,系统并不是完全如你这般理解,但没关系.重要的是你明白你可以做什么动作,而对于同一个动作,系统有相同的理解,并作出你所预期的响应.建立一个有意义.有效和有结果的交互,就像创造一种语言或代码,需要交互双方对符号的意思和动作指令的意义有一致的协议.而同一个符号或动作,在不同类型的界面和交互中, 含义会相差很大. 各式各样的交互种类繁多