↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.0 / 6.5
历史版本PostgreSQL 7.0 已于 2005 年 5 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

第 2 章 SQL 语法

摘要

本章给出 SQL 的一般语法描述。

SQL 操作数据的集合。该语言由各种关键词 组成。其中允许算术和过程表达式。我们将在本章中讨论这些主题;后续章节将包括 数据类型、函数和操作符的细节。

2.1. 关键词

SQL92 为语言定义了具有特定含义的关键词。 某些关键词是保留的,这表示它们被限制只能出现在特定的上下文中。 另一些关键词不受限制,这表示它们在某些上下文中具有特定含义, 但在其他方面不受约束。

Postgres 实现了 SQL92 和 SQL3 语言的一个扩展子集。由于 Postgres 的可扩展性特性,本实现中的某些语言元素 没有语言标准所要求的那样受限。

关于 SQL92 和 SQL3 关键词的信息 摘译自 Date and Darwen, 1997 。

2.1.1. 保留关键词

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
     

2.1.2. 非保留关键词

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 的非保留关键词,它们是 SQL92 或 SQL3 的保留关键词:

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
     

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。