Volver a la lista de artículos Artículos
Lectura de 13 minutos

La historia de las normas SQL

¿Ha cambiado el estándar SQL en sus más de 30 años de existencia? Por supuesto. Conozca el viaje desde SQL-86 hasta el SQL moderno, el lenguaje de datos estándar de hoy en día.

SQL fue creado a principios de los años 70 por IBM. En 1974, Donald Chamberlin y Raymond Boyce publicaron el artículo SEQUEL: A Structured English Query Language (Lenguaje de Consulta Estructurado en Inglés), que introdujo SQL al mundo. El artículo contenía la gramática BNF (una descripción técnica detallada de la sintaxis del lenguaje) para el lenguaje, que más tarde IBM consideró un error. La publicación de la gramática permitió a diferentes proveedores implementar SQL en sus propios motores de bases de datos. Sin embargo, había bastantes variaciones entre las implementaciones de SQL de los proveedores, ya que cada uno introducía sus propias extensiones de SQL. A mediados de los años 80, surgieron importantes incompatibilidades entre las distintas versiones de SQL.

También en la década de 1980, el Instituto Nacional de Normalización de Estados Unidos (ANSI) comenzó a trabajar en el estándar SQL. El objetivo de la introducción de un estándar era permitir la portabilidad de las aplicaciones SQL entre productos conformes.

SQL-86

El primer estándar SQL fue SQL-86. Se publicó en 1986 como norma ANSI y en 1987 como norma de la Organización Internacional de Normalización (ISO). El punto de partida de la norma ISO fue la implementación de la norma SQL de IBM. Esta versión del estándar SQL también se conoce como SQL 1.

La norma SQL-86 tiene 120 páginas. Contiene la sintaxis para las sentencias SELECT, INSERT, UPDATE, y DELETE. La sintaxis SELECT permite filtrar con WHERE, utilizar GROUP BY con varias columnas (pero no por expresiones), y filtrar grupos con HAVING. No existe una sintaxis explícita de JOIN; se pueden listar varias tablas en la cláusula FROM para obtener esencialmente una unión cruzada que luego se puede filtrar con WHERE. No hay manera de hacer OUTER JOINs con esta sintaxis. Sin embargo, la sintaxis SELECT sí permite realizar subconsultas.

El estándar también tiene una sintaxis de definición de esquemas: se pueden crear tablas (sólo con las restricciones UNIQUE y NOT NULL ), crear vistas y conceder privilegios. Los tipos de datos introducidos en el estándar son cadenas de caracteres y números (NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL y DOUBLE PRECISION). No hay sentencias ALTER, DROP, ni REVOKE. También existen incrustaciones de SQL en varios lenguajes de programación (Cobol, Fortran, Pascal y PL/1).

En general, se pueden adquirir los documentos estándar de ISO o ANSI, incluso las versiones antiguas y retiradas. Sin embargo, como comparte Evan Carroll en su post de Stack Overflow, no es fácil hacerse con el estándar SQL-86 hoy en día. Pero si estás interesado, puedes encontrar SQL-86 bajo el nombre de FIPS-127.

SQL-89

La siguiente norma SQL fue SQL-89, publicada en 1989. Se trataba de una revisión menor del estándar anterior, un superconjunto de SQL-86 que sustituyó a SQL-86. El tamaño de la norma no cambió.

Las novedades más importantes fueron las restricciones de integridad: además de las opciones UNIQUE, NOT NULL, y de comprobación en las vistas que ya estaban disponibles, se añadieron claves primarias, claves foráneas y restricciones DEFAULT y CHECK. La norma también añadió nuevos enlaces de lenguaje para C y Ada.

SQL-92

La siguiente revisión del estándar fue SQL-92, y fue una revisión importante. El lenguaje introducido por SQL-92 se conoce a veces como SQL 2. El documento estándar pasó de 120 a 579 páginas. Sin embargo, gran parte del crecimiento se debió a especificaciones más precisas de las características existentes.

