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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。