stringtranslate.com

SQL

El lenguaje de consulta estructurado ( SQL ) ( pronunciado S-QL ; históricamente "secuela") [4] [5] es un lenguaje específico de dominio utilizado para gestionar datos, especialmente en un sistema de gestión de bases de datos relacionales (RDBMS). Es particularmente útil para manejar datos estructurados , es decir, datos que incorporan relaciones entre entidades y variables.

SQL, que se introdujo en la década de 1970, ofrecía dos ventajas principales con respecto a las API de lectura y escritura más antiguas , como ISAM o VSAM . En primer lugar, introdujo el concepto de acceso 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 un índice .

SQL , que originalmente se basaba en el álgebra relacional y el cálculo relacional de tuplas , consta de muchos tipos de instrucciones, [6] que pueden clasificarse informalmente como sublenguajes , comúnmente: lenguaje de consulta de datos (DQL), lenguaje de definición de datos (DDL), lenguaje de control de datos (DCL) y lenguaje de manipulación de datos (DML). [7]

El alcance de SQL incluye la consulta de datos, la manipulación de datos (insertar, actualizar y eliminar), la definición de datos ( creación y modificación de esquemas ) y el control de acceso a los 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 base 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 se adhiere a él por completo, y la mayoría 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 (Structured English Query Language), 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 en San José había desarrollado durante la década de 1970. [13]

El primer intento de Chamberlin y Boyce de crear un lenguaje de base de datos relacional fue SQUARE (Specifying Queries in A Relational Environment), pero era difícil de usar 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 la empresa Hawker Siddeley Dynamics Engineering Limited con sede en el Reino Unido. [15] La etiqueta SQL más tarde se convirtió en el acrónimo de Structured Query Language.

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. [16]

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. , la Agencia Central de Inteligencia y otras agencias gubernamentales de los EE. UU . En junio de 1979, Relational Software presentó una de las primeras implementaciones de SQL disponibles comercialmente, Oracle V2 (Version2) para computadoras VAX .

En 1986, los grupos de normalización ANSI e ISO adoptaron oficialmente la definición del lenguaje estándar "Database Language 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 de lenguaje, entre ellos:

Extensiones de procedimiento

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 procedimental , como construcciones de control de flujo.

Además de las extensiones estándar de SQL/PSM y las extensiones de SQL propietarias, la programación orientada a objetos y procedimental está disponible en muchas plataformas SQL a través de la integración de DBMS con otros lenguajes. El estándar SQL define extensiones SQL/JRT (SQL Routines and Types for the Java Programming Language) para admitir código Java en bases de datos SQL. Microsoft SQL Server 2005 utiliza SQLCLR (SQL Server Common Language Runtime) para alojar ensambles .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, NULLs y la distinción entre mayúsculas y minúsculas en las comparaciones 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, según el estándar, Foodebería ser equivalente a FOO, no foo.

Las implementaciones populares de SQL suelen omitir el soporte para las características básicas de SQL estándar, como los tipos de datos DATEo TIME. Los ejemplos más obvios de este tipo, y por cierto los DBMS SQL comerciales y propietarios más populares, son Oracle (cuyo DATEcomportamiento es como DATETIME, [24] [25] y carece de un TIMEtipo) [26] y MS SQL Server (antes de la versión 2008). Como resultado, el código SQL rara vez se puede trasladar entre sistemas de bases de datos sin modificaciones.

Razones de incompatibilidad

Entre las razones de la falta de portabilidad entre sistemas de bases de datos se incluyen las siguientes:

Historia de la estandarización

SQL fue adoptado como estándar por la ANSI en 1986 como SQL-86 [28] y por la ISO en 1987. [11] Lo mantiene 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 Normas y Tecnología (NIST) certificaba la conformidad de los DBMS SQL con el estándar SQL. Ahora los proveedores certifican por sí mismos la conformidad de sus productos. [29]

El estándar original declaraba que la pronunciación oficial de "SQL" era un acrónimo: /ˌɛsˌkjuːˈɛl/ ( " ess cue el " ). [ 9 ] A pesar de ello , 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 iːkwəl / ("secuela"), [31] reflejando el nombre de desarrollo previo al lanzamiento del lenguaje, "SEQUEL". [ 13] [15] [30]
El estándar SQL ha pasado por varias revisiones:

