SQL中的字符和标记

SQL语法最基本的元素是字符和标记。 标记是SQL语言的基本语法单元。

字符

SQL语言中关键词和操作符的基本符号是字符。 字符分为字母、数字或特殊字符。

  • 字母是指英语字母表中26个大小写(A-Z和a-z)中的任何一个。1
  • 数字是指0到9之间的任何一个字符。
  • 特殊字符是指字母或数字以外的任何字符。

标记

SQL语言的基本语法单元称为标记。 一个标记由一个或多个字符组成,其中不含空格、控制字符、字符串常量或分隔标识符中的字符。

令牌分为普通令牌分隔符令牌

  • 普通标记是数字常量、普通标识符、主机标识符或关键字。 以下示例为普通令牌:
        1        .1        +2        SELECT        E        3
  • 分隔符是字符串常量、带分隔符的标识符、运算符或语法图中显示的任何特殊字符。 如PREPARE语句中所述,当用作参数标记时,问号(? )也是一个分隔符。 以下示例包括分隔符标记:
        ,        'string'        "fld1"        =        .

空格

空格是指一个或多个空字符的序列。

控制字符

控制字符是一种用于字符串对齐的特殊字符。 控制字符的作用类似于空间,不会导致特定操作的发生。 下表显示了 Db2 可识别的控制字符及其十六进制值。

更改开始
表 1. Db2 可识别的控制字符的十六进制值
控制字符 EBCDIC十六进制值 UTF-8 十六进制值 UTF-16 十六进制值
制表符 05 09 U+0009
换页 0C 0C U+000C
回车 0D 0D U+000D
新行 15 C285 U+0085
换行符 25 0A U+000A
双字节编码空间 - - U+3000
更改结束

除字符串常量和某些分隔标识符外,其他标记不得包含控制字符或空格。 控制字符或空格可以跟在标记之后。 每个普通标记后必须有一个分隔符、控制字符或空格。 如果语法不允许分隔符出现在普通字符之后,则必须在普通字符之后添加一个控制字符或空格。

三合字

语法中用左括号([ )和右括号(] )字符来指代数组元素。 某些CCSID无法指定这些字符。 以下三合字母可作为左右括号的替代符号:

  • 字符串 ??( 可以代替左括号([ )。
  • 字符串 ??) 可以代替右括号(] )。

注释

动态 SQL 语句可以包含 SQL 注释。 静态 SQL 语句可以包含主机语言注释或 SQL 注释。 除了在分隔符或关键字EXEC和SQL之间,可以在任何可以指定空格的地方指定注释。 在Java™中,嵌入式Java表达式中不允许使用SQL注释。 SQL注释有两种类型:

简单评论
简单评论以两个连续的连字符开头(-- )。简单评论不能超过行尾。
带括号的评论
带括号的评论以 /* 开头,以 */ 结尾。 括号中的评论可以延续到行尾。
以下示例展示了如何在C程序中的SQL语句中加入注释。 示例中使用了简单注释和括号注释:
   EXEC SQL
     CREATE VIEW PRJ_MAXPER         --projects with most support personnel
       /*
        * Returns number and name of the project
        */
      AS SELECT PROJNO, PROJNAME     -- number and name of project
           FROM DSN8910.PROJ
        /*
         * E21 is the systems support dept code
         */
      WHERE DEPTNO = 'E21'           -- systems support dept code
      AND PRSTAFF > 1;

更多信息,请参阅 SQL注释

大写和小写字母

SQL语句中的标记可以包含小写字母,但普通标记中的小写字母会被转换为大写。 然而,只有在指定了适当的预编译器选项时,小写字母才会以大写形式折叠到C或Java程序中。 分隔符永远不会变成大写。

例如,以下两个语句在文件夹之后是等价的:
   select * from DSN8C10.EMP where lastname = 'Smith';
   SELECT * FROM DSN8C10.EMP WHERE LASTNAME = 'Smith';
1 字母还包括三个保留的代码点,作为国家语言的字母扩展(美国使用的$、#和@)。 应避免使用这三个代码点( X'5B',、 X'7B', 和 X'7C' ),因为它们根据CCSID的不同而代表不同的字符。