Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » SQL 方言和兼容性 » SQL 方言

 

其它 SQL 实现中没有的功能

SQL Anywhere 所支持的以下 SQL 功能在其它许多 SQL 实现中都没有。

日期

SQL Anywhere 具有日期、时间和时间戳类型,包括年月日、小时、分钟、秒和秒的小数值。插入或更新日期字段时,或与日期字段进行比较时,支持使用自由格式日期。

此外,还可以对日期进行以下运算:

  • 日期 + 整数   在日期中加上指定的天数。

  • 日期 - 整数   从日期中减去指定的天数。

  • 日期 - 日期   计算两个日期之间的天数。

  • 日期 + 时间   用日期和时间创建一个时间戳。

另外,还提供了许多用于操作日期和时间的函数。有关这些函数的说明,请参见SQL 函数

完整性

SQL Anywhere 支持实体完整性和参照完整性。这是通过对 CREATE TABLE 和 ALTER TABLE 命令进行以下两个扩展实现的。

PRIMARY KEY ( column-name, ... )
[NOT NULL] FOREIGN KEY [role-name]
            [(column-name, ...)]
         REFERENCES table-name [(column-name, ...)]
            [ CHECK ON COMMIT ]

PRIMARY KEY 子句声明关系的主键。之后,SQL Anywhere 会强制实现主键的唯一性,并确保主键中的任何一列都不包含 NULL 值。

FOREIGN KEY 子句定义此表与另一个表之间的关系。这个关系由此表中的一列(或多列)表示,该列必须包含另一个表的主键中的值。之后,系统会确保这些列的参照完整性 - 只要修改了这些列,或在此表中插入了一行,都会对这些列进行检查,以确保有一列或多列为 NULL,或对于其它表的某行这些值与主键中的对应列相匹配。有关详细信息,请参见CREATE TABLE 语句

连接

SQL Anywhere 允许表之间的自动连接。除其它实现中支持的 NATURAL 和 OUTER 连接操作符之外,SQL Anywhere 还允许在表之间基于外键关系建立 KEY 连接。这降低了执行连接时 WHERE 子句的复杂程度。

更新

SQL Anywhere 允许 UPDATE 命令引用多个表。在多个表上定义的视图也可以更新。许多 SQL 实现不允许更新连接的表。

变更表

对 ALTER TABLE 命令进行了扩展。除了用于实体完整性和参照完整性的更改外,还支持以下变更:

ADD column data-type
ALTER column data-type
DELETE column
RENAME new-table-name
RENAME old-column TO new-column

使用 ALTER 子句可以更改字符列的最大长度,也可以从一种数据类型转换为另一种数据类型。请参见ALTER TABLE 语句

支持子查询 WHERE 表达式

SQL Anywhere 允许在任何可以放置表达式的位置放置子查询。许多 SQL 实现只允许将子查询放置在比较运算符的右边。例如,以下命令在 SQL Anywhere 中有效,但在大多数其它 SQL 实现中无效。

SELECT Surname,
  BirthDate,
  (  SELECT DepartmentName
     FROM Departments
     WHERE EmployeeID = Employees.EmployeeID
     AND DepartmentID = 200 )
FROM Employees;
附加函数

SQL Anywhere 支持若干 ANSI SQL 定义中没有的函数。有关可用函数的完整列表,请参见SQL 函数

游标

使用嵌入式 SQL 时,可以使用 FETCH 语句任意移动游标位置。可以相对于当前游标位置或相对于游标最前面或最后面给定数量的记录,前移或后移游标。

别名参照

SQL Anywhere 允许在查询的其它部分引用该查询的选择列表中带别名的表达式。大多数其它 SQL 实现不允许这么做。