PostgreSQL7.0手册-用户手册-2. SQL 语法
第二章. SQL 语法
内容
关键字
注释
名称
常量
域和列(字段)
操作符
表达式
描述通用的 SQL 语法。
SQL 操作数据集。该语言由多种多样的 关键字 组成。它允许使用算术和过程表达式。我们将在本章讨论这个问题;随后的章节将包括一些关于数据类型,函数和操作符的细节。
关键字
SQL92 为这门语言定义了有明确意义的 关键字 。有些关键字是 保留字,表明它们只限于出现在某些特定的环境里。其他关键字是 非限制字,表明它们在某些特定的环境里有特殊含义,否则没有什么限制。
Postgres 实现了一个扩展了的 SQL92 和 SQL3 语言的子集。部分由于 Postgres 的可扩展性,一些语言元素在 Postgres 里的实现不象在语言标准里期望的那样严格(限制)。
关于SQL92 和 SQL3 关键字的信息源自 Date and Darwen, 1997。
保留关键字
SQL92 和 SQL3 有一些 保留关键字 除了在 SQL 语句里面用做基本元素外不允许用做标识或者任何其它用途。Postgres 有另外一些关键字也有类似约束。具体来说,这些关键字不允许用做字段或者表名称,尽管有时候它们可以用做字段标签(例如,在AS子句里)。
小技巧: 如果用双引号包围(“象这样!”),任何字串都可以声明为标识。这时我们要仔细一些,因为这样做一个标识将是大小写敏感的并且将保有嵌入的空白或其他特殊字符。
下面是 Postgres 特有的保留关键字,它们既不是 SQL92 也不是 SQL3 保留字。这些字允许做为字段标记出现,但不允许用作标识:
ABORT ANALYZE
BINARY
CLUSTER CONSTRAINT COPY
DO
EXPLAIN EXTEND
LISTEN LOAD LOCK
MOVE
NEW NONE NOTIFY
OFFSET
RESET
SETOF SHOW
UNLISTEN UNTIL
VACUUM VERBOSE
下面是 Postgres 的保留关键字,同时也是 SQL92 或SQL3 的保留字。这些字允许做为字段标记出现,但不允许用作标识:
ALL ANY ASC BETWEEN BIT BOTH
CASE CAST CHAR CHARACTER CHECK COALESCE COLLATE COLUMN
CONSTRAINT CROSS CURRENT CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER
DEC DECIMAL DEFAULT DESC DISTINCT
ELSE END EXCEPT EXISTS EXTRACT
FALSE FLOAT FOR FOREIGN FROM FULL
GLOBAL GROUP
HAVING
IN INNER INTERSECT INTO IS
JOIN
LEADING LEFT LIKE LOCAL
NATURAL NCHAR NOT NULL NULLIF NUMERIC
ON OR ORDER OUTER OVERLAPS
POSITION PRECISION PRIMARY PUBLIC
REFERENCES RIGHT
SELECT SESSION_USER SOME SUBSTRING
TABLE THEN TO TRANSACTION TRIM TRUE
UNION UNIQUE USER
VARCHAR
WHEN WHERE
下面是 Postgres 的保留关键字,同时也是 SQL92 或SQL3 的保留字:
ADD ALTER AND AS
BEGIN BY
CASCADE CLOSE COMMIT CREATE CURSOR
DECLARE DEFAULT DELETE DESC DISTINCT DROP
EXECUTE EXISTS EXTRACT
FETCH FLOAT FOR FROM FULL
GRANT
HAVING
IN INNER INSERT INTERVAL INTO IS
JOIN
LEADING LEFT LIKE LOCAL
NAMES NATIONAL NATURAL NCHAR NO NOT NULL
ON OR OUTER
PARTIAL PRIMARY PRIVILEGES PROCEDURE PUBLIC
REFERENCES REVOKE RIGHT ROLLBACK
SELECT SET SUBSTRING
TO TRAILING TRIM
UNION UNIQUE UPDATE USING
VALUES VARCHAR VARYING VIEW
WHERE WITH WORK
下面的是 SQL92 的保留字但不是 Postgres 的保留字,不过如果你把它们做函数名用,就总是会被转换成函数 CHAR_LENGTH:
CHARACTER_LENGTH
下面的是 SQL92 或 SQL3 的保留字但不是 Postgres 的保留字,不过如果你把它们用做类型名,就总是会转换成一个可替换的本机类型:
BOOLEAN DOUBLE FLOAT INT INTEGER INTERVAL REAL SMALLINT
下面的不是任何类型的关键字,不过如果你在一个类型名的环境中使用它们,它们就会转换成一个Postgres 本机类型,而在一个函数名的环境中使用它们,它们会被转换成一个本机函数:
DATETIME TIMESPAN
(相应地转换成 TIMESTAMP 和 INTERVAL)。这个特性用于帮助向 v7.0 转换,将在下一个完全发布版本(估计是 v7.1)删除。
下面的要么是 SQL92 要么是 SQL3 的保留字,但不是 Postgres 的保留字。这些字在写作本章(v7.0)的时候在 Postgres 里面没有使用限制,但是未来有可能成为保留字:
注意: 这里面有些关键字代表 SQL92 里的函数。这些函数在 Postgres 里面有定义。但是分析器不认为(函数)名字是关键字,因而它们可以用在其他环境里。
ALLOCATE ARE ASSERTION AT AUTHORIZATION AVG
BIT_LENGTH
CASCADED CATALOG CHAR_LENGTH CHARACTER_LENGTH COLLATION
CONNECT CONNECTION CONTINUE CONVERT CORRESPONDING COUNT
CURRENT_SESSION
DATE DEALLOCATE DEC DESCRIBE DEscriptOR
DIAGNOSTICS DISCONNECT DOMAIN
ESCAPE EXCEPT EXCEPTION EXEC EXTERNAL
FIRST FOUND
GET GO GOTO
IDENTITY INDICATOR INPUT INTERSECT
LAST LOWER
MAX MIN MODULE
OCTET_LENGTH OPEN OUTPUT OVERLAPS
PREPARE PRESERVE
ROWS
SCHEMA SECTION SESSION SIZE SOME
SQL SQLCODE SQLERROR SQLSTATE SUM SYSTEM_USER
TEMPORARY TRANSLATE TRANSLATION
UNKNOWN UPPER USAGE
VALUE
WHENEVER WRITE
非保留关键字
SQL92 和 SQL3 有一些 非保留关键字,它们在语言里有受约束的含义但是允许被当作标识使用。Postgres 有另外一些关键字允许类似的非限制性使用。具体来说,这些关键字允许当做字段或者表名来用。
下面是 Postgres 非保留关键字,它们既不是 SQL92 也不是 SQL3 的非保留关键字:
ACCESS AFTER AGGREGATE
BACKWARD BEFORE
CACHE COMMENT CREATEDB CREATEUSER CYCLE
DATABASE DELIMITERS
EACH ENCODING EXCLUSIVE
FORCE FORWARD FUNCTION
HANDLER
INCREMENT INDEX INHERITS INSENSITIVE INSTEAD ISNULL
LANCOMPILER LOCATION
MAXVALUE MINVALUE MODE
内容
关键字
注释
名称
常量
域和列(字段)
操作符
表达式
描述通用的 SQL 语法。
SQL 操作数据集。该语言由多种多样的 关键字 组成。它允许使用算术和过程表达式。我们将在本章讨论这个问题;随后的章节将包括一些关于数据类型,函数和操作符的细节。
关键字
SQL92 为这门语言定义了有明确意义的 关键字 。有些关键字是 保留字,表明它们只限于出现在某些特定的环境里。其他关键字是 非限制字,表明它们在某些特定的环境里有特殊含义,否则没有什么限制。
Postgres 实现了一个扩展了的 SQL92 和 SQL3 语言的子集。部分由于 Postgres 的可扩展性,一些语言元素在 Postgres 里的实现不象在语言标准里期望的那样严格(限制)。
关于SQL92 和 SQL3 关键字的信息源自 Date and Darwen, 1997。
保留关键字
SQL92 和 SQL3 有一些 保留关键字 除了在 SQL 语句里面用做基本元素外不允许用做标识或者任何其它用途。Postgres 有另外一些关键字也有类似约束。具体来说,这些关键字不允许用做字段或者表名称,尽管有时候它们可以用做字段标签(例如,在AS子句里)。
小技巧: 如果用双引号包围(“象这样!”),任何字串都可以声明为标识。这时我们要仔细一些,因为这样做一个标识将是大小写敏感的并且将保有嵌入的空白或其他特殊字符。
下面是 Postgres 特有的保留关键字,它们既不是 SQL92 也不是 SQL3 保留字。这些字允许做为字段标记出现,但不允许用作标识:
ABORT ANALYZE
BINARY
CLUSTER CONSTRAINT COPY
DO
EXPLAIN EXTEND
LISTEN LOAD LOCK
MOVE
NEW NONE NOTIFY
OFFSET
RESET
SETOF SHOW
UNLISTEN UNTIL
VACUUM VERBOSE
下面是 Postgres 的保留关键字,同时也是 SQL92 或SQL3 的保留字。这些字允许做为字段标记出现,但不允许用作标识:
ALL ANY ASC BETWEEN BIT BOTH
CASE CAST CHAR CHARACTER CHECK COALESCE COLLATE COLUMN
CONSTRAINT CROSS CURRENT CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER
DEC DECIMAL DEFAULT DESC DISTINCT
ELSE END EXCEPT EXISTS EXTRACT
FALSE FLOAT FOR FOREIGN FROM FULL
GLOBAL GROUP
HAVING
IN INNER INTERSECT INTO IS
JOIN
LEADING LEFT LIKE LOCAL
NATURAL NCHAR NOT NULL NULLIF NUMERIC
ON OR ORDER OUTER OVERLAPS
POSITION PRECISION PRIMARY PUBLIC
REFERENCES RIGHT
SELECT SESSION_USER SOME SUBSTRING
TABLE THEN TO TRANSACTION TRIM TRUE
UNION UNIQUE USER
VARCHAR
WHEN WHERE
下面是 Postgres 的保留关键字,同时也是 SQL92 或SQL3 的保留字:
ADD ALTER AND AS
BEGIN BY
CASCADE CLOSE COMMIT CREATE CURSOR
DECLARE DEFAULT DELETE DESC DISTINCT DROP
EXECUTE EXISTS EXTRACT
FETCH FLOAT FOR FROM FULL
GRANT
HAVING
IN INNER INSERT INTERVAL INTO IS
JOIN
LEADING LEFT LIKE LOCAL
NAMES NATIONAL NATURAL NCHAR NO NOT NULL
ON OR OUTER
PARTIAL PRIMARY PRIVILEGES PROCEDURE PUBLIC
REFERENCES REVOKE RIGHT ROLLBACK
SELECT SET SUBSTRING
TO TRAILING TRIM
UNION UNIQUE UPDATE USING
VALUES VARCHAR VARYING VIEW
WHERE WITH WORK
下面的是 SQL92 的保留字但不是 Postgres 的保留字,不过如果你把它们做函数名用,就总是会被转换成函数 CHAR_LENGTH:
CHARACTER_LENGTH
下面的是 SQL92 或 SQL3 的保留字但不是 Postgres 的保留字,不过如果你把它们用做类型名,就总是会转换成一个可替换的本机类型:
BOOLEAN DOUBLE FLOAT INT INTEGER INTERVAL REAL SMALLINT
下面的不是任何类型的关键字,不过如果你在一个类型名的环境中使用它们,它们就会转换成一个Postgres 本机类型,而在一个函数名的环境中使用它们,它们会被转换成一个本机函数:
DATETIME TIMESPAN
(相应地转换成 TIMESTAMP 和 INTERVAL)。这个特性用于帮助向 v7.0 转换,将在下一个完全发布版本(估计是 v7.1)删除。
下面的要么是 SQL92 要么是 SQL3 的保留字,但不是 Postgres 的保留字。这些字在写作本章(v7.0)的时候在 Postgres 里面没有使用限制,但是未来有可能成为保留字:
注意: 这里面有些关键字代表 SQL92 里的函数。这些函数在 Postgres 里面有定义。但是分析器不认为(函数)名字是关键字,因而它们可以用在其他环境里。
ALLOCATE ARE ASSERTION AT AUTHORIZATION AVG
BIT_LENGTH
CASCADED CATALOG CHAR_LENGTH CHARACTER_LENGTH COLLATION
CONNECT CONNECTION CONTINUE CONVERT CORRESPONDING COUNT
CURRENT_SESSION
DATE DEALLOCATE DEC DESCRIBE DEscriptOR
DIAGNOSTICS DISCONNECT DOMAIN
ESCAPE EXCEPT EXCEPTION EXEC EXTERNAL
FIRST FOUND
GET GO GOTO
IDENTITY INDICATOR INPUT INTERSECT
LAST LOWER
MAX MIN MODULE
OCTET_LENGTH OPEN OUTPUT OVERLAPS
PREPARE PRESERVE
ROWS
SCHEMA SECTION SESSION SIZE SOME
SQL SQLCODE SQLERROR SQLSTATE SUM SYSTEM_USER
TEMPORARY TRANSLATE TRANSLATION
UNKNOWN UPPER USAGE
VALUE
WHENEVER WRITE
非保留关键字
SQL92 和 SQL3 有一些 非保留关键字,它们在语言里有受约束的含义但是允许被当作标识使用。Postgres 有另外一些关键字允许类似的非限制性使用。具体来说,这些关键字允许当做字段或者表名来用。
下面是 Postgres 非保留关键字,它们既不是 SQL92 也不是 SQL3 的非保留关键字:
ACCESS AFTER AGGREGATE
BACKWARD BEFORE
CACHE COMMENT CREATEDB CREATEUSER CYCLE
DATABASE DELIMITERS
EACH ENCODING EXCLUSIVE
FORCE FORWARD FUNCTION
HANDLER
INCREMENT INDEX INHERITS INSENSITIVE INSTEAD ISNULL
LANCOMPILER LOCATION
MAXVALUE MINVALUE MODE

