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

简介:

本节书摘来华章计算机《交互式程序设计 第2版》一书中的第3章 ,第3.8节,Joshua Noble 著 毛顺兵 张婷婷 陈宇 沈鑫 任灿江 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

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 )
相关文章
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
SQL 数据库 数据库管理
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图
404 11
|
SQL 关系型数据库 MySQL
mysql sql语句删除一个库下的所有表
mysql sql语句删除一个库下的所有表
160 1
|
SQL
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
现有用户成就统计需求,每个用户有多个成就,某一个成就会被多人拥有,写出数据表设计方案,用一条sql查出每个成就(B.ach_name)下的男生(sex=0)和女生(sex=1)分别有多少?
157 0
|
SQL 监控 关系型数据库
PolarDB产品使用问题之SQL防火墙怎么拦截没有指定WHERE条件的特定表的SQL语
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
SQL 分布式计算 DataWorks
MaxCompute操作报错合集之使用sql查询一个表的分区数据时遇到报错,该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
292 2
|
SQL 存储 测试技术
|
SQL 存储 数据库
SQL 撤销索引、撤销表以及撤销数据库
SQL 撤销索引、撤销表以及撤销数据库
278 4
|
SQL 存储 缓存
揭秘SQL中的公用表表达式:数据查询的新宠儿
揭秘SQL中的公用表表达式:数据查询的新宠儿
465 2
|
SQL 存储 关系型数据库
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
228 1