# SQL:1999

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.

## Resumen

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:
* SQL/Framework ISO/IEC 9075-1:1999
* SQL/Foundation ISO/IEC 9075-2:1999
* SQL/CLI ISO/IEC 9075-3:1999
* SQL/PSM ISO/IEC 9075-4:1999
* SQL/Bindings ISO/IEC 9075-5:1999
Tres partes más, también consideradas parte de SQL:1999 fueron publicadas posteriormente:
* 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

## Nuevas características
### Tipos de datos
#### Tipos de datos booleanos

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.

#### Distintos tipos de poder definidos por el usuario

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

#### Tipos estructurados definidos por el usuario

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.

### Expresiones de tablas comunes y consultas recursivas

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.

### Algunas capacidades de OLAP

GROUP BY fue extendido con ROLLUP, CUBE, y GROUPING SETS.

### Control de acceso basado en funciones

Suporte completo para control de acceso basado en funciones a través de CREATE ROLE.

### Palabras claves

SQL:1999 introdujo la palabra clave UNNEST.