Appendix C. SQL99 Feature List

Table of Contents
C.1. Supported Features
C.2. Unsupported Features

SQL92 defined three feature sets for compliance: basic, intermediate, and advanced. Most database products claiming SQL standards compliance were compliant at only the basic level, since the entire set of intermediate and advanced features was either too voluminous or in conflict with legacy behaviors.

SQL99 defines a large set of individual features rather than the ineffectively broad three levels found in SQL92. We provide a list of supported features, followed by a list of the features defined in SQL99 which are not yet supported in PostgreSQL.

C.1. Supported Features

IdentifierDescriptionComment
E011Numeric data types 
E011-01INTEGER and SMALLINT data types 
E011-02REAL, DOUBLE PRECISON, and FLOAT data types 
E011-03DECIMAL and NUMERIC data types 
E011-04Arithmetic operators 
E011-05Numeric comparison 
E011-06Implicit casting among the numeric data types 
E021Character data types 
E021-01CHARACTER data type 
E021-02CHARACTER VARYING data type 
E021-03Character literals 
E021-04CHARACTER_LENGTH function 
E021-05OCTET_LENGTH function 
E021-06SUBSTRING function 
E021-07Character concatenation 
E021-08UPPER and LOWER functions 
E021-09TRIM function 
E021-10Implicit casting among the character data types 
E021-11POSITION function 
E011-12Character comparison 
E031Identifiers 
E031-01Delimited identifiers 
E031-02Lower case identifiers 
E031-03Trailing underscore 
E051Basic query specification 
E051-01SELECT DISTINCT 
E051-02GROUP BY clause 
E051-04GROUP BY can contain columns not in <select list> 
E051-05Select list items can be renamed 
E051-06HAVING clause 
E051-07Qualified * in select list 
E051-08Correlation names in the FROM clause 
E051-09Rename columns in the FROM clause 
E061Basic predicates and search conditions 
E061-01Comparison predicate 
E061-02BETWEEN predicate 
E061-03IN predicate with list of values 
E061-04LIKE predicate 
E061-05LIKE predicate ESCAPE clause 
E061-06NULL predicate 
E061-07Quantified comparison predicate 
E061-08EXISTS predicate 
E061-09Subqueries in comparison predicate 
E061-11Subqueries in IN predicate 
E061-12Subqueries in quantified comparison predicate 
E061-13Correlated subqueries 
E061-14Search condition 
E071Basic query expressions 
E071-01UNION DISTINCT table operator 
E071-02UNION ALL table operator 
E071-03EXCEPT DISTINCT table operator 
E071-05Columns combined via table operators need not have exactly the same data type 
E071-06Table operators in subqueries 
E081Basic Privileges 
E081-01SELECT privilege 
E081-02DELETE privilege 
E081-03INSERT privilege at the table level 
E081-04UPDATE privilege at the table level 
E081-06REFERENCES privilege at the table level 
E081-08WITH GRANT OPTION 
E091Set functions 
E091-01AVG 
E091-02COUNT 
E091-03MAX 
E091-04MIN 
E091-05SUM 
E091-06ALL quantifier 
E091-07DISTINCT quantifier 
E101Basic data manipulation 
E101-01INSERT statement 
E101-03Searched UPDATE statement 
E101-04Searched DELETE statement 
E111Single row SELECT statement 
E121Basic cursor support 
E121-01DECLARE CURSOR 
E121-02ORDER BY columns need not be in select list 
E121-03Value expressions in ORDER BY clause 
E121-04OPEN statement(cursor)
E121-06Positioned UPDATE statement(cursor)
E121-07Positioned DELETE statement(cursor)
E121-08CLOSE statement(cursor)
E121-10FETCH statement implicit NEXT 
E131Null value support (nulls in lieu of values) 
E141Basic integrity constraints 
E141-01NOT NULL constraints 
E141-02UNIQUE constraints of NOT NULL columns 
E141-03PRIMARY KEY constraints 
E141-04Basic FOREIGN KEY constraint with the NO ACTION default for both referential delete action and referential update action 
E141-06CHECK constraints 
E141-07Column defaults 
E141-08NOT NULL inferred on PRIMARY KEY 
E141-10Names in a foreign key can be specified in any order 
E151Transaction support 
E151-01COMMIT statement 
E151-02ROLLBACK statement 
E152Basic SET TRANSACTION statement 
E152-01SET TRANSACTION statement: ISOLATION LEVEL SERIALIZABLE clause 
E153Updatable queries with subqueries 
E161SQL comments using leading double minus 
F031Basic schema manipulation 
F031-01CREATE TABLE statement to create persistent base tables 
F031-02CREATE VIEW statement 
F031-03GRANT statement 
F031-04ALTER TABLE statement COLUMN clause 
F031-13DROP TABLE statement clause 
F031-16DROP VIEW statement RESTRICT clause 
F031-19REVOKE statement RESTRICT clause 
F041Basic joined table 
F041-01Inner join (but not necessarily the INNER keyword) 
F041-02INNER keyword 
F041-03LEFT OUTER JOIN 
F041-04RIGHT OUTER JOIN 
F041-05Outer joins can be nested 
F041-07The inner table in a left or right outer join can also be used in an inner join 
F041-08All comparison operators are supported (rather than just =) 
F051Basic date and time 
F051-01DATE data type (including support of DATE literal) 
F051-02TIME data type (including support of TIME literal) with fractional seconds precision of at least 0 
F051-03TIMESTAMP data type (including support of TIMESTAMP literal) with fractional seconds precision of at least 0 and 6 
F051-04Comparison predicate on DATE TIMESTAMP data types 
F051-05Explicit CAST between datetime types and character types 
F051-06CURRENT_DATE 
F051-07LOCALTIME 
F051-08LOCALTIMESTAMP 
F081UNION and EXCEPT in views 
F131Grouped operations 
F131-01WHERE, GROUP BY and HAVING clauses supported in queries with grouped views 
F131-02Multiple tables supported in queries with grouped views 
F131-03Set functions supported in queries with grouped views 
F131-04Subqueries with GROUP BY and HAVING clauses and grouped views 
F131-05Single row SELECT with GROUP BY and HAVING clauses and grouped views 
F181Multiple module supportAllow separate compilation modules in ecpg
F201CAST function 
F221Explicit defaults 
F261CASE expression 
F261-01Simple CASE 
F261-02Searched CASE 
F261-03NULLIF 
F261-04COALESCE 
F311Schema definition statement 
F311-01CREATE SCHEMA 
F311-02CREATE TABLE for persistent base tables 
F311-03CREATE VIEW 
F311-04CREATE VIEW: WITH CHECK OPTION 
F311-05GRANT statement 
F471Scalar subquery values 
F481Expanded NULL predicate 
S011Distinct data types 
T321Basic SQL-invoked routines 
T321-01User-defined functions with no overloading 
T321-03Function invocation 
T321-05RETURN statement 
F032CASCADE drop behavior 
F034Extended REVOKE statement 
F034-01REVOKE statement performed by other than the owner of a schema object 
F034-02REVOKE statement: GRANT OPTION FOR clause 
F034-03REVOKE statement to revoke a privilege that the grantee has WITH GRANT OPTION 
F052Intervals and datetime arithmetic 
F111Isolation levels other than SERIALIZABLE 
F111-02READ COMMITTED isolation level 
F171Multiple schemas per user 
F191Referential delete actions 
F222INSERT statement: DEFAULT VALUES clause 
F271Compound character literals 
F281LIKE enhancements 
F302INTERSECT table operator 
F302-01INTERSECT DISTINCT table operator 
F302-02INTERSECT ALL table operator 
F304EXCEPT ALL table operator 
F321User authorization 
F341Usage tables 
F361Subprogram support 
F381-01ALTER TABLE statement: ALTER COLUMN clause 
F381-02ALTER TABLE statement: ADD CONSTRAINT clause 
F381-03ALTER TABLE statement: DROP CONSTRAINT clause 
F391Long identifiers 
F401Extended joined table 
F401-01NATURAL JOIN 
F401-02FULL OUTER JOIN 
F401-03UNION JOIN 
F401-04CROSS JOIN 
F411Time zone specification 
F431Read-only scrollable cursors 
F431-01FETCH with explicit NEXT 
F431-02FETCH FIRST 
F431-03FETCH LAST 
F431-04FETCH PRIOR 
F431-05FETCH ABSOLUTE 
F431-06FETCH RELATIVE 
F461Named character sets 
F491Constraint management 
F511BIT data type 
F531Temporary tables 
F555Enhanced seconds precision 
F561Full value expressions 
F571Truth value tests 
F591Derived tables 
F611Indicator data types 
F641Row and table constructors 
F651Catalog name qualifiers 
F661Simple tables 
F701Referential update actions 
F741Referential MATCH types 
F761Session management 
F771Connection management 
F791Insensitive cursors 
F831Full cursor update 
F831-01Updatable scrollable cursors 
F831-02Updatable ordered cursors 
S051Create table of type 
S071SQL paths in function and type name resolution 
S091Basic array support 
S091-01Arrays of built-in data types 
S092Arrays of user-defined types 
S151Type predicateIS OF
S201SQL routines on arrays 
S201-01Array parameters 
S201-02Array as result type of functions 
S211User-defined cast functionsCREATE CAST(type AS type)
T031BOOLEAN data type 
T141SIMILAR predicate 
T151DISTINCT predicate 
T191Referential action RESTRICT 
T201Comparable data types for referential constraints 
T211Basic trigger capability 
T211-01Triggers activated on UPDATE, INSERT, or DELETE of one base table 
T211-02BEFORE triggers 
T211-03AFTER triggers 
T211-04FOR EACH ROW triggers 
T211-08Multiple triggers for the same the event are executed in the order in which they were created 
T212Enhanced trigger capability 
T231SENSITIVE cursors 
T241START TRANSACTION statement 
T251SET TRANSACTION statement: LOCAL option 
T312OVERLAY function 
T322Overloading of SQL-invoked functions and procedures 
T323Explicit security for external routines 
T351Bracketed SQL comments (/*...*/ comments) 
T401INSERT into a cursor 
T441ABS and MOD functions 
T461Symmetric BETWEEN predicate 
T501Enhanced EXISTS predicate 
T551Optional key words for default syntax 
T571Array-returning external SQL-invoked functions 
T581Regular expression substring function 
T591UNIQUE constraints of possibly null columns