Las nuevas características más importantes fueron:

  • Una sintaxis explícita de JOIN y la introducción de las uniones externas: LEFT JOIN RIGHT JOIN , FULL JOIN.
  • La introducción de NATURAL JOIN y CROSS JOIN
  • La introducción de operaciones con conjuntos (unión de conjuntos, intersección de conjuntos y diferencia de conjuntos).
  • La introducción de la expresión condicional CASE WHEN.
  • Nuevas operaciones escalares: concatenación de cadenas, extracción de subcadenas y matemáticas de fecha y hora.
  • El operador CAST, que permite la conversión explícita de valores en tipos.

SQL-92 también introdujo nuevas sentencias de definición de datos: ALTER y DROP para tablas y vistas, y nuevos tipos de datos (date, time, timestamp, interval, bit string, varchar string y national character strings). Esta versión añadió un esquema de información (la forma estándar de obtener los metadatos de la base de datos, como los nombres de las tablas, las columnas de las tablas, los tipos de columnas y las restricciones de las tablas). También introdujo las tablas temporales, los niveles de aislamiento de las transacciones y la ejecución dinámica de las consultas (SQL dinámico).

El estándar SQL se dividió en tres niveles de conformidad: básico (el nivel básico de SQL-92 era similar al de SQL-89 con restricciones de integridad), intermedio y completo.

SQL-92 es la base del lenguaje de consulta utilizado en las bases de datos relacionales actuales. Cuando se habla de "SQL", la mayoría de la gente se refiere a SQL-92. Las bases de datos que ya existían en 1992 modificaron su implementación de SQL para ajustarse al estándar. Las bases de datos más nuevas utilizaron el estándar como referencia para su implementación.

SQL-92 sigue siendo lo que se enseña como "SQL" en las escuelas. Y con razón: SQL-92 es un muy buen punto de partida para aprender SQL. Para mucha gente, es suficiente para hacer su trabajo diario. Puedes aprender las funciones avanzadas más tarde, cuando las necesites. Y la mayoría de las bases de datos soportan SQL-92. Ninguna implementación es 100% compatible con el estándar, pero las incompatibilidades no son tan importantes, especialmente cuando se está empezando.

En LearnSQL.es, el SQL estándar es el dialecto más importante que enseñamos. Creemos que si aprendes el lenguaje estándar, podrás utilizarlo para trabajar con la mayoría de las bases de datos. Es la base de nuestros cursos para principiantes; SQL para principiantes le enseñará la sentencia SELECT con todas las características disponibles en SQL-92, incluyendo diferentes tipos de JOIN, GROUP BY, operaciones de conjunto y subconsultas. El curso Cómo añadir, modificar y eliminar datos con SQL le enseñará las sentencias INSERT, UPDATE, y DELETE, mientras que Tipos de JOIN en SQL le permitirá practicar diferentes tipos de JOINs.

Para las personas interesadas en la creación de tablas, recomendamos nuestra pista de aprendizaje de Creación de estructuras de bases de datos. Este curso consta de cinco cursos que le enseñarán a crear tablas, definir restricciones, seleccionar los tipos de datos adecuados y crear vistas utilizando la sintaxis SQL estándar, que es fácilmente transferible entre diferentes motores de bases de datos.

SQL:1999

SQL:1999 (también llamado SQL 3) fue la cuarta revisión del estándar SQL. A partir de esta versión, el nombre de la norma utilizó dos puntos en lugar de un guión para ser coherente con los nombres de otras normas ISO. Esta norma se publicó en varias entregas entre 1999 y 2002.

