暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8a 学习笔记 007 —— GBase 8a MPP Cluster SQL基础

心有阳光 2023-03-02
943

GBase 8a 学习笔记 007 —— GBase 8a MPP Cluster SQL基础

SQL语言基础

Structured Query Language,结构化查询语言

  • 数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
  • SQL是IBM在20世纪70年代末开发实现
  • SQL语言属于非过程化的4GL(第四代语言)
  • SQL是关系数据库的标准语言

SQL标准

  • 国际标准化组织(ISO)颁布了SQL正式国际标准
  • SQL-86、SQL-89、SQL-92、SQL-99、SQL:2003、SQL:2008、SQL:2011

SQL语言分类

SQL语句根据其可实现的功能,分为以下几类

  • DDL语句:用来创建数据库以及定义其表结构、视图、索引等。
    • 关键词有CREATE、DROP、 ALTER、RENAME等
  • DML语句:对数据库进行增加,更改,删除操作。
    • 关键词有INSERT、UPDATE、DELETE等
  • DQL语句:用来对数据库进行查询操作,关键词SELECT
  • DCL语句:用于赋予权限以及回收权限等,关键词有GRANT、REVOKE等
  • 其他:优化和动态管理数据库资源等,关键词有SHOW、KILL等

GBase 8a MPP Cluster SQL 综述

  • 遵循 SQL 92 标准,支持 SQL99 和 SQL:2003 部分标准;
  • SQL 的关键词不区分大小写;
  • 限定词标识符用“.”分隔,例如:vc.db.tb.col ;
  • 默认每条 SQL 以分号“;”结束,可使用DELIMITER进行修改;
  • 默认 SQL 执行采用自动提交方式,自动 commit ;

GBase 8a MPP Cluster 数据对象的访问

  • 访问路径:VC_name.database_name.table_name.column_name
  • 单VC模式(兼容模式),默认VC名字是vc00001,在访问路径中可以省略。

GBase 8a MPP Cluster 标识符命名规则

数据库、表、列和别名等对象的名称都称为标识符。

标识符 最大长度(字符) 允许的字符
数据库 48 a~z、A~Z、0~9、下划线、必须以字母或下划线开头
表、视图 56 a~z、A~Z、0~9、下划线,必须以字母或下划线开头
64 a~z、A~Z、0~9、下划线,“-”、必须以字母或下划线开头
别名 255 a~z、A~Z、0~9、下划线、中文,必须以字母或下划线开头
存储过程 64 a~z、A~Z、0~9、下划线,必须以字母或下划线开头
变量 a~z、A~Z、0~9、下划线,必须以字母或下划线开头

备注

  • 除了表内注明的限制,数据库、表和列名不应以空格结尾。
  • 如果标识符是一个限制词或包含特殊字符,必须用反引号引用它,比如:SELECT * FROM select
  • 如果标识符长度超过最大长度限制,数据库、表、列、视图、存储过程的命令将报错,而别名将会截断至 256个字符进行显示。
  • 当库名、表名、列名为中文时,最大支持的汉字个数:库名48个汉字;表名21个汉字;
  • 参数gcluster_extend_ident设置为1,即开启创建中文库名、表名、列名的功能,默认为0,不开启;

GBase 8a MPP Cluster 的列引用

GBase 8a MPP Cluster 允许名称由一个或多个标识符组成。组合名称的各个组成成分应该用英文句号字符“.”分隔开;由于不同数据库的列名、表名有相同名称,列的引用需要不产生二义性

列引用 含义
col_name 列col_name来自查询所用的任何一个表中对应字段。
Table_name.col_name 列col_name来自当前数据库中的表table_name。
DB_name.table_name.col_name 列col_name来自数据库database_name中的表table_name。
VC_name.DB_name.table_name.col_name 列col_name来自虚拟集群vc_name数据库database_name中的表table_name。
col_name 反引号包围,该字段是一个关键词或包含特殊字符。

备注:
含有关键词和特殊字符的标识符,不能直接组合作为一个整体来引用。
gs-table.gs-column合法, gs-table.gs-column 不合法。

语法规范

SQL注释语法

GBase 8a MPP Cluster 支持单行注释和多行注释。

  • 单行注释: 以下两种形式,选择一种即可:
    • “#” :gbase> SELECT 1+1 FROM t; # This comment continues to the END of line
    • "-- ”:gbase> SELECT 1+1 FROM t; – This comment continues to the END of line
    • "-- "后面需加一个半角空格
  • 多行注释:注释内容为一行或者连续的多行,还支持注释内容放在行中间。