Norma actual

La norma se denota comúnmente por el patrón: ISO/IEC 9075-n:yyyy Parte n: título o, como abreviatura, ISO/IEC 9075. Las partes interesadas pueden comprar los documentos de las normas a ISO, [36] IEC o ANSI. Algunos borradores antiguos están disponibles gratuitamente. [37] [38] [39]

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

Alternativas

Se debe hacer una distinción entre las alternativas a SQL como lenguaje y las alternativas al modelo relacional en sí. A continuación se proponen alternativas relacionales al lenguaje SQL. Consulte Bases de datos de navegación y NoSQL para conocer las 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 entre 1988 y 1994. DRDA permite que las bases de datos relacionales conectadas en 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 como respuesta de las RDB remotas. Las sentencias SQL también se pueden compilar y almacenar en RDB remotas como paquetes y luego invocarse por nombre de paquete. Esto es importante para el funcionamiento eficiente de los programas de aplicación que emiten consultas complejas de alta frecuencia. Es especialmente importante cuando las tablas a las que se debe acceder se encuentran 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 SQL distribuido de DRDA es diferente 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 puede emplearse en las consultas (por ejemplo, en la cláusula LIMIT). Los críticos argumentan que SQL debería reemplazarse por un lenguaje que vuelva estrictamente a la base original: por ejemplo, véase 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 las claves primarias. No se podían nombrar los conjuntos de resultados y no se habían definido subconsultas. Estas se añadieron 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 Null es objeto de cierto debate . El marcador Null indica la ausencia de un valor y es distinto de un valor de 0 para una columna de números enteros o una cadena vacía para una columna de texto. El concepto de Nulls refuerza 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 filas duplicadas, 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. Esto generalmente se evita declarando una clave principal, o una restricción única, con una o más columnas que identifiquen de forma única una fila en la tabla.

Desajuste de impedancia

En un sentido similar al desajuste de impedancia objeto-relacional , se produce un desajuste entre el lenguaje SQL declarativo y los lenguajes procedimentales en los que SQL está normalmente integrado. [ cita requerida ]

Tipos de datos SQL

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

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

Véase también

Notas