La primera entrega de SQL:1999 constaba de cinco partes:

  • La parte 1: SQL/Framework (100 páginas) definía los conceptos fundamentales de SQL.
  • La Parte 2: SQL/Foundation (1050 páginas) definía la sintaxis y las operaciones fundamentales de SQL: tipos, esquemas, tablas, vistas, sentencias de consulta y actualización, expresiones, etc. Esta parte es la más importante para los usuarios habituales de SQL.
  • Parte 3: SQL/CLI (Call Level Interface) (514 páginas) define una interfaz de programación de aplicaciones para SQL.
  • Parte 4: SQL/PSM (Persistent Stored Modules) (193 páginas) define las extensiones que hacen que SQL sea procedimental.
  • La parte 5: SQL/Bindings (270 páginas) definió métodos para incrustar sentencias SQL en programas de aplicación escritos en un lenguaje de programación estándar.

Posteriormente se publicaron otras tres partes, que también se consideran parte de SQL:1999.

SQL:1999 introdujo muchas características importantes que forman parte del SQL moderno. Entre las más importantes se encuentran las Expresiones de Tabla Comunes (CTEs). Se trata de una característica muy útil que permite organizar las consultas SQL largas y complejas y hacerlas más legibles. Cuando se utiliza la sintaxis WITH [RECURSIVE], las CTEs también pueden procesar recursivamente datos jerárquicos. Puedes aprender a escribir consultas recursivas en SQL con el curso interactivo de LearnSQL.esConsultas recursivas y expresiones de tabla comunes de .

SQL:1999 también introdujo las capacidades OLAP (Online Analytical Processing), que incluye características útiles para la elaboración de informes empresariales. Las extensiones GROUP BY ROLLUP , CUBE, y GROUPING SETS entraron en el estándar en esta época. Puede aprenderlas en nuestro curso de extensiones GROUP BY (o leer sobre el curso y las extensiones en nuestro artículo de la serie de cursos del mes).

Algunas adiciones menores a SQL en el estándar SQL:1999 incluyen el uso de expresiones en ORDER BY, la inclusión de tipos de datos para objetos binarios grandes (LOB y CLOB), y la introducción de triggers.

El tamaño del estándar SQL creció significativamente entre 1992 y 1999. El estándar SQL-92 tenía casi 600 páginas, pero seguía siendo accesible para los usuarios habituales de SQL. Libros como A Guide to the SQL Standard (Guía del estándar SQL ), de Christopher Date y Hugh Darwen, analizaban y explicaban el estándar SQL-92.

A partir de SQL:1999, la norma -que ya tiene más de 2.000 páginas- dejó de ser accesible para los usuarios habituales de SQL. Se ha convertido en un recurso para los expertos y proveedores de bases de datos. La norma guía el desarrollo de SQL en las principales bases de datos; muestra las nuevas características del lenguaje que merece la pena implementar para mantenerse al día. También estandariza la sintaxis de las nuevas características de SQL, asegurándose de que las principales bases de datos las implementen de forma similar, utilizando una sintaxis y una semántica similares.

El cambio en el papel de la norma SQL se ve acentuado por el hecho de que ya no existe un organismo oficial que certifique el cumplimiento de la norma. Hasta 1996, el programa de normas de gestión de datos del Instituto Nacional de Normas y Tecnología (NIST) certificaba el cumplimiento del estándar SQL por parte de los SGBD. Ahora, los proveedores autocertifican la conformidad de sus productos.

SQL:2003 y más allá

En el siglo XXI, la norma SQL se ha actualizado periódicamente.

El estándar SQL:2003 se publicó el 1 de marzo de 2004. Su principal adición fueron las funciones de ventana, una potente característica analítica que permite calcular estadísticas de resumen sin colapsar las filas. Las funciones ventana aumentaron considerablemente la capacidad de expresión de SQL. Son extremadamente útiles para preparar todo tipo de informes empresariales, analizar datos de series temporales y analizar tendencias. La incorporación de las funciones ventana al estándar coincidió con la popularidad del OLAP y los almacenes de datos. La gente empezó a utilizar las bases de datos para tomar decisiones empresariales basadas en datos. Esta tendencia no hace más que ganar impulso, gracias a la creciente cantidad de datos que todas las empresas recogen. Puede aprender las funciones de ventana con nuestro Funciones de ventana curso.(Lea sobre el curso o por qué vale la pena aprender las funciones de ventana de SQL aquí). SQL:2003 también introdujo funciones relacionadas con XML, generadores de secuencias y columnas de identidad.

