SQL:1999 (también llamado SQL3) fue la cuarta revisión del estándar SQL. Introdujo un gran número de nuevas características, muchas de las cuales requirieron aclaraciones en el posterior SQL:2003. La última revisión del estándar es SQL:2016.
Este estándar describe, entre otras cosas, la gramática de SQL y el resultado que se produce tras procesar instrucciones en un lenguaje basado en SQL.
Los documentos de la norma ISO fueron publicados entre 1999 y 2002 en varias entregas, la primera consistió en múltiples partes. A diferencia de las ediciones anteriores, el nombre del estándar usaba dos puntos en lugar de un guion para la coherencia con los nombres de otros estándars ISO. La primera versión de SQL:1999 tenía cinco partes:
Tres partes más, también consideradas parte de SQL:1999 fueron publicadas posteriormente:
El estándar SQL:1999 llama a un tipo booleano, pero muchos servidores SQL comerciales (Oracle Database, IBM DB2) no lo admiten como un tipo válido de columna, un tipo de variable o para permitirlo en el conjunto de resultados. Microsoft SQL Server es uno de los pocos sistemas de bases de datos que soporta correctamente los valores de tipo booleano usando su tipo de datos "BIT". Cada 8 campos BIT ocupa un byte completo de espacio en el disco. MySQL interpreta "BOOLEAN" como sinónimo de TINYINT (entero con signo de 8 bits). PostgreSQL proporciona un tipo booleano de conformidad estándar.
A veces llamados "tipos distintos", estos se introdujeron como una característica opcional (S011) para permitir que los tipos atómicos existentes se ampliaran con un significado distintivo para crear un nuevo tipo y permitir así, al mecanismo de comprobación de tipos, detectar algunos errores lógicos, por ejemplo, agregando accidentalmente una edad a un salario. Otro ejemplo:
create type age as integer FINAL;
create type salary as integer FINAL;
crea dos tipos diferentes e incompatibles. Los tipos distintos de SQL utilizan equivalencias de nombres, no equivalencias estructurales como typedef en C. Todavía es posible realizar operaciones compatibles, en columnas o datos, de tipos distintos utilizando un tipo de datos explícito CAST
. Pocos sistemas SQL soportan esto. IBM DB2 es uno de los que los soporta, Oracle Database actualmente no los soporta recomendando, en su lugar, para emularlos con una sola estructura de datos.
Estos son la columna vertebral de la extensión mapeo objeto-relacional en SQL:1999. Son análogas a las clases en programación orientada a objetos. SQL:1999 permite solo herencia simple.
SQL:1999 agregó una construcción WITH [RECURSIVE] que permite que las consultas recursivas, como Clausura transitiva, se especifiquen en el propio lenguaje de consulta. Mediante expresiones regulares.
GROUP BY fue extendido con ROLLUP, CUBE, y GROUPING SETS.
Suporte completo para control de acceso basado en funciones a través de CREATE ROLE.
SQL:1999 introdujo la palabra clave UNNEST.