/*注释内容*/ gbase> SELECT 1+/*this is a multiple-line comment*/ 1 FROM dual;

用户变量

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

  • 用户变量以@开头,不区分大小写:@var_name
  • 通过 SET 语法来定义并为变量赋值:SET @var_name = expr [, @var_name = expr] …
  • 通过 SELECT 语法查看用户变量的值:SELECT @var_name [, @var_name] …
  • 赋给每一个变量的 expr 值可以是实数、字符串或 NULL。如果用户没有对变量初始化,那么它的值就为NULL

数据类型

数据分类 数据类型
数值型 INTEGER、TINYINT、SMALLINT、BIGINT、DECIMAL、NUMERIC、FLOAT、DOUBLE
字符型 CHAR、VARCHAR、TEXT
日期和时间型 DATE、TIME、DATETIME、TIMESTAMP
二进制类型 BLOB、LONGBLOB

数值类型

  • 有效地使用存储空间,尽量使用最精确的类型。
  • 严格的数值数据类型(TINYINT,SMALLINT,INT,BIGINT,DECIMAL),以及近似的数值数据类型(FLOAT,DOUBLE)
  • DECIMAL(M,D)类型,M 是总位数(最大65位) ,D 是小数点后的位数,默认是DECIMAL(10,0)
类型名称 最小值 最大值 占用字节数
TINYINT -127 127 1
SMALLINT -32767 32767 2
INT(INTEGER) -2147483647 2147483647 4
BIGINT -9223372036854775806 9223372036854775806 8
DECIMAL[(M[,D])] -(1E+M -1)/(1E+D) (1E+M -1)/(1E+D) 动态计算
FLOAT -3.40E+38 3.40E+38 4
DOUBLE -1.7976931348623157E+308 1.7976931348623157E+308 8

字符类型

  • 在实际的项目不建议使用char和text类型,建议使用 VARCHAR 数据类型
  • TEXT类型不能指定DEFAULT值,仅兼容使用,推荐使用VARCHAR 数据类型
类型名称 最大长度(字符) 说明
CHAR 255 定长
VARCHAR 10922(utf8)、16383(gbk) 变长
TEXT 10922 变长

日期时间类型

  • DATE : 显示格式 YYYY-MM-DD
  • TIME:显示格式 ‘HH:MI:SS‛格式(或 HHH:MI:SS 格式)
  • DATETIME: 以‘YYYY-MM-DD HH:MI:SS.ffffff‛ 格式显示,精确到微秒
  • TIMESTAMP: 仅为了兼容使用,在实际项目中不建议使用,推荐DATETIME
  • 日期格式不同,需类型转换
INSERT INTO EMP VALUES(7900,‘JAMES’,‘CLERK’, to_date('3-12-1981','dd-mm-yyyy'));
类型名称 最小值 最大值 格式
DATE 0001-01-01 9999-12-31 YYYY-MM-dd
DATETIME 0001-01-01 00:00:00.000000 9999-12-31 23:59:59 YYYY-MM-dd HH:MI:SS.ffffff
TIME -838:59:59 838:59:59 HHH:MI:SS
TIMESTAMP 1970-01-01 08:00:01 2038-01-01 00:59:59 YYYY-MI-DD HH:MI:SS

二进制类型

  • 创建表时,二进制类型列不能有 DEFAULT 值。
  • 查询语句中,二进制类型列不建议用在过滤条件、group by、Join条件中。
  • 查询语句中,二进制类型列不支持 OLAP 函数。
  • 二进制类型列不能创建HASH索引和Hash分布列
类型名称 最大长度(字符)
BLOB 32k
LONGBLOB 64M

与其它数据库数据类型对应关系

其它提供商的类型 GBase 8a 类型
BOOL TINYINT
BOOLEAN TINYINT
CHAR VARYING(M) VARCHAR(M)
DEC DECIMAL
FLOAT4 FLOAT
FLOAT8 DOUBLE
INT1 TINYINT
INT2 SMALLINT
INT3 MEDIUMINT
INT4 INT
INT8 BIGINT
MIDDLEINT MEDIUMINT
NUMERIC DECIMAL
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论