SQL语言基础

  • 字符串
  • 数字
  • 布尔值
  • NULL值
  • 数据库、表、列和别名
  • 标识符限定词
  • 注释语法
  • 用户变量


数值:字符串、数字、十六进制值、布尔值、NULL

字符串

字符串是多个字符组成的一个字符序列,由单引号或双引字符包围。例如:

‘a string’

在一个字符串中,确定的序列具有特殊的含义,每个序列以反斜线符号\开头,称为转义字符。GBase 8a MPP Cluster 识别下列转义字符:

GBase 8a MPP Cluster ——SQL语言基础_字符串


这些符号是大小写敏感的。例如:\b被解释为一个退格,但是‚\B被解释为B, 在其它的所有转义字符中,忽略反斜线符号。换句话说,反斜线用来解释转义字符而不是被转义。

当字符串中包含引号时:字符串用单引号来引用的,该字符串中的单引号字符可以用方式转义。用户也可以继续使用在引号前加一个转义字符‚\的方式进行转义。字符串是用单引号来引用的,该字符串中的双引号不需要特殊对待而且不必被重复或转义。

GBase 8a MPP Cluster ——SQL语言基础_sql_02

GBase 8a MPP Cluster ——SQL语言基础_数据库_03

不存在转义含义时,忽略反斜线符号。

GBase 8a MPP Cluster ——SQL语言基础_字符串_04

如果用户想要把二进制数据插入到 BLOB 字段中,下列字符必由转义序列表示:

GBase 8a MPP Cluster ——SQL语言基础_字符串_05

create table products(a blob);
insert into products(a) values('abcdef\\ghi\'jklm\" \0kjhkj');
select a from products;

数字

十六进制
GBase 8a MPP Cluster 支持十六进制数值。在数字的上下文语境中,它们作为数值等价于整数使用。在字符串的上下文语境中,它们作为一个字符串,每一组十六进制数字被解释为对应 ASCII 码的字符。

示例 1:0xa 等价于整数 10

表达式‚x’hexstring’‛是基于标准 SQL 的,表达式 0x 是基于 ODBC 的。二者是等价的.

SELECT 0xa+1 FROM t;
SELECT x'4742617365' FROM t;
SELECT 0x5061756c FROM t;

示例 4:使用 HEX()函数可以将一个字符串或数值转换为一个十六进制格式的字符串。

SELECT HEX('cat') FROM t;

布尔值

常量 TURE 相当于 1,而常量 FALSE 相当于 0。
常量的名字对大小写不敏感。
示例 1:查询 TRUE 和 FALSE 对应的值。

NULL值

NULL 不区分大小写。
注意:NULL 值不同于数字类型的 0 或字符串类型的空串。

数据库、表、列和别名

数据库、表、列和别名等都是标识符,这部分描述 GBase 8a MPP Cluster中标识符允许的语法规则。下面的表描述了对于每一个类型标识符允许的最大长度和可使用的字符

GBase 8a MPP Cluster ——SQL语言基础_字符串_06


一些注意事项:

1、除了表内注明的限制,标识符不可以包含 ASCII(0)或 ASCII(255)。数据库、表和列名不应以空格结尾;

2、如果标识符是一个限制词或包含特殊字符,当用户使用它时,必须总是用引用它,比如:SELECT * FROM select`.id>100;

3、如果标识符长度超过最大长度限制,数据库、表、列、视图、存储过程的命令将报错,而别名将会截断至 256 个字符进行显示。

GBase 8a MPP Cluster 数据库支持的保留字,实际应用系统中,标识符不得使用 GBase 8a MPP Cluster 的保留字,也不能包含特殊字符。

标识符限定词

GBase 8a MPP Cluster 允许名称由一个或多个标识符组成。组合名称的各个组成成分应该用英文句号字符‚.‛分割开。组合名称的开始部分做为限定词来使用,它影响了上下文中后面的标识符的解释。在 GBase 8a MPP Cluster 中,用户可以使用下列表格中的任一种方式引用一个列:

GBase 8a MPP Cluster ——SQL语言基础_标识符_07

注释语法

GBase 8a MPP Cluster 支持三种注释风格。
# 到该行结束。
– 到该行结束。注意‚–‛(引导号)注释风格要求第二个引导号后至少跟着一个空格(或者一个控制字符例如换行)。这个语法和标准的 SQL 注释风格有点不同。

/* 行中间或多个行 */。这个封闭的序列不一定在同一行表示,因此该语法允许多行注释。

SELECT 1+1 FROM t;# This comment continues to the END of line
SELECT 1+1 FROM t;-- This comment continues to the END of line
SELECT 1 /* this is an in-line comment */ + 1 FROM t;

用户变量

GBase 8a MPP Cluster 支持用户变量。用户变量的生命周期是会话级的,对其它会话不可见。当用户退出时,此用户的所有用户变量会自动释放。

用户变量的写法是:@var_name。一个变量名可以由 a~z、A~Z、0~9、下划线组成,必须以字母或下划线开头。
用户变量名大小写不敏感。
通过 SET 语法来定义并为变量赋值。

SET @var_name = expr [, @var_name = expr] ...

=是赋值操作符。赋给每一个变量的 expr 值可以是整数、实数、字符串、或 NULL。

通过 SELECT 语法查看用户变量的值。

SELECT @var_name [, @var_name] ...

示例 1:使用 SET 语句为变量赋值。

set @t1='abc', @t2=null, @t3=4;
select @t1, @t2, @t3;