Referencias

  1. ^ Paul, Ryan (24 de octubre de 2005). "Una visita guiada al shell de comandos de Microsoft". Ars Technica . Consultado el 10 de abril de 2011 .
  2. ^ "Registro de tipo de medio para aplicación/sql". Autoridad de Números Asignados de Internet . 10 de abril de 2013. Consultado el 10 de abril de 2013 .
  3. ^ Shafranovich, Y. (abril de 2013). "The application/sql Media Type, RFC 6922". Grupo de trabajo de ingeniería de Internet . p. 3. doi :10.17487/RFC6922 . Consultado el 10 de abril de 2013 .
  4. ^ Beaulieu, Alan (abril de 2009). Mary E Treseler (ed.). Learning SQL (2.ª ed.). Sebastopol, CA, EE. UU.: 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". University Digital Conservancy . hdl :11299/107215 . 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, por Structured Query Language, y el producto se conoció como SQL/DS.
  6. ^ SQL-92 , 4.22 Sentencias SQL, 4.22.1 Clases de sentencias SQL "Existen al menos cinco formas de clasificar las sentencias SQL:", 4.22.2, Sentencias SQL clasificadas por función "Las siguientes son las principales clases 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. p. 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 . About.com . Consultado el 28 de enero de 2009 .
  10. ^ "Lenguaje de consulta estructurado (SQL)". International Business Machines. 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". IEEE Annals of the History of Computing . 34 (4): 78–82. doi :10.1109/MAHC.2012.61. S2CID  1322572.
  13. ^ abc Chamberlin, Donald D; Boyce, Raymond F (1974). "SEQUEL: A Structured English Query Language" (PDF) . Actas del taller ACM SIGFIDET de 1974 sobre descripción, acceso y control de datos . Association for Computing Machinery: 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). Databases Demystified. San Francisco, CA : McGraw-Hill Osborne Media. pp. 90-1. ISBN 978-0-07-146960-9.
  16. ^ "Historia de IBM, 1978". Archivos de IBM . IBM. 23 de enero de 2003. Archivado desde el original el 17 de enero de 2005. 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 . PostgreSQL Global Development Group. 2012. Consultado el 9 de marzo de 2012. PostgreSQL se enorgullece de cumplir con los estándares. Su implementación de SQL cumple estrictamente con el estándar ANSI-SQL:2008 .
  21. ^ "Mimer SQL, basado en estándares". Sitio web oficial de Mimer SQL . Tecnología de la información de 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, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance; Baer, ​​Hermann; Bellamkonda, Shrikanth (octubre de 2010) [1996]. "Elementos básicos de Oracle SQL: tipos de datos". Oracle Database SQL Language Reference 11g Release 2 (11.2) . Biblioteca de documentación de Oracle Database. Redwood City, CA: 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 segundoDATE
  25. ^ Lorentz, Diana; Roeser, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance; Baer, ​​Hermann; Bellamkonda, Shrikanth (octubre de 2010) [1996]. "Elementos básicos de Oracle SQL: tipos de datos". Oracle Database SQL Language Reference 11g Release 2 (11.2) . Biblioteca de documentación de Oracle Database. Redwood City, CA: Oracle USA, Inc . Consultado el 29 de diciembre de 2010 . Los tipos de datos de fecha y hora son ...DATE
  26. ^ Lorentz, Diana; Roeser, Mary Beth; Abraham, Sundeep; Amor, Angela; Arora, Geeta; Arora, Vikas; Ashdown, Lance; Baer, ​​Hermann; Bellamkonda, Shrikanth (octubre de 2010) [1996]. "Elementos básicos de Oracle SQL: tipos de datos". Oracle Database SQL Language Reference 11g Release 2 (11.2) . Biblioteca de documentación de Oracle Database. Redwood City, CA: 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 un tipo de datos Oracle correspondiente:...TIME
  27. ^ Fecha, Chris J. (2013). Teoría relacional para profesionales de la informática: de qué tratan realmente las bases de datos relacionales (1.ª ed.). Sebastopol, California: O'Reilly Media. ISBN 978-1-449-36943-9.
  28. ^ "Encontrar ayuda". Registros X3H2, 1978–95 . Instituto Nacional Estadounidense de Estándares.
  29. ^ Doll, Shelley (19 de junio de 2002). "¿Es SQL un estándar todavía?". Builder.com de TechRepublic . TechRepublic. Archivado desde el original el 5 de julio de 2012. Consultado el 12 de abril de 2016 .
  30. ^ ab Gillespie, Patrick. "Pronunciación de SQL: ¿SQL o secuela?" . Consultado el 12 de febrero de 2012 .
  31. ^ Melton, Jim; Alan R Simon (1993). "1.2. ¿Qué es SQL?" . Entendiendo el nuevo SQL: una guía completa. Morgan Kaufmann. p. 536. ISBN 978-1-55860-245-8. SQL (pronunciado correctamente "ess cue ell", en lugar del común "sequel")...
  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 es ahora 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) . SIGMOD Record . 41 (3).
  35. ^ Fred Zemke (2012). "Novedades de SQL: 2011" (PDF) . Oracle Corporation.
  36. ^ "ISO/IEC 9075".
  37. ^ Borrador SQL:1992 (texto)
  38. ^ Borrador SQL:2008 (Zip) , Whitemarsh Information Systems Corporation
  39. ^ Borrador SQL:2011 (Zip) , Whitemarsh Information Systems Corporation
  40. ^ Fernando Saenz-Perez. "Outer Joins in a Deductive Database System" (PDF) . lbd.udc.es . Consultado el 16 de enero de 2017 .
  41. ^ Reinsch, R. (1988). "Base de datos distribuida para SAA". IBM Systems Journal . 27 (3): 362–389. doi :10.1147/sj.273.0362.
  42. ^ Referencia de arquitectura de base de datos relacional distribuida . IBM Corp. SC26-4651-0. 1990.
  43. ^ Brandon, Jamie (julio de 2021). "Against SQL" . Consultado el 2 de agosto de 2021 .
  44. ^ "Compatibilidad con SQL 2003 Standard en Oracle Database 10g" (PDF) . Oracle . Oracle Corporation . Noviembre de 2003 . Consultado el 27 de marzo de 2024 .La compatibilidad con XML se agregó en ANSI SQL 2003, parte 14.

Fuentes

Enlaces externos