PostgreSQL
上一页   下一页

第二章. 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 的保留关键字,同时也是 SQL92SQL3 的保留字。这些字允许做为字段标记出现,但不允许用作标识:
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 的保留关键字,同时也是 SQL92SQL3 的保留字:
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
NOCREATEDB NOCREATEUSER NOTHING NOTIFY NOTNULL 
OIDS OPERATOR 
PASSWORD PROCEDURAL
RECIPE REINDEX RENAME RETURNS ROW RULE
SEQUENCE SERIAL SHARE START STATEMENT STDIN STDOUT 
TEMP TRUSTED 
UNLISTEN UNTIL 
VALID VERSION
下面是 Postgres 的非保留关键字,但却是 SQL92SQL3 的保留关键字:
ABSOLUTE ACTION
CONSTRAINTS
DAY DEFERRABLE DEFERRED 
HOUR
IMMEDIATE INITIALLY INSENSITIVE ISOLATION 
KEY 
LANGUAGE LEVEL 
MATCH MINUTE MONTH
NEXT 
OF ONLY OPTION 
PENDANT PRIOR PRIVILEGES 
READ RELATIVE RESTRICT 
SCROLL SECOND
TIME TIMESTAMP TIMEZONE_HOUR TIMEZONE_MINUTE TRIGGER 
YEAR
ZONE
下面的是 Postgres 的非保留关键字,同时也是 SQL92 或 SQL3的非保留关键字:
COMMITTED SERIALIZABLE TYPE
下面的要么是 SQL92 要么是 SQL3 的非保留关键字,但不是任何类型的 Postgres 的保留字:
ADA
C CATALOG_NAME CHARACTER_SET_CATALOG CHARACTER_SET_NAME 
 CHARACTER_SET_SCHEMA CLASS_ORIGIN COBOL COLLATION_CATALOG
 COLLATION_NAME COLLATION_SCHEMA COLUMN_NAME
 COMMAND_FUNCTION CONDITION_NUMBER
 CONNECTION_NAME CONSTRAINT_CATALOG CONSTRAINT_NAME
 CONSTRAINT_SCHEMA CURSOR_NAME
DATA DATE_TIME_INTERVAL_CODE DATE_TIME_INTERVAL_PRECISION
 DYNAMIC_FUNCTION
FORTRAN
LENGTH
MESSAGE_LENGTH MESSAGE_OCTET_LENGTH MORE MUMPS
NAME NULLABLE NUMBER
PAD PASCAL PLI
REPEATABLE RETURNED_LENGTH RETURNED_OCTET_LENGTH
 RETURNED_SQLSTATE ROW_COUNT
SCALE SCHEMA_NAME SERVER_NAME SPACE SUBCLASS_ORIGIN
TABLE_NAME
UNCOMMITTED UNNAMED

上一页 首页 下一页
版权和商标 开头 注释