SQL:1999 (also called SQL 3) was the fourth revision of the SQL database query language. It introduced a large number of new features, many of which required clarifications in the subsequent SQL:2003. The latest revision of the standard is SQL:2011.
The ISO standard documents were published between 1999 and 2002 in several installments, the first one consisting of multiple parts. Unlike previous editions, the standard's name used a colon instead of a hyphen for consistency with the names of other ISO standards. The first installment of SQL:1999 had five parts:
- SQL/Framework ISO/IEC 9075-1:1999
- SQL/Foundation ISO/IEC 9075-2:1999
- SQL/CLI : an updated definition of the extension Call Level Interface, originally published in 1995, also known as CLI-95 ISO/IEC 9075-3:1999
- SQL/PSM : an updated definition of the extension Persistent Stored Modules, originally published in 1996, also known as PSM-96 ISO/IEC 9075-4:1999
- SQL/Bindings ISO/IEC 9075-5:1999
Three more parts, also considered part of SQL:1999 were published subsequently:
- SQL/MED Management of External Data (SQL:1999 part 9) ISO/IEC 9075-9:2001
- SQL/OLB Object Language Bindings (SQL:1999 part 10) ISO/IEC 9075-10:2000
- SQL/JRT SQL Routines and Types using the Java Programming Language (SQL:1999 part 13) ISO/IEC 9075-13:2002
|This section requires expansion. (November 2012)|
Boolean data types
The SQL:1999 standard calls for a Boolean type, but many commercial SQL Servers (Microsoft SQL Server 2005, Oracle 9i, IBM DB2) do not support it as a column type, variable type or allow it in the results set. MySQL interprets "BOOLEAN" as a synonym for TINYINT (8-bit signed integer).
Distinct user-defined types of power
Sometimes called just distinct types, these were introduced as an optional feature (S011) to allow existing atomic types to be extended with a distinctive meaning to create a new type and thereby enabling the type checking mechanism to detect some logical errors, e.g. accidentally adding an age to a salary. For example:
CREATE TYPE age AS INTEGER FINAL; CREATE TYPE salary AS INTEGER FINAL;
creates two different and incompatible types. The SQL distinct types use name equivalence not structural equivalence like typedefs in C. It's still possible to perform compatible operations on (columns or data) of distinct types by using an explicit type
Structured user-defined types
Common table expressions and recursive queries
Some OLAP capabilities
GROUP BY was extended with ROLLUP, CUBE, and GROUPING SETS.
Role-based access control
Full support for RBAC via CREATE ROLE.
- ISO/IEC 9075-2:1999 section 4.6 Boolean types
- "MySQL :: MySQL 5.0 Reference Manual :: 11.4 Using Data Types from Other Database Engines". Dev.mysql.com. 2010-01-09. Retrieved 2014-01-30.
- "IBM Information Management Software for z/OS Solutions Information Center". Publib.boulder.ibm.com. Retrieved 2014-01-30.
- "Oracle Compliance To Core SQL:2003". Docs.oracle.com. Retrieved 2014-01-30.
- Jim Melton; Alan R. Simon (2002). SQL:1999: Understanding Relational Language Components. Morgan Kaufmann. ISBN 978-1-55860-456-8.
- Jim Melton (2003). Advanced SQL, 1999: Understanding Object-Relational and Other Advanced Features. Morgan Kaufmann. ISBN 978-1-55860-677-7.