stringtranslate.com

SQL

Lenguaje de consulta estructurado ( SQL ) ( / ˌ ɛ s ˌ k juː ˈ ɛ l / SQL, a veces / ˈ s k w əl / "secuela" por razones históricas)[4][5]es unlenguaje de dominio específicoque se utiliza para administrar datos, especialmente en unsistema de administración de bases de datos relacionales(RDBMS). Es particularmente útil en el manejode datos estructurados, es decir, datos que incorporan relaciones entre entidades y variables.

Introducido en la década de 1970, SQL ofrecía dos ventajas principales sobre las API de lectura y escritura más antiguas , como ISAM o VSAM . En primer lugar, introdujo el concepto de acceder a muchos registros con un solo comando. En segundo lugar, elimina la necesidad de especificar cómo llegar a un registro, es decir, con o sin índice .

Originalmente basado en álgebra relacional y cálculo relacional de tuplas , SQL consta de muchos tipos de declaraciones, [6] que pueden clasificarse informalmente como sublenguajes , comúnmente: un lenguaje de consulta de datos (DQL), [a] un lenguaje de definición de datos (DDL), [b] un lenguaje de control de datos (DCL) y un lenguaje de manipulación de datos (DML). [c] [7] El alcance de SQL incluye consulta de datos, manipulación de datos (insertar, actualizar y eliminar), definición de datos ( creación y modificación de esquemas ) y control de acceso a datos. Aunque SQL es esencialmente un lenguaje declarativo ( 4GL ), también incluye elementos procedimentales .

SQL fue uno de los primeros lenguajes comerciales en utilizar el modelo relacional de Edgar F. Codd . El modelo fue descrito en su influyente artículo de 1970, "Un modelo relacional de datos para grandes bancos de datos compartidos". [8] A pesar de no adherirse completamente al modelo relacional descrito por Codd , SQL se convirtió en el lenguaje de bases de datos más utilizado. [9] [10]

SQL se convirtió en un estándar del Instituto Nacional Estadounidense de Estándares (ANSI) en 1986 y de la Organización Internacional de Normalización (ISO) en 1987. [11] Desde entonces, el estándar ha sido revisado varias veces para incluir un conjunto más amplio de características e incorporar Extensiones comunes. A pesar de la existencia de estándares, prácticamente ninguna implementación existente los cumple plenamente, y la mayor parte del código SQL requiere al menos algunos cambios antes de ser portado a diferentes sistemas de bases de datos .

Historia

SQL fue desarrollado inicialmente en IBM por Donald D. Chamberlin y Raymond F. Boyce después de aprender sobre el modelo relacional de Edgar F. Codd [12] a principios de la década de 1970. [13] Esta versión, inicialmente llamada SEQUEL (Lenguaje de consulta estructurado en inglés), fue diseñada para manipular y recuperar datos almacenados en el sistema de gestión de bases de datos cuasirelacional original de IBM, System R , que un grupo del Laboratorio de Investigación de IBM San José había desarrollado durante la década de 1970. [13]

El primer intento de Chamberlin y Boyce con un lenguaje de base de datos relacional fue SQUARE (especificación de consultas en un entorno relacional), pero era difícil de utilizar debido a la notación de subíndice/superíndice. Después de mudarse al Laboratorio de Investigación de San José en 1973, comenzaron a trabajar en una secuela de SQUARE. [12] El nombre original SEQUEL, que se considera ampliamente como un juego de palabras con QUEL , el lenguaje de consulta de Ingres , [14] se cambió más tarde a SQL (eliminando las vocales) porque "SEQUEL" era una marca registrada de Hawker , con sede en el Reino Unido. Siddeley Dynamics Engineering Sociedad limitada. [15] La etiqueta SQL se convirtió más tarde en el acrónimo de Lenguaje de Consulta Estructurado.

Después de probar SQL en los sitios de prueba de los clientes para determinar la utilidad y practicidad del sistema, IBM comenzó a desarrollar productos comerciales basados ​​en su prototipo System R, incluidos System/38 , SQL/DS e IBM Db2 , que estuvieron disponibles comercialmente en 1979, 1981. y 1983, respectivamente. [dieciséis]