A partir de 2004, no se produjeron adiciones importantes al lenguaje. Los cambios en el estándar SQL reflejaron los cambios en la tecnología del momento. SQL:2003 introdujo funciones relacionadas con XML para permitir la interoperabilidad entre las bases de datos y las tecnologías XML, que estaban de moda a principios de la década de 2000. SQL:2006 especificó aún más cómo utilizar SQL con XML. No fue una revisión de la norma SQL completa, sino sólo de la parte 14, que trata de la interoperabilidad SQL-XML.

Las siguientes revisiones de la norma aportaron pequeñas mejoras al lenguaje. SQL :2008 legalizó el uso de ORDER BY fuera de las definiciones de cursor (¡!), y añadió INSTEAD OF triggers, la sentencia TRUNCATE y la cláusula FETCH. SQL : 2011 añadió datos temporales y algunas mejoras en las funciones de ventana y en la cláusula FETCH.

SQL: 2016 añadió la coincidencia de patrones de filas y las funciones de tabla polimórficas, así como el tan esperado soporte de JSON. En la década de 2010, JSON sustituyó a XML como formato común de intercambio de datos; las aplicaciones modernas de Internet utilizan JSON en lugar de XML como formato de datos. El emergente movimiento NoSQL también popularizó JSON; las bases de datos de documentos almacenan archivos JSON, y los almacenes de valores clave son compatibles con el formato JSON. El estándar SQL añadió la compatibilidad con JSON para permitir la interoperabilidad con aplicaciones modernas y nuevos tipos de bases de datos.

El estándar SQL actual es SQL:2019. Añadió la Parte 15, que define el soporte de arrays multidimensionales en SQL.

¿Cuál es su futuro con SQL?

Si se echa un vistazo a los más de 30 años de historia de SQL, se pueden ver las diferentes etapas de su desarrollo. SQL 1 en la década de 1980 (SQL-86, SQL-89) fue el primer esfuerzo por estandarizar y formalizar la definición del lenguaje. SQL-92 proporcionó los cimientos del lenguaje estable que conocemos hoy, el que es ahora el lenguaje de datos estándar para todas las principales tecnologías de datos.

SQL:1999 y SQL:2003 sentaron las bases del SQL moderno, con la incorporación de funciones de ventana, expresiones de tabla comunes y extensiones de GROUP BY. Después de 2003, el lenguaje alcanzó la fase de estabilidad y madurez. El núcleo del lenguaje no cambia, pero se añaden nuevas características para mejorar el lenguaje existente y para dar soporte a las tecnologías emergentes, como XML o JSON.

infografía

El estándar SQL ya no es una referencia para los usuarios habituales de SQL. Sin embargo, las ventajas de contar con un estándar son numerosas. El estándar:

  • Señala qué extensiones del lenguaje son importantes y útiles.
  • Orienta el desarrollo de implementaciones de SQL en bases de datos y otras tecnologías de procesamiento de datos.
  • Proporciona la sintaxis y la semántica comunes que implementarán la mayoría de las tecnologías de procesamiento de datos.

El estándar no garantiza que todas las implementaciones de SQL sean perfectamente compatibles, pero sí que, en su mayor parte, estén alineadas y que todas se desarrollen en la misma dirección.

En LearnSQL.es, puede aprender todas las características modernas de SQL con nuestros cursos interactivos:

Así que, ahora que conoces la historia de SQL, ¿cuál será tu futuro con este lenguaje? Esperamos que lo aprendas y experimentes por ti mismo lo poderoso y eficiente que es SQL.

Fuentes: