SQL语言参考
SQL 是一种声明式语言,与传统的过程式语言(如 C/C++ 和 Java)不同,它没有控制语句(如 if 和 while)。SQL 已被广泛采用,并成为 ANSI 和 ISO 的标准。SQL 技能在不同数据库系统之间具有高度可移植性,尽管各供应商通常会添加专有扩展以利用其特定技术。
ANSI SQL 标准经历了多个版本的发展,包括 SQL-89、SQL-92 和最新的 SQL-99。SmartESQL实现了 SQL-89 标准中的大部分 DML 语句。
SQL 语句分为三类:
- 数据定义语言 (DDL):用于定义数据库结构,如创建表(CREATE TABLE)和索引(CREATE INDEX),并设置约束和其他属性。
- 数据操作语言 (DML):用于操作和检索数据,包括 SELECT、INSERT、UPDATE 和 DELETE 四个主要语句。
- 数据控制语言 (DCL):用于管理数据访问权限,如 GRANT 和 REVOKE 语句。
符合 ANSI SQL-89 标准
ANSI SQL 标准历经多年发展,最初是 SQL-89 标准,随后是 SQL-92 标准,最近则是 SQL-99 标准。SmartESQL 对 SQL-89 标准的 SQL 数据操作语言(DML)提供了广泛的实现,并且包含许多扩展:
数组
结构体参考文献
支持所有 C++ 内置类型
用户自定义函数
此外,还有一些与 ANSI 标准的不兼容之处:
- 对某些类型的列赋空值不受支持。
- 运行时更改数据库架构(添加表、添加索引等)不受支持。
- 标识符区分大小写(SQL 关键字不区分大小写)。
- 视图不可更新。
- 由于 SmartEDB 没有“远程表”的概念,因此物化视图无关(即不受支持)。
- 约束条件并非由 SQL 接口本身强制执行,而是由底层的 SmartEDB 运行时强制执行。
- 未实现右外连接和全外连接。
- 不支持触发器,但如果 SmartESQL 操作导致此类事件,则会调用底层 SmartEDB 事件通知。
关键字和保留字
如果在 SQL 语句中用作标识符,保留字必须用双引号括起来。例如:
XSQL>create table T ("field" int, "type" int);
请注意,在应用程序源代码中引用保留字时,可能需要对双引号字符进行“转义”,例如:
QueryResult qr(engine.executeQuery("select \"field\", \"type\" from aRecord"));
当使用mcocomp DDL编译器编译SmartEDB数据库模式时,在模式定义中还有一些保留字不能用作类名或字段名。有关DDL编译器的保留字列表,请参阅DDL保留字页面。
数据类型
SmartESQL 支持的多种数据类型及其对应的DDL 定义。
对于大多数类型,SQL 引擎将透明地执行数据类型转换。
运算符
SmartESQL SQL 语言运算符有以下几种类型:
运算符 | 说明 |
---|---|
算术运算 | 加法、减法、乘法和除法运算符 |
赋值运算 | 用于将值强制转换为不同数据类型的 cast() 运算符 |
二元运算 | 对两个操作数进行运算并返回布尔结果的运算符 |
比较运算 | 用于比较两个表达式的运算符 |
逻辑运算 | 逻辑运算符 and 、or 和 not |
谓词
在 SELECT 语句的 WHERE 子句中使用 SQL 语言谓词来限制结果集中的行数。
SmartESQL 谓词运算符如下:
SQL谓词 | 说明 |
---|---|
between | 指定范围内的值 |
like, ilike | 符合指定模式的字符串值 |
in | 指定集合中包含的值 |
exists | 结果集中存在的值 |
exact_match | 精确匹配(Patricia 字典树) |
prefix_match | 最长前缀匹配(Patricia 字典树) |
语句
SmartESQL 处理两种类型的 SQL 语句:数据定义语言(DDL)和数据操作语言(DML)。
数据定义语言(DDL)语句
数据定义语言(DDL)语句会向 SmartESQL 元表添加、修改或移除表和索引,该元表管理着所有 SQL 访问。
数据操作语言(DML)语句
数据操作语言(DML)语句用于向现有表中添加、修改或删除行,或者对现有表执行查询。
函数
请在SQL函数页面中的查看所支持的SmartESQL函数类型。