A finales de la década de 1970, Relational Software, Inc. (ahora Oracle Corporation ) vio el potencial de los conceptos descritos por Codd, Chamberlin y Boyce y desarrolló su propio RDBMS basado en SQL con aspiraciones de venderlo a la Marina de los EE . UU. , Central Intelligence. Agency y otras agencias gubernamentales de EE. UU . En junio de 1979, Relational Software introdujo una de las primeras implementaciones de SQL disponibles comercialmente, Oracle V2 (Versión 2) para computadoras VAX .

En 1986, los grupos de estándares ANSI e ISO adoptaron oficialmente la definición de lenguaje estándar "Lenguaje de base de datos SQL". Se publicaron nuevas versiones del estándar en 1989, 1992, 1996, 1999, 2003, 2006, 2008, 2011, [12] 2016 y, más recientemente, 2023. [17]

Sintaxis

Un gráfico que muestra varios de los elementos del lenguaje SQL que componen una sola declaración.

El lenguaje SQL se subdivide en varios elementos del lenguaje, que incluyen:

Prórrogas procesales

SQL está diseñado para un propósito específico: consultar datos contenidos en una base de datos relacional . SQL es un lenguaje de programación declarativo basado en conjuntos , no un lenguaje de programación imperativo como C o BASIC . Sin embargo, las extensiones de SQL estándar agregan funcionalidad de lenguaje de programación de procedimientos , como construcciones de control de flujo.

Además de las extensiones SQL/PSM estándar y las extensiones SQL propietarias, la programabilidad orientada a objetos y de procedimientos está disponible en muchas plataformas SQL a través de la integración DBMS con otros lenguajes. El estándar SQL define extensiones SQL/JRT (rutinas y tipos SQL para el lenguaje de programación Java) para admitir código Java en bases de datos SQL. Microsoft SQL Server 2005 utiliza SQLCLR (SQL Server Common Language Runtime) para alojar ensamblados .NET administrados en la base de datos , mientras que las versiones anteriores de SQL Server estaban restringidas a procedimientos almacenados extendidos no administrados escritos principalmente en C. PostgreSQL permite a los usuarios escribir funciones en una amplia variedad de lenguajes, incluidos Perl , Python , Tcl , JavaScript (PL/V8) y C. [19]

Interoperabilidad y estandarización

Descripción general

Las implementaciones de SQL son incompatibles entre proveedores y no necesariamente siguen completamente los estándares. En particular, la sintaxis de fecha y hora, la concatenación de cadenas, los mensajes de texto NULLy la distinción entre mayúsculas y minúsculas varían de un proveedor a otro. PostgreSQL [20] y Mimer SQL [21] se esfuerzan por cumplir con los estándares, aunque PostgreSQL no se adhiere al estándar en todos los casos. Por ejemplo, el plegado de nombres sin comillas a minúsculas en PostgreSQL es incompatible con el estándar SQL, [22] que dice que los nombres sin comillas deben plegarse a mayúsculas. [23] Por lo tanto, Foodebería ser equivalente a FOOno fooconforme a la norma.

Las implementaciones populares de SQL comúnmente omiten la compatibilidad con funciones básicas de SQL estándar, como los tipos de datos DATEo TIME. Los ejemplos más obvios, y dicho sea de paso, los DBMS SQL comerciales y propietarios más populares, son Oracle (que DATEse comporta como DATETIME, [24] [25] y carece de un TIMEtipo) [26] y MS SQL Server (anterior a la versión 2008). Como resultado, el código SQL rara vez se puede transferir entre sistemas de bases de datos sin modificaciones.

Razones de incompatibilidad

Varias razones para la falta de portabilidad entre sistemas de bases de datos incluyen:

Historia de la estandarización

SQL fue adoptado como estándar por ANSI en 1986 como SQL-86 [28] y por ISO en 1987. [11] Es mantenido por ISO/IEC JTC 1, Tecnología de la información, Subcomité SC 32, Gestión e intercambio de datos .

Hasta 1996, el programa de estándares de gestión de datos del Instituto Nacional de Estándares y Tecnología (NIST) certificaba el cumplimiento de SQL DBMS con el estándar SQL. Los proveedores ahora autocertifican la conformidad de sus productos. [29]

