SQL:1999

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

SQL:1999 (also called SQL 3) was the fourth revision of the SQL database query language. It introduced many new features, many of which required clarifications in the subsequent SQL:2003. In the meanwhile[clarification needed] SQL:1999 is deprecated.

Summary

[edit | edit source]

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:

Three more parts, also considered part of SQL:1999 were published subsequently:

New features

[edit | edit source]

Data types

[edit | edit source]

Boolean data types

[edit | edit source]

The SQL:1999 standard calls for a Boolean type,.[1] IBM Db2 supports boolean values since around 11.1.[2] Microsoft SQL Server supports storage for booleans using "BIT" data type[citation needed]. MySQL interprets "BOOL" and "BOOLEAN" as a mapping for its native TINYINT(1) type.[3] PostgreSQL provides a standard conforming Boolean type.[4] Oracle Database has proper boolean since Release 23.[5]

Distinct user-defined types of power

[edit | edit source]

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 CAST.

Few SQL systems support these. IBM Db2 is one those supporting them.[6] Oracle database did not support them as of 2012, recommending instead to emulate them by a one-place structured type.[7]

Structured user-defined types

[edit | edit source]

These are the backbone of the object–relational database extension in SQL:1999. They are analogous to classes in objected-oriented programming languages. SQL:1999 allows only single inheritance.

Common table expressions and recursive queries

[edit | edit source]

SQL:1999 added a WITH [RECURSIVE] construct allowing recursive queries, like transitive closure, to be specified in the query language itself; see common table expressions.

Some OLAP capabilities

[edit | edit source]

GROUP BY was extended with ROLLUP, CUBE, and GROUPING SETS.

Role-based access control

[edit | edit source]

Full support for RBAC via CREATE ROLE.

Keywords

[edit | edit source]

SQL:1999 introduced the UNNEST keyword.[8]

References

[edit | edit source]
  1. ^ ISO/IEC 9075-2:1999 Archived 2016-12-24 at the Wayback Machine section 4.6 Boolean types
  2. ^ https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.wn.doc/doc/c0061179.html#c0061179__FP1[permanent dead link]
  3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  8. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).

Further reading

[edit | edit source]
  • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).