我有.net写的,支持子查询.java写的还没有.

解决方案 »

  1.   

    http://www.contrib.andrew.cmu.edu/~shadow/sql/sql2bnf.aug92.txt
    --------------------------------------------------------------This file contains a depth-first tree traversal of the BNF
    for the  language done at about 27-AUG-1992 11:03:41.64.
    The specific version of the BNF included here is:  ANSI-only, SQL2-only.
    <SQL terminal character> ::=
          <SQL language character>
        | <SQL embedded language character><SQL language character> ::=
          <simple Latin letter>
        | <digit>
        | <SQL special character><simple Latin letter> ::=
          <simple Latin upper case letter>
        | <simple Latin lower case letter><simple Latin upper case letter> ::=
              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<simple Latin lower case letter> ::=
              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<digit> ::=
        0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9<SQL special character> ::=
          <space>
        | <double quote>
        | <percent>
        | <ampersand>
        | <quote>
        | <left paren>
        | <right paren>
        | <asterisk>
        | <plus sign>
        | <comma>
        | <minus sign>
        | <period>
        | <solidus>
        | <colon>
        | <semicolon>
        | <less than operator>
        | <equals operator>
        | <greater than operator>
        | <question >
        | <underscore>
        | <vertical bar><space> ::= !! <EMPHASIS>(space character in character set in use)<double quote> ::= "<percent> ::= %<ampersand> ::= &<quote> ::= '<left paren> ::= (<right paren> ::= )<asterisk> ::= *<plus sign> ::= +<comma> ::= ,<minus sign> ::= -<period> ::= .<solidus> ::= /<colon> ::= :<semicolon> ::= ;<less than operator> ::= <<equals operator> ::= =
      

  2.   

    <greater than operator> ::= ><question > ::= ?<underscore> ::= _<vertical bar> ::= |<SQL embedded language character> ::=
          <left bracket>
        | <right bracket><left bracket> ::= [<right bracket> ::= ]<token> ::=
          <nondelimiter token>
        | <delimiter token><nondelimiter token> ::=
          <regular identifier>
        | <key word>
        | <unsigned numeric literal>
        | <national character string literal>
        | <bit string literal>
        | <hex string literal><regular identifier> ::= <identifier body><identifier body> ::=
        <identifier start> [ { <underscore> | <identifier part> }... ]<identifier start> ::= <EMPHASIS>(!! See the Syntax Rules)<identifier part> ::=
          <identifier start>
        | <digit><key word> ::=
          <reserved word>
        | <non-reserved word><reserved word> ::=
          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 | CHAR_LENGTH
        | CHARACTER_LENGTH | CHECK | CLOSE | COALESCE
        | COLLATE | COLLATION
        | COLUMN | COMMIT
        | CONNECT
        | CONNECTION | CONSTRAINT
        | CONSTRAINTS | CONTINUE
        | CONVERT | CORRESPONDING | COUNT | 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<non-reserved word> ::=
        
          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<unsigned numeric literal> ::=
          <exact numeric literal>
        | <approximate numeric literal><exact numeric literal> ::=
          <unsigned integer> [ <period> [ <unsigned integer> ] ]
        | <period> <unsigned integer><unsigned integer> ::= <digit>...<approximate numeric literal> ::= <mantissa> E <exponent><mantissa> ::= <exact numeric literal><exponent> ::= <signed integer><signed integer> ::= [ <sign> ] <unsigned integer><sign> ::= <plus sign> | <minus sign><national character string literal> ::=
        N <quote> [ <character representation>... ] <quote>
          [ { <separator>... <quote> [ <character representation>... ] <quote> }... ]<character representation> ::=
          <nonquote character>
        | <quote symbol><nonquote character> ::= !! <EMPHASIS>(See the Syntax Rules.)<quote symbol> ::= <quote><quote><separator> ::= { <comment> | <space> | <newline> }...<comment> ::=
        <comment introducer> [ <comment character>... ] <newline><comment introducer> ::= <minus sign><minus sign>[<minus sign>...]<comment character> ::=
          <nonquote character>
        | <quote><newline> ::= !! <EMPHASIS>(implementation-defined end-of-line indicator)<bit string literal> ::=
        B <quote> [ <bit>... ] <quote>
          [ { <separator>... <quote> [ <bit>... ] <quote> }... ]<bit> ::= 0 | 1<hex string literal> ::=
        X <quote> [ <hexit>... ] <quote>
          [ { <separator>... <quote> [ <hexit>... ] <quote> }... ]<hexit> ::= <digit> | A | B | C | D | E | F | a | b | c | d | e | f<delimiter token> ::=
          <character string literal>
        | <date string>
        | <time string>
        | <timestamp string>
        | <interval string>
        | <delimited identifier>
        | <SQL special character>
        | <not equals operator>
        | <greater than or equals operator>
        | <less than or equals operator>
        | <concatenation operator>
        | <double period>
        | <left bracket>
        | <right bracket><character string literal> ::=
        [ <introducer><character set specification> ]
        <quote> [ <character representation>... ] <quote>
          [ { <separator>... <quote> [ <character representation>... ] <quote> }... ]<introducer> ::= <underscore><character set specification> ::=
          <standard character repertoire name>
        | <implementation-defined character repertoire name>
        | <user-defined character repertoire name>
        | <standard universal character form-of-use name>
        | <implementation-defined universal character form-of-use name>
      

  3.   


    <standard character repertoire name> ::= <character set name><character set name> ::= [ <schema name> <period> ]
          <SQL language identifier><schema name> ::=
        [ <catalog name> <period> ] <unqualified schema name><catalog name> ::= <identifier><identifier> ::=
        [ <introducer><character set specification> ] <actual identifier><actual identifier> ::=
          <regular identifier>
        | <delimited identifier><delimited identifier> ::=
        <double quote> <delimited identifier body> <double quote><delimited identifier body> ::= <delimited identifier part>...<delimited identifier part> ::=
          <nondoublequote character>
        | <doublequote symbol><nondoublequote character> ::= <EMPHASIS>(!! See the Syntax Rules)<doublequote symbol> ::= <double quote><double quote><unqualified schema name> ::= <identifier><SQL language identifier> ::=
        <SQL language identifier start>
           [ { <underscore> | <SQL language identifier part> }... ]<SQL language identifier start> ::= <simple Latin letter><SQL language identifier part> ::=
          <simple Latin letter>
        | <digit><implementation-defined character repertoire name> ::=
        <character set name><user-defined character repertoire name> ::= <character set name><standard universal character form-of-use name> ::=
        <character set name><implementation-defined universal character form-of-use name> ::=
        <character set name><date string> ::=
        <quote> <date value> <quote><date value> ::=
        <years value> <minus sign> <months value>
            <minus sign> <days value><years value> ::= <datetime value><datetime value> ::= <unsigned integer><months value> ::= <datetime value><days value> ::= <datetime value><time string> ::=
        <quote> <time value> [ <time zone interval> ] <quote><time value> ::=
        <hours value> <colon> <minutes value> <colon> <seconds value><hours value> ::= <datetime value><minutes value> ::= <datetime value><seconds value> ::=
          <seconds integer value> [ <period> [ <seconds fraction> ] ]<seconds integer value> ::= <unsigned integer><seconds fraction> ::= <unsigned integer><time zone interval> ::=
        <sign> <hours value> <colon> <minutes value><timestamp string> ::=
        <quote> <date value> <space> <time value>
            [ <time zone interval> ] <quote><interval string> ::=
        <quote> { <year-month literal> | <day-time literal> } <quote><year-month literal> ::=
          <years value>
        | [ <years value> <minus sign> ] <months value><day-time literal> ::=
          <day-time interval>
        | <time interval><day-time interval> ::=
        <days value>
          [ <space> <hours value> [ <colon> <minutes value>
            [ <colon> <seconds value> ] ] ]<time interval> ::=
          <hours value> [ <colon> <minutes value> [ <colon> <seconds value> ] ]
        | <minutes value> [ <colon> <seconds value> ]
        | <seconds value><not equals operator> ::= <><greater than or equals operator> ::= >=<less than or equals operator> ::= <=<concatenation operator> ::= ||<double period> ::= ..<module> ::=
        <module name clause>
        <language clause>
        <module authorization clause>
        [ <temporary table declaration>... ]
        <module contents>...<module name clause> ::=
        MODULE [ <module name> ]
          [ <module character set specification> ]<module name> ::= <identifier><module character set specification> ::=
        NAMES ARE <character set specification><language clause> ::=
        LANGUAGE <language name><language name> ::=
        ADA | C | COBOL | FORTRAN | MUMPS | PASCAL | PLI<module authorization clause> ::=
          SCHEMA <schema name>
        | AUTHORIZATION <module authorization identifier>
        | SCHEMA <schema name>
              AUTHORIZATION <module authorization identifier><module authorization identifier> ::=
        <authorization identifier><authorization identifier> ::= <identifier><temporary table declaration> ::=
        DECLARE LOCAL TEMPORARY TABLE
            <qualified local table name>
          <table element list>
          [ ON COMMIT { PRESERVE | DELETE } ROWS ]<qualified local table name> ::=
        MODULE <period> <local table name><local table name> ::= <qualified identifier><qualified identifier> ::= <identifier><table element list> ::=
          <left paren> <table element> [ { <comma> <table element> }... ] <right paren><table element> ::=
          <column definition>
        | <table constraint definition><column definition> ::=
        <column name> { <data type> | <domain name> }
        [ <default clause> ]
        [ <column constraint definition>... ]
        [ <collate clause> ]<column name> ::= <identifier><data type> ::=
          <character string type>
               [ CHARACTER SET <character set specification> ]
        | <national character string type>
        | <bit string type>
        | <numeric type>
        | <datetime type>
        | <interval type><character string type> ::=
          CHARACTER [ <left paren> <length> <right paren> ]
        | CHAR [ <left paren> <length> <right paren> ]
        | CHARACTER VARYING <left paren> <length> <right paren>
        | CHAR VARYING <left paren> <length> <right paren>
        | VARCHAR <left paren> <length> <right paren><length> ::= <unsigned integer><national character string type> ::=
          NATIONAL CHARACTER [ <left paren> <length> <right paren> ]
        | NATIONAL CHAR [ <left paren> <length> <right paren> ]
        | NCHAR [ <left paren> <length> <right paren> ]
        | NATIONAL CHARACTER VARYING <left paren> <length> <right paren>
        | NATIONAL CHAR VARYING <left paren> <length> <right paren>
        | NCHAR VARYING <left paren> <length> <right paren><bit string type> ::=
          BIT [ <left paren> <length> <right paren> ]
        | BIT VARYING <left paren> <length> <right paren><numeric type> ::=
          <exact numeric type>
        | <approximate numeric type><exact numeric type> ::=
          NUMERIC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
        | DECIMAL [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
        | DEC [ <left paren> <precision> [ <comma> <scale> ] <right paren> ]
        | INTEGER
        | INT
        | SMALLINT<precision> ::= <unsigned integer><scale> ::= <unsigned integer><approximate numeric type> ::=
          FLOAT [ <left paren> <precision> <right paren> ]
        | REAL
        | DOUBLE PRECISION<datetime type> ::=
          DATE
        | TIME [ <left paren> <time precision> <right paren> ]
              [ WITH TIME ZONE ]
        | TIMESTAMP [ <left paren> <timestamp precision> <right paren> ]
              [ WITH TIME ZONE ]<time precision> ::= <time fractional seconds precision><time fractional seconds precision> ::= <unsigned integer><timestamp precision> ::= <time fractional seconds precision><interval type> ::= INTERVAL <interval qualifier><interval qualifier> ::=
          <start field> TO <end field>
        | <single datetime field><start field> ::=
        <non-second datetime field>
            [ <left paren> <interval leading field precision> <right paren> ]<non-second datetime field> ::= YEAR | MONTH | DAY | HOUR
        | MINUTE<interval leading field precision> ::= <unsigned integer><end field> ::=
          <non-second datetime field>
        | SECOND [ <left paren> <interval fractional seconds precision> <right paren> ]<interval fractional