El estándar original declaraba que la pronunciación oficial de "SQL" era un inicialismo : / ˌ ɛ s ˌ k juː ˈ ɛ l / ("ess cue el"). [9] Independientemente, muchos profesionales de bases de datos de habla inglesa (incluido el propio Donald Chamberlin [30] ) utilizan la pronunciación similar a un acrónimo de / ˈ s k w əl / ("secuela"), [31] reflejando el nombre de desarrollo previo al lanzamiento del idioma. , "CONTINUACIÓN". [13] [15] [30]
El estándar SQL ha pasado por varias revisiones:

Estándar actual

El estándar se indica comúnmente con el patrón: ISO/IEC 9075-n:yyyy Parte n: título o, como atajo, ISO/IEC 9075 . Las partes interesadas pueden adquirir los documentos de normas de ISO, [36] IEC o ANSI. Algunos borradores antiguos están disponibles gratuitamente. [37] [38] [39]

ISO/IEC 9075 se complementa con ISO/IEC 13249: Paquetes de aplicaciones y multimedia SQL y algunos informes técnicos .

Alternativas

Se debe hacer una distinción entre alternativas a SQL como lenguaje y alternativas al modelo relacional en sí. A continuación se proponen alternativas relacionales al lenguaje SQL. Consulte la base de datos de navegación y NoSQL para conocer alternativas al modelo relacional.

Procesamiento SQL distribuido

La Arquitectura de Base de Datos Relacional Distribuida (DRDA) fue diseñada por un grupo de trabajo dentro de IBM de 1988 a 1994. DRDA permite que las bases de datos relacionales conectadas a la red cooperen para cumplir con las solicitudes SQL. [41] [42]

Un usuario o programa interactivo puede emitir sentencias SQL a una RDB local y recibir tablas de datos e indicadores de estado en respuesta desde RDB remotas. Las sentencias SQL también se pueden compilar y almacenar en RDB remotos como paquetes y luego invocarlas por el nombre del paquete. Esto es importante para el funcionamiento eficiente de los programas de aplicación que emiten consultas complejas y de alta frecuencia. Es especialmente importante cuando las tablas a las que se accede están ubicadas en sistemas remotos.

Los mensajes, protocolos y componentes estructurales de DRDA están definidos por la Arquitectura de gestión de datos distribuidos . El procesamiento de SQL distribuido ala DRDA se distingue de las bases de datos SQL distribuidas contemporáneas .

Críticas

Diseño

SQL se desvía en varios aspectos de su fundamento teórico, el modelo relacional y su cálculo de tuplas. En ese modelo, una tabla es un conjunto de tuplas, mientras que en SQL, las tablas y los resultados de las consultas son listas de filas; la misma fila puede aparecer varias veces y el orden de las filas se puede emplear en consultas (por ejemplo, en la cláusula LIMIT). Los críticos argumentan que SQL debería reemplazarse con un lenguaje que regrese estrictamente a la base original: por ejemplo, consulte The Third Manifesto de Hugh Darwen y CJ Date (2006, ISBN  0-321-39942-0 ).

Ortogonalidad y completitud

Las primeras especificaciones no admitían funciones importantes, como claves primarias. No se pudieron nombrar los conjuntos de resultados y no se habían definido subconsultas. Estos se agregaron en 1992. [12]

La falta de tipos de suma se ha descrito como un obstáculo para el uso completo de los tipos definidos por el usuario de SQL. Por ejemplo, fue necesario agregar compatibilidad con JSON mediante un nuevo estándar en 2016. [43]

Nulo

El concepto de nulo es objeto de cierto debate . El marcador Nulo indica la ausencia de un valor y es distinto de un valor de 0 para una columna de números enteros o de una cadena vacía para una columna de texto. El concepto de Nulos impone la lógica de 3 valores en SQL , que es una implementación concreta de la lógica general de 3 valores . [12]

Duplicados

Otra crítica popular es que permite duplicar filas, lo que dificulta la integración con lenguajes como Python , cuyos tipos de datos pueden dificultar la representación precisa de los datos, [12] en términos de análisis y por la ausencia de modularidad. Por lo general, esto se evita declarando una clave principal, o una restricción única, con una o más columnas que identifiquen de forma única una fila de la tabla.

Desajuste de impedancia

En un sentido similar al desajuste de impedancia relacional-objeto , se produce un desajuste entre el lenguaje SQL declarativo y los lenguajes de procedimiento en los que normalmente se incrusta SQL. [ cita necesaria ]

tipos de datos SQL

El estándar SQL define tres tipos de tipos de datos (capítulo 4.1.1 de SQL/Foundation):

  • tipos de datos predefinidos
  • tipos construidos
  • tipos definidos por el usuario.

Los tipos construidos son ARRAY, MULTISET, REF(erence) o ROW. Los tipos definidos por el usuario son comparables a las clases en lenguaje orientado a objetos con sus propios constructores, observadores, mutadores, métodos, herencia, sobrecarga, sobrescritura, interfaces, etc. Los tipos de datos predefinidos son intrínsecamente compatibles con la implementación.

Tipos de datos predefinidos

  • Carácter (CAR)
  • Carácter variable (VARCHAR)
  • Objeto grande de carácter (CLOB)
  • Carácter nacional (NCHAR)
  • Carácter nacional variable (NCHAR VARYING)
  • Objeto grande de carácter nacional (NCLOB)
  • Binario (BINARIO)
  • Variante binaria (VARBINARIO)
  • Objeto binario grande (BLOB)
  • Tipos numéricos exactos (NUMÉRICO, DECIMAL, PEQUEÑO, INTEGER, BIGINT)
  • Tipos numéricos aproximados (FLOAT, REAL, DOBLE PRECISIÓN)
  • Tipo de coma flotante decimal (DECFLOAT)

Ver también

Notas

  1. ^ Formalmente, declaraciones de "datos SQL" que excluyen las declaraciones de "cambio de datos SQL"; esta es principalmente la declaración Select .
  2. ^ Formalmente, declaraciones de "esquema SQL".
  3. ^ Formalmente, declaraciones de "cambio de datos SQL"

Referencias

  1. ^ Paul, Ryan (24 de octubre de 2005). "Una visita guiada por Microsoft Command Shell". Ars Técnica . Consultado el 10 de abril de 2011 .
  2. ^ "Registro de tipo de medio para aplicación/sql". Autoridad de asignación de números de Internet . 10 de abril de 2013 . Consultado el 10 de abril de 2013 .
  3. ^ Shafranovich, Y. (abril de 2013). "El tipo de medio aplicación/sql, RFC 6922". Grupo de Trabajo de Ingeniería de Internet . pag. 3. doi : 10.17487/RFC6922 . Consultado el 10 de abril de 2013 .
  4. ^ Beaulieu, Alan (abril de 2009). María E. Treseler (ed.). Aprender SQL (2ª ed.). Sebastopol, California, Estados Unidos: O'Reilly. ISBN 978-0-596-52083-0.
  5. ^ Chamberlin, Donald D.; Frana, Philip L. (3 de octubre de 2001). "Entrevista de historia oral con Donald D. Chamberlin". Conservación Digital Universitaria . Consultado el 14 de enero de 2020 . Cambiamos el nombre original "SEQUEL" a SQL porque recibimos una carta del abogado de alguien que decía que el nombre "SEQUEL" le pertenecía. Lo acortamos a SQL, para lenguaje de consulta estructurado, y el producto se conoció como SQL/DS.
  6. ^ SQL-92 , 4.22 sentencias SQL, 4.22.1 Clases de sentencias SQL "Hay al menos cinco formas de clasificar sentencias SQL:", 4.22.2, sentencias SQL clasificadas por función "Las siguientes son las clases principales de Sentencias SQL:"; SQL:2003 4.11 Sentencias SQL y revisiones posteriores.
  7. ^ Chatham, Mark (2012). Lenguaje de consulta estructurado por ejemplo - Volumen I: Lenguaje de consulta de datos. Lulu.com. pag. 8.ISBN _ 9781291199512.
  8. ^ Codd, Edgar F. (junio de 1970). "Un modelo relacional de datos para grandes bancos de datos compartidos". Comunicaciones de la ACM . 13 (6): 377–87. CiteSeerX 10.1.1.88.646 . doi :10.1145/362384.362685. S2CID  207549016. 
  9. ^ ab Chapple, Mike. "Fundamentos de SQL". Bases de datos . Acerca de.com . Consultado el 28 de enero de 2009 .
  10. ^ "Lenguaje de consulta estructurado (SQL)". Máquinas de negocios internacionales. 27 de octubre de 2006 . Consultado el 10 de junio de 2007 .
  11. ^ ab "ISO 9075:1987: Tecnología de la información - Lenguajes de bases de datos - SQL - Parte 1: Marco (SQL/Framework)". 1987-06-01.
  12. ^ abcdef Chamberlin, Donald (2012). "Historia temprana de SQL". Anales IEEE de la historia de la informática . 34 (4): 78–82. doi :10.1109/MAHC.2012.61. S2CID  1322572.
  13. ^ abc Chamberlin, Donald D; Boyce, Raymond F. (1974). "SECUELA: Un lenguaje de consulta estructurado en inglés" (PDF) . Actas del taller ACM SIGFIDET de 1974 sobre descripción, acceso y control de datos . Asociación de Maquinaria de Computación: 249–64. Archivado desde el original (PDF) el 26 de septiembre de 2007 . Consultado el 9 de junio de 2007 .
  14. ^ Starkey, Jim. "SQL dinámico, plomería y API interna". www.ibphoenix.com . Consultado el 19 de enero de 2023 .
  15. ^ ab Oppel, Andy (27 de febrero de 2004). Bases de datos desmitificadas. San Francisco, CA : McGraw-Hill Osborne Media. págs. 90-1. ISBN 978-0-07-146960-9.
  16. ^ "Historia de IBM, 1978". Archivos de IBM . IBM. 23 de enero de 2003 . Consultado el 9 de junio de 2007 .
  17. ^ "ISO - ISO/IEC JTC 1/SC 32 - Gestión e intercambio de datos". www.iso.org . Consultado el 2 de enero de 2021 .
  18. ^ Norma internacional ANSI/ISO/IEC (IS). Lenguaje de base de datos SQL: Parte 2: Fundamentos (SQL/Foundation). 1999.
  19. ^ "Programación del servidor PostgreSQL". Documentación oficial de PostgreSQL 9.1 . postgresql.org. 2011 . Consultado el 9 de marzo de 2012 .
  20. ^ "Acerca de PostgreSQL". Sitio web oficial de PostgreSQL 9.1 . Grupo de desarrollo global de PostgreSQL. 2012 . Consultado el 9 de marzo de 2012 . PostgreSQL se enorgullece de cumplir con los estándares. Su implementación SQL se ajusta firmemente al estándar ANSI-SQL:2008.
  21. ^ "Mimer SQL, basado en estándares". Sitio web oficial de Mimer SQL . Tecnología de la información Mimer. 2009.
  22. ^ "4.1. Estructura léxica". Documentación de PostgreSQL . 2018.
  23. ^ "(Segundo borrador de revisión informal) ISO/IEC 9075:1992, lenguaje de base de datos SQL, sección 5.2, regla de sintaxis 11". 30 de julio de 1992.
  24. ^ Lorentz, Diana; Roeser, María Beth; Abraham, Sol Profundo; Amor, Ángela; Arora, Geeta; Arora, Vikas; Ashdown, Lanza; Baer, ​​Hermann; Bellamkonda, Shrikanth (octubre de 2010) [1996]. "Elementos básicos de Oracle SQL: tipos de datos". Referencia del lenguaje SQL de la base de datos Oracle 11g Versión 2 (11.2) . Biblioteca de documentación de bases de datos Oracle. Redwood City, California: Oracle USA, Inc. Consultado el 29 de diciembre de 2010 . Para cada valor, Oracle almacena la siguiente información: siglo, año, mes, fecha, hora, minuto y segundo.DATE
  25. ^ Lorentz, Diana; Roeser, María Beth; Abraham, Sol Profundo; Amor, Ángela; Arora, Geeta; Arora, Vikas; Ashdown, Lanza; Baer, ​​Hermann; Bellamkonda, Shrikanth (octubre de 2010) [1996]. "Elementos básicos de Oracle SQL: tipos de datos". Referencia del lenguaje SQL de la base de datos Oracle 11g Versión 2 (11.2) . Biblioteca de documentación de bases de datos Oracle. Redwood City, California: Oracle USA, Inc. Consultado el 29 de diciembre de 2010 . Los tipos de datos de fecha y hora son ...DATE
  26. ^ Lorentz, Diana; Roeser, María Beth; Abraham, Sol Profundo; Amor, Ángela; Arora, Geeta; Arora, Vikas; Ashdown, Lanza; Baer, ​​Hermann; Bellamkonda, Shrikanth (octubre de 2010) [1996]. "Elementos básicos de Oracle SQL: tipos de datos". Referencia del lenguaje SQL de la base de datos Oracle 11g Versión 2 (11.2) . Biblioteca de documentación de bases de datos Oracle. Redwood City, California: Oracle USA, Inc. Consultado el 29 de diciembre de 2010 . No defina columnas con los siguientes tipos de datos SQL/DS y DB2, porque no tienen ningún tipo de datos de Oracle correspondiente:...TIME
  27. ^ Fecha, Chris J. (2013). Teoría relacional para profesionales de la informática: de qué se tratan realmente las bases de datos relacionales (1. ed.). Sebastopol, California: O'Reilly Media. ISBN 978-1-449-36943-9.
  28. ^ "Búsqueda de ayuda". Registros X3H2, 1978–95 . Instituto Americano de Estándares Nacionales.
  29. ^ Muñeca, Shelley (19 de junio de 2002). "¿SQL ya es un estándar?". Builder.com de TechRepublic . República Tecnológica. Archivado desde el original el 5 de julio de 2012 . Consultado el 12 de abril de 2016 .
  30. ^ ab Gillespie, Patrick. "Pronunciar SQL: ¿SQL o Secuela?" . Consultado el 12 de febrero de 2012 .
  31. ^ Melton, Jim; Alan R. Simón (1993). "1.2. ¿Qué es SQL?" . Comprensión del nuevo SQL: una guía completa. Morgan Kaufman. pag. 536.ISBN _ 978-1-55860-245-8. SQL (pronunciado correctamente "ess cue ell", en lugar de la algo común "secuela")...
  32. ^ Wagner, Michael (2010). SQL/XML:2006 - Evaluación de la conformidad estándar del sistema de datos bancarios . Editorial Diplomática. pag. 100.ISBN _ 978-3-8366-9609-8.
  33. ^ "SQL: 2008 ahora es un estándar internacional ISO aprobado". Sybase. Julio de 2008. Archivado desde el original el 28 de junio de 2011.
  34. ^ Krishna Kulkarni, Jan-Eike Michels (septiembre de 2012). "Características temporales en SQL: 2011" (PDF) . Registro SIGMOD . 41 (3).
  35. ^ Fred Zemke (2012). "Novedades de SQL: 2011" (PDF) . Corporación Oráculo.
  36. ^ "ISO/CEI 9075".
  37. ^ SQL: borrador de 1992 (texto)
  38. ^ SQL: borrador de 2008 (Zip) , Whitemarsh Information Systems Corporation
  39. ^ SQL: borrador de 2011 (Zip) , Whitemarsh Information Systems Corporation
  40. ^ Fernando Sáenz-Pérez. "Uniones externas en un sistema de base de datos deductivo" (PDF) . Lbd.udc.es. _ Consultado el 16 de enero de 2017 .
  41. ^ Reinsch, R. (1988). "Base de datos distribuida para SAA". Revista de sistemas IBM . 27 (3): 362–389. doi :10.1147/sj.273.0362.
  42. ^ Referencia de arquitectura de bases de datos relacionales distribuidas . IBM Corp. SC26-4651-0. 1990.
  43. ^ Brandon, Jamie (julio de 2021). "Contra SQL" . Consultado el 2 de agosto de 2021 .

Fuentes

enlaces externos