第2 章 SQL 问题
2.1 本章目的
在本章中就在 HSQLDB 主页论坛或邮件列表中多次提出的问题进行解答,如果你打算在应
用程序中使用HSQLDB 的话,你应该阅读一下本章。
2.2 对SQL 标准的支持
1.8.0 版本的HSQLDB 支持SQL92、99 和2003 标准规定的SQL 方言。这意味着HSQLDB
中支持的标准特性(例如左外连接)的语法是由标准文本规定的。许多SQL92、99 甚至更
高级的特征在HSQLDB 中得到了支持,并且对SQL2003 标准的大多数以及一些可选的特性
进行支持。然而,对于某些标准的特性没有支持,所以HSQLDB 就没有做出支持各个级别
所有的标准特性的声明。
“SQL 语法”一章列出了HSQLDB 所支持的所有的关键字和语法。当书写有关HSQLDB 或者
转换现有的有关HSQLDB 的SQL DDL(数据定义语言)和DML(数据操作语言)语句的
时候,你应该查阅一下HSQLDB 所支持的语法,并对SQL 语句作出相应的修改。
SQL 标准中保留的关键字是不能作为表明或字段名使用的。例如,“POSITION”被作为与Java
中的String.indexOf()作用类似的函数加以保留。HSQLDB 目前并不限制使用它不支持其用
法的关键字或用户能够区分清楚的关键字。例如,“BEGIN”是HSQLDB 目前没有支持的关
键字,所以你也可使用它作为表或者列的名称。不过你应该避免使用这些保留字,因为在
HSQLDB 以后的版本中有可能支持这些保留字,否则将拒绝含有这些保留字表定义或查询
语句。全部SQL 保留字列表请参看org.hsqldb.Token 类。
HSQLDB 也支持一些SQL 标准之外的关键字和表达式作为性能的增强。像SELECT TOP 5
from .., SELECT LIMIT 0 10 from ... 或者 DROP TABLE mytable IF EXISTS 这样的表达
式都是HSQLDB 增强性能所支持。
所有被双引号标注的关键字可以被用做数据库对象。
2.3 约束和索引
2.3.1 主键约束
在 1.7.0 版本之前,一个CONSTRAINT <name> PRIMARY KEY(名为name 的主键约束)
被在内部翻译成一个唯一的索引,另外,一个隐藏列被添加到具有额外唯一索引的表上。从
1.7.0 开始,单一列主键和多列主键(single-column and multi-column PRIMARY KEY)约束都得
到支持。它们由主键列指定的唯一索引支持,而没有额外的隐藏列来维护它们的索引。
2.3.2 唯一性约束
根据 SQL 标准,一个单一列上的唯一性约束表示不允许存在两个相同的值(空值出外),也
就是说这样的列中可以一个或更多为空值(NULL)的行而不违反唯一性约束。
多个列(c1, c2, c
相关文档:
一、因情制宜,建立“适当”的索引
建立“适当”的索引是实现查询优化的首要前提。
索引(index)是除表之外另一重要的、用户定义的存储在物理介质上的数据结构。当根据索引码的值搜索数据时,索引提供了对数据的快速访问。事实上,没有索引,数据库也能根据SELECT语句成功地检索到结果,但随着表变 ......
下列语句部分是Mssql语句,不可以在access中使用。
SQL分类:
DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,简要介绍基础语句:
1、说明:创建数据库
CR ......
CLR 用户定义函数只是在 .NET 程序集中定义的静态方法。CREATE FUNCTION 语句已扩展为支持创建 CLR
用户定义函数。
1、创建数据库项目
2、添加用户定义函数
以下是演示代码:
Code
using
System;
using
System.Data;
using
System.Data.SqlClient;
using
System.Data.Sql ......
递归的通用表表达式
递归的CTE是根据至少两个查询(或者称为两个成员)构建的,一个是非递归查询,也成为固定成员,只能调用一次,另外一个是递归查询,也成为递归成员(RM),可以反复调用,直到查询不再返回行。查询由UNION ALL运算符连接为一个单独的CTE。
--使用递归的通用表表达式
GO
CREATE TABLE CarParts
( ......
新的关系运算符 PIVOT/UNPIVOT/APPLY
1、PIVOT
PIVOT运算符将行旋转为列,并且可能同时执行聚合。使用PIVOT运算符时要注意的重要一点是,需要为它提供一个查询表达式,表达式使用视图、派生表或者是CTE只返回所关注的列。
2、UNPIVOT
UNPIVOT运算符执行与PIVOT运算符相反的操作;他将列旋转为行了。
3、APPLY
......