开发者社区> 华章计算机> 正文

《SQL与关系数据库理论——如何编写健壮的SQL代码》一2.6 SQL中的标量类型

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

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

2.6 SQL中的标量类型

SQL或多或少支持下列可自解释的系统定义标量类型(SQL也允许用户定义自己的类型,不过本章中基本上都会忽略用户定义类型):

BOOLEAN    INTEGER            CHARACTER(n)
        SMALLINT        CHARACTER VARYING(n)
        BIGINT            CHARACTER LARGE OBJECT(n)
        NUMERIC(p,q)        BINARY(n)
        DECIMAL(p,q)        BINARY VARYING(n)
        FLOAT(p)        BINARY LARGE OBJECT(n)

这并不是一个完全列表;其他的SQL系统定义类型包括:“XML document”类型(XML),各种“国家字符串类型”(NATIONAL CHARACTER(n)等),各种日期时间类型(DATE,TIME,TIMESTAMP,INTERVAL)。然而,从本书的目标出发,我基本会忽略这些类型。要点包括:

  • 支持大量的默认缩写或别名(比如,对应INTEGER的INT,对应CHARACTER的CHAR,对应CHARACTER VARYING的VARCHAR,对应CHARACTER LARGE OBJECT的CLOB)。
  • 与Tutorial D不同,SQL要求它的各种字符串类型都要有关联的长度声明。
  • 对于各种BINARY类型也是一样。注意:BINARY实际上指的是位串,或者字节串(可能更好);关联的长度说明是按八进制(octets)计算的长度。注14另外,尽管BINARY LARGE OBJECT可以缩写为BLOB,但BINARY和BINARY VARYING根本不能缩写(可能与期望相反)。
  • 严格来说,CHAR并不是真的类型,它应该算是类型生成器。相反,CHAR(25)就是一个类型,可使用值25作为唯一实参来调用CHAR类型生成器获得。而且,类似的说明也适用于前面列表中除了BOOLEAN和各种整数类型(SMALLINT,INTEGER,BIGINT)之外的所有类型事务物。注15然而,简单起见,我会在后文中(至少是大部分时候)忽略此点,继续将CHAR及其他类型生成器按照类型进行使用。
  • 支持这些类型基本惯用格式的字面值。
  • 所有这些类型都支持一个显式赋值运算符。语法是:
SET <scalar variable ref> = <scalar exp> ;

标量赋值在很多其他运算(比如FETCH)被执行时也会被隐式执行。注意:在本书中,所有如上例所示的规范语法定义中,我都会分别使用ref和exp作为reference和expression的缩写。

  • 所有这些类型也都支持一个显式的相等比较运算符。注16语法为:

    
    <scalar exp> = <scalar exp>

    当很多其他运算(比如连接和集合并、分组、消除重复等运算)执行时,相等比较也会被隐式执行。

  • 尤其要注意BOOLEAN类型,需要指出的是尽管它包括在SQL标准之中,但它只被非常少量的主流SQL产品所支持。当然,即使系统并不支持BOOLEAN类型,布尔表达式也总是出现在WHERE、ON和HAVING子句之中。然而,在这样的系统中,所有表都不可以有BOOLEAN类型列,也不能声明BOOLEAN类型的变量。最后,变通(比如,“yes/no列”)在有的时候还是需要的。
  • 最后,除了前述标量类型,SQL也支持所谓的域。然而,SQL的域根本不是类型。相反,它们只是一种不被考虑的“公共列定义”,具有大量超出本书范围的奇怪性质。如果你想使用它们的话就可以用,但是别错误地认为它们是真正的关系域(即类型)。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
整理几个常用的sql和其他代码
整理几个常用的sql和其他代码
92 0
整理几个常用的sql和其他代码
整理几个常用的sql和其他代码
41 0
使用 ABAP Open SQL 的 Select AS 别名,提高代码可读性
SAP ABAP 有些数据库表的字段名称,对于初学者来说不太友好,例如 USR01 表中的打印参数 SPLD, SPLG, SPDB, SPDA 等等。
75 0
无需 XML Mapper,超级 Mybatis 代码即是 SQL 操作!真香?(二)
无需 XML Mapper,超级 Mybatis 代码即是 SQL 操作!真香?
242 0
无需 XML Mapper,超级 Mybatis 代码即是 SQL 操作!真香?(一)
无需 XML Mapper,超级 Mybatis 代码即是 SQL 操作!真香?
195 0
(3)Flink CEP SQL宽松近邻代码演示
Flink CEP SQL宽松近邻代码演示,大数据风控系统规则引擎
51 0
(2)Flink CEP SQL严格近邻代码演示-风控系统构建利器
Flink CEP SQL严格近邻代码演示-风控系统构建利器
69 0
拿php写个原生增删改查案例出来(提供全部代码+sql)
拿php写个原生增删改查案例出来(提供全部代码+sql)
67 0
神了,程序员放弃写代码,直接用SQL写逻辑,你废吗?
神了,程序员放弃写代码,直接用SQL写逻辑,你废吗?
114 0
一行SQL代码能做什么?(下)
最近在知乎上看到一个问题:一行代码可以做什么?答题者数万计,都是一些非常“高端”的操作,就在想一行SQL代码能做什么呢?
49 0
+关注
华章计算机
文章
问答
视频
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
第十二届 BigData NoSQL Meetup — 基于hbase的New sql落地实践
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多