BNF Grammar for ISO/IEC 9075:1992 - Database Language SQL (SQL-92)
==================================================================
@(#)$Id: sql-92.bnf,v 2.4 2008/02/16 23:55:41 jleffler Exp $
--p
Using Appendix G of "Understanding the New SQL: A Complete Guide" by J
Melton and A R Simon (Morgan Kaufmann, 1993, ISBN 0-55860-245-3) as the
source of the syntax, here is (most of) the BNF syntax for SQL-92. The
missing parts are the Cobol, Fortran, MUMPS, Pascal and PL/I variable
definition rules.
--/p
--p
The plain text version of this grammar is
--## sql-92.bnf .
--/p
--hr
--h2 Key SQL Statements and Fragments
--/h2
--bl
--li ALLOCATE CURSOR
--li ALTER DOMAIN
--li ALTER TABLE
--li CLOSE cursor
--li Column definition
--li COMMIT WORK
--li CONNECT
--li CREATE ASSERTION
--li CREATE CHARACTER SET
--li CREATE COLLATION
--li CREATE DOMAIN
--li CREATE SCHEMA
--li CREATE TABLE
--li CREATE TRANSLATION
--li CREATE VIEW
--li Data type
--li DEALLOCATE PREPARE
--li DECLARE cursor
--li DECLARE LOCAL TEMPORARY TABLE
--li DELETE
--li DESCRIBE
--li DESCRIPTOR statements
--li DISCONNECT
--li EXECUTE
--li EXECUTE IMMEDIATE
--li FETCH cursor
--li GET DIAGNOSTICS
--li GRANT
--li INSERT
--li Literal
--li MODULE
--li OPEN cursor
--li PREPARE
--li Preparable statement
--li REVOKE
--li ROLLBACK WORK
--li Search condition
--li SELECT
--li SET CATALOG
--li SET CONNECTION
--li SET CONSTRAINTS
--li SET NAMES
--li SET SCHEMA
--li SET SESSION AUTHORIZATION
--li SET TIME ZONE
--li SET TRANSACTION
--li UPDATE
--li Value expression
--/bl
--hr
--h2 Basic Definitions of Characters Used, Tokens, Symbols, Etc.
--/h2
::=
| ::=
|
| ::=
| ::=
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z
::=
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z
::=
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
::=
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ::= !! space character in character set in use
::= "
::= %
::= &
::= '
::= (
::= )
::= *
::= +
::= ,
::= -
::= .
::= /
::= :
::= ;
::= <
::= =
::= >
::= ?
::= _
::= |
::= | ::= [
::= ]
::=
| ::=
|
|
|
|
| ::= ::= [ { | } ... ]
::= !! See the Syntax rules
::= | ::= | ::=
ABSOLUTE | ACTION | ADD | ALL | ALLOCATE | ALTER | AND | ANY | ARE
| AS | ASC | ASSERTION | AT | AUTHORIZATION | AVG
| BEGIN | BETWEEN | BIT | BIT_LENGTH | BOTH | BY
| CASCADE | CASCADED | CASE | CAST | CATALOG | CHAR | CHARACTER | CHARACTER_LENGTH
| CHAR_LENGTH | CHECK | CLOSE | COALESCE | COLLATE | COLLATION | COLUMN | COMMIT
| CONNECT | CONNECTION | CONSTRAINT | CONSTRAINTS | CONTINUE | CONVERT | CORRESPONDING
| CREATE | CROSS | CURRENT | CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP | CURRENT_USER | CURSOR
| DATE | DAY | DEALLOCATE | DEC | DECIMAL | DECLARE | DEFAULT
| DEFERRABLE | DEFERRED | DELETE | DESC | DESCRIBE | DESCRIPTOR | DIAGNOSTICS
| DISCONNECT | DISTINCT | DOMAIN | DOUBLE | DROP
| ELSE | END | END-EXEC | ESCAPE | EXCEPT | EXCEPTION | EXEC | EXECUTE | EXISTS | EXTERNAL | EXTRACT
| FALSE | FETCH | FIRST | FLOAT | FOR | FOREIGN | FOUND | FROM | FULL
| GET | GLOBAL | GO | GOTO | GRANT | GROUP
| HAVING | HOUR
| IDENTITY | IMMEDIATE | IN | INDICATOR | INITIALLY | INNER | INPUT | INSENSITIVE
| INSERT | INT | INTEGER | INTERSECT | INTERVAL | INTO | IS | ISOLATION
| JOIN
| KEY
| LANGUAGE | LAST | LEADING | LEFT | LEVEL | LIKE | LOCAL | LOWER
| MATCH | MAX | MIN | MINUTE | MODULE | MONTH
| NAMES | NATIONAL | NATURAL | NCHAR | NEXT | NO | NOT | NULL | NULLIF | NUMERIC
| OCTET_LENGTH | OF | ON | ONLY | OPEN | OPTION | OR | ORDER | OUTER | OUTPUT | OVERLAPS
| PAD | PARTIAL | POSITION | PRECISION | PREPARE | PRESERVE | PRIMARY | PRIOR | PRIVILEGES | PROCEDURE | PUBLIC
| READ | REAL | REFERENCES | RELATIVE | RESTRICT | REVOKE | RIGHT | ROLLBACK | ROWS
| SCHEMA | SCROLL | SECOND | SECTION | SELECT | SESSION | SESSION_USER | SET
| SIZE | SMALLINT | SOME | SPACE | SQL | SQLCODE | SQLERROR | SQLSTATE | SUBSTRING | SUM | SYSTEM_USER
| TABLE | TEMPORARY | THEN | TIME | TIMESTAMP | TIMEZONE_HOUR | TIMEZONE_MINUTE
| TO | TRAILING | TRANSACTION | TRANSLATE | TRANSLATION | TRIM | TRUE
| UNION | UNIQUE | UNKNOWN | UPDATE | UPPER | USAGE | USER | USING
| VALUE | VALUES | VARCHAR | VARYING | VIEW
| WHEN | WHENEVER | WHERE | WITH | WORK | WRITE
| YEAR
| ZONE
::=
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 | COMMITTED | CONDITION_NUMBER | CONNECTION_NAME
| CONSTRAINT_CATALOG | CONSTRAINT_NAME | CONSTRAINT_SCHEMA | CURSOR_NAME
| DATA | DATETIME_INTERVAL_CODE | DATETIME_INTERVAL_PRECISION | DYNAMIC_FUNCTION
| FORTRAN
| LENGTH
| MESSAGE_LENGTH | MESSAGE_OCTET_LENGTH | MESSAGE_TEXT | MORE | MUMPS
| NAME | NULLABLE | NUMBER
| PASCAL | PLI
| REPEATABLE | RETURNED_LENGTH | RETURNED_OCTET_LENGTH | RETURNED_SQLSTATE | ROW_COUNT
| SCALE | SCHEMA_NAME | SERIALIZABLE | SERVER_NAME | SUBCLASS_ORIGIN
| TABLE_NAME | TYPE
| UNCOMMITTED | UNNAMED
--hr
--h2 Literal Numbers, Strings, Dates and Times
--/h2
::=
| ::=
[ [ ] ]
| ::= ...
::=
E ::= ::= ::= [ ] ::= | ::=
N [ ... ] [ { ... [ ... ] }... ]
::= | ::= !! See the Syntax rules
::= ::= { | | }...
::= [ ... ] ::= [...]
::= | ::= !! implementation defined end of line indicator
::=
B [ ... ] [ { ... [ ... ] }... ]
::= 0 | 1
::=
X [ ... ] [ { ... [ ... ] }... ]
::= | A | B | C | D | E | F | a | b | c | d | e | f
::=
|
|