- 1 SQL语言基础
- —1.1 Structured Query Language,结构化查询语言
- —1.2 SQL标准
- —1.3 SQL语言分类
- 2 语法规范
- —2.1 GBase 8a MPP Cluster SQL 综述
- —2.2 GBase 8a MPP Cluster 数据对象的访问
- —2.3 GBase 8a MPP Cluster 标识符命名规则
- —2.4 GBase 8a MPP Cluster 的列引用
- —2.5 SQL注释语法
- —2.6 用户变量
- 3 数据类型
- —3.1 分类
- —3.2 数值类型
- —3.3 字符类型
- —3.4 日期时间类型
- —3.5 二进制类型
- —3.6 与其它数据库数据类型对应关系
- —3.7 数据类型的隐式转换
1 SQL语言基础
—1.1 Structured Query Language,结构化查询语言
− 数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统 − SQL是IBM在20世纪70年代末开发实现
− SQL语言属于非过程化的4GL(第四代语言)
− SQL是关系数据库的标准语言
—1.2 SQL标准
− 国际标准化组织(ISO)颁布了SQL正式国际标准
− SQL-86、SQL-89、SQL-92、SQL-99、SQL:2003、SQL:2008、SQL:2011
—1.3 SQL语言分类
SQL语句根据其可实现的功能,分为以下几类:
− DDL语句:用来创建数据库以及定义其表结构、视图、索引等。
关键词有CREATE、DROP、 ALTER、RENAME等
− DML语句:对数据库进行增加,更改,删除操作。
关键词有INSERT、UPDATE、DELETE等
− DQL语句:用来对数据库进行查询操作,关键词SELECT
− DCL语句:用于赋予权限以及回收权限等,关键词有GRANT、REVOKE等
− 其他:优化和动态管理数据库资源等,关键词有SHOW、KILL等
2 语法规范
—2.1 GBase 8a MPP Cluster SQL 综述
• 遵循 SQL 92 标准,支持 SQL99 和 SQL:2003 部分标准;
• SQL 的关键词不区分大小写;
• 限定词标识符用“.”分隔,例如:vc.db.tb.col ;
• 默认每条 SQL 以分号“;”结束,可使用DELIMITER进行修改;
• 默认 SQL 执行采用自动提交方式,自动 commit ;
—2.2 GBase 8a MPP Cluster 数据对象的访问
• 访问路径:VC_name.database_name.table_name.column_name
• 单VC模式(兼容模式),默认VC名字是vc00001,在访问路径中可以省略。
—2.3 GBase 8a MPP Cluster 标识符命名规则
数据库、表、列和别名等对象的名称都称为标识符。
备注:
1、除了表内注明的限制,数据库、表和列名不应以空格结尾。
2、如果标识符是一个限制词或包含特殊字符,必须用反引号` `引用它,比如:SELECT * FROM `select`;
3、如果标识符长度超过最大长度限制,数据库、表、列、视图、存储过程的命令将报错,而别名将会截断至 256个字符进行显示。
4、当库名、表名、列名为中文时,最大支持的汉字个数:库名 48 个汉字;表名 21 个汉字;
参数gcluster_extend_ident设置为1,即开启创建中文库名、表名、列名的功能,默认为0,不开启。
—2.4 GBase 8a MPP Cluster 的列引用
GBase 8a MPP Cluster 允许名称由一个或多个标识符组成。组合名称的各个组成成分应该用英文 句号字符“.”分隔开;由于不同数据库的列名、表名有相同名称,列的引用需要不产生二义性。
备注:含有关键词和特殊字符的标识符,不能直接组合作为一个整体来引用。
`gs-table`.`gs-column`合法, `gs-table.gs-column` 不合法。
—2.5 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;
+--------------+
| 1 + 1 |
+--------------+
| 2 |
+--------------+
—2.6 用户变量
用户变量:
用户变量的生命周期是会话级的,对其它会话不可见。当用户退出时,此用户的所有用户 变量会自动释放。
• 用户变量以@开头,不区分大小写:@var_name
• 通过 SET 语法来定义并为变量赋值:SET @var_name = expr [, @var_name = expr] ...
• 通过 SELECT 语法查看用户变量的值:SELECT @var_name [, @var_name] ...
示例:
gbase> SET @t1='abc',@t2=null,@t3=4;
gbase> SELECT @t1,@t2,@t3,@t4;
gbase> SET @t1='abc',@t2=null,@t3=4; Query OK, 0 rows affected (Elapsed: 00:00:00.00) gbase> SELECT @t1,@t2,@t3,@t4; +------+------+------+------+ | @t1 | @t2 | @t3 | @t4 | +------+------+------+------+ | abc | NULL | 4 | NULL | +------+------+------+------+ 1 row in set (Elapsed: 00:00:00.01)
注:
• 赋给每一个变量的 expr 值可以是实数、字符串或 NULL。如果用户没有对变量初始化,那么它的值就为 NULL。
3 数据类型
—3.1 分类
—3.2 数值类型
− 有效地使用存储空间,尽量使用最精确的类型。
− 严格的数值数据类型(TINYINT,SMALLINT,INT,BIGINT,DECIMAL),以及近似的数值数据类型(FLOAT,DOUBLE)
− DECIMAL(M,D)类型,M 是总位数(最大65位) ,D 是小数点后的位数,默认是DECIMAL(10,0)
—3.3 字符类型
− 在实际的项目不建议使用char和text类型,建议使用 VARCHAR 数据类型
− TEXT类型不能指定DEFAULT值,仅兼容使用,推荐使用VARCHAR 数据类型
—3.4 日期时间类型
− 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'));
—3.5 二进制类型
− 创建表时,二进制类型列不能有 DEFAULT 值。
− 查询语句中,二进制类型列不建议用在过滤条件、group by、Join条件中。 − 查询语句中,二进制类型列不支持 OLAP 函数。
− 二进制类型列不能创建HASH索引和Hash分布列
—3.6 与其它数据库数据类型对应关系
—3.7 数据类型的隐式转换
举例:
create table t(a int2, b bool, c dec); 显示表t的字段
desc t;