La sintaxis del lenguaje de programación SQL está definida y mantenida por ISO/IEC SC 32 como parte de ISO/IEC 9075. Esta norma no es de libre acceso. A pesar de su existencia, el código SQL no es completamente portable entre diferentes sistemas de bases de datos sin realizar ajustes.
Elementos del lenguaje
El lenguaje SQL se subdivide en varios elementos lingüísticos, entre los que se incluyen:
- Las palabras clave son términos definidos en el lenguaje SQL. Pueden ser palabras reservadas (por ejemplo
SELECT,COUNTyYEAR) o no reservadas (por ejemploASC,DOMAINyKEY). Lista de palabras reservadas de SQL . - Los identificadores son nombres en objetos de la base de datos, como tablas , columnas y esquemas. Un identificador no puede ser igual a una palabra clave reservada, a menos que sea un identificador delimitado. Los identificadores delimitados son identificadores encerrados entre comillas dobles. Pueden contener caracteres que normalmente no son compatibles con los identificadores SQL y pueden ser idénticos a una palabra reservada, por ejemplo, una columna llamada
YEARse especifica como"YEAR".- En MySQL , las comillas dobles son delimitadores literales de cadena por defecto. Habilitar el
ansi_quotesmodo SQL impone el comportamiento estándar de SQL. También se pueden usar independientemente de este modo mediante acentos graves:`YEAR`.
- En MySQL , las comillas dobles son delimitadores literales de cadena por defecto. Habilitar el
- Las cláusulas , que son componentes constitutivos de las sentencias y consultas. (En algunos casos, son opcionales). [ 1 ]
- Expresiones que pueden producir valores escalares o tablas que constan de columnas y filas de datos.
- Los predicados , que especifican condiciones que pueden evaluarse mediante la lógica trivalente SQL (3VL) (verdadero/falso/desconocido) o valores booleanos , se utilizan para limitar los efectos de las sentencias y consultas, o para cambiar el flujo del programa.
- Las consultas , que recuperan los datos en función de criterios específicos. Este es un elemento importante de SQL .
- Las sentencias , que pueden tener un efecto persistente en los esquemas y los datos, o pueden controlar las transacciones , el flujo del programa , las conexiones, las sesiones o los diagnósticos.
- Las sentencias SQL también incluyen el terminador de sentencia punto y coma (";"). Aunque no es obligatorio en todas las plataformas, se define como una parte estándar de la gramática SQL.
- Los espacios en blanco insignificantes generalmente se ignoran en las sentencias y consultas SQL, lo que facilita el formato del código SQL para una mejor legibilidad.
Operadores
En ocasiones se han sugerido o implementado otros operadores, como el operador Skyline (para encontrar solo aquellas filas que no son "peores" que las demás).
SQL tiene la caseexpresión, que se introdujo en SQL-92 . En su forma más general, que se denomina "caso buscado" en el estándar SQL:
CASO CUANDO n > 0 ENTONCES 'positivo' CUANDO n < 0 ENTONCES 'negativo' SINO 'cero' FINSQL prueba WHENlas condiciones en el orden en que aparecen en el origen. Si el origen no especifica una ELSEexpresión, SQL usa por defecto ELSE NULL. También se puede usar una sintaxis abreviada llamada "caso simple":
CASO n CUANDO 1 ENTONCES 'Uno' CUANDO 2 ENTONCES 'Dos' SINO 'No puedo contar hasta ese número' FINEsta sintaxis utiliza comparaciones de igualdad implícitas, con las advertencias habituales para la comparación con NULL .
Hay dos formas abreviadas para CASEexpresiones especiales: COALESCEy NULLIF.
La COALESCEexpresión devuelve el valor del primer operando que no sea NULL, encontrado trabajando de izquierda a derecha, o NULL si todos los operandos son iguales a NULL.
COALESCE ( x1 , x2 )es equivalente a:
CASE WHEN x1 IS NOT NULL THEN x1 ELSE x2 ENDLa NULLIFexpresión tiene dos operandos y devuelve NULL si los operandos tienen el mismo valor; de lo contrario, toma el valor del primer operando.
NULLIF ( x1 , x2 )es equivalente a
CASE WHEN x1 = x2 THEN NULL ELSE x1 ENDComentarios
SQL estándar permite dos formatos para comentarios : -- comment, que termina con el primer salto de línea , y /* comment */, que puede abarcar varias líneas.
Consultas
La operación más común en SQL, la consulta, utiliza la SELECTinstrucción declarativa. SELECTRecupera datos de una o más tablas o expresiones. SELECTLas instrucciones estándar no tienen efectos persistentes en la base de datos. Algunas implementaciones no estándar SELECTpueden tener efectos persistentes, como la SELECT INTOsintaxis proporcionada en algunas bases de datos. [ 2 ]
Las consultas permiten al usuario describir los datos deseados, dejando que el sistema de gestión de bases de datos (DBMS) se encargue de planificar , optimizar y realizar las operaciones físicas necesarias para producir ese resultado según lo considere oportuno.
Una consulta incluye una lista de columnas que se incluirán en el resultado final, normalmente inmediatamente después de la SELECTpalabra clave. Se puede usar un asterisco (" *"), o comodínSELECT ", para especificar que la consulta debe devolver todas las columnas de las tablas consultadas. es la instrucción más compleja en SQL, con palabras clave y cláusulas opcionales que incluyen:
- La
FROMcláusula, que indica la(s) tabla(s) de la(s) que se recuperarán los datos. [ 3 ] : 400 LaFROMcláusula puede incluirJOINsubcláusulas opcionales para especificar las reglas para unir tablas. - La
WHEREcláusula incluye una condición que restringe las filas devueltas por la consulta. LaWHEREcláusula elimina del conjunto de resultados todas las filas cuya condición no se evalúa como verdadera. [ 3 ] : 402 - La
GROUP BYcláusula proyecta las filas que tienen valores comunes en un conjunto más pequeño de filas. Se usa a menudo junto con funciones de agregación SQL o para eliminar filas duplicadas de un conjunto de resultados. La cláusula se aplica antes de la cláusula.GROUP BYWHEREGROUP BY - La
HAVINGcláusula incluye un predicado que se utiliza para filtrar las filas resultantes de laGROUP BYmisma. Dado que actúa sobre los resultados de laGROUP BYcláusula, se pueden utilizar funciones de agregación en elHAVINGpredicado de la cláusula. - La
ORDER BYcláusula especifica qué columna(s) usar para ordenar los datos resultantes y en qué dirección ordenarlos (ascendente o descendente). Sin estaORDER BYcláusula, el orden de las filas devueltas por una consulta SQL es indefinido. - La
DISTINCTpalabra clave elimina los datos duplicados. [ 4 ] - La
OFFSETcláusula especifica el número de filas que se deben omitir antes de comenzar a devolver datos. - La
FETCH FIRSTcláusula especifica el número de filas que se deben devolver. Algunas bases de datos SQL tienen alternativas no estándar, por ejemploLIMIT,TOPoROWNUM.
Las cláusulas de una consulta tienen un orden de ejecución particular, [ 5 ] que se indica mediante el número del lado derecho. Es el siguiente:
El siguiente ejemplo de SELECTconsulta devuelve una lista de libros caros. La consulta recupera todas las filas de la tabla Libros en las que la columna Precio contiene un valor superior a 100,00. El resultado se ordena de forma ascendente por título . El asterisco (*) en la lista de selección indica que se deben incluir todas las columnas de la tabla Libros en el conjunto de resultados.
SELECCIONAR * DE Libro DONDE precio > 100 . 00 ORDENAR POR título ;El siguiente ejemplo muestra una consulta a varias tablas, con agrupamiento y agregación, que devuelve una lista de libros y el número de autores asociados a cada libro.
SELECCIONAR Libro.título COMO Título , count ( * ) COMO Autores DE Libro UNIR Libro_autor EN Libro.isbn = Libro_autor.isbn AGRUPAR POR Libro.título ;El resultado de ejemplo podría ser similar al siguiente:
Título Autores ---------------------- ------- Ejemplos y guía de SQL 4 El placer de SQL 1 Introducción a SQL 2 Errores comunes en SQL 1
Bajo la condición previa de que isbn sea el único nombre de columna común de las dos tablas y que una columna llamada title solo exista en la tabla Book , se podría reescribir la consulta anterior de la siguiente forma:
SELECCIONAR título , recuento ( * ) COMO Autores DE Libro NATURAL UNIR Libro_autor AGRUPAR POR título ;Sin embargo, muchos proveedores no admiten este enfoque o requieren ciertas convenciones de nomenclatura de columnas para que las uniones naturales funcionen eficazmente.
SQL incluye operadores y funciones para calcular valores sobre valores almacenados. SQL permite el uso de expresiones en la lista de selección para proyectar datos, como en el siguiente ejemplo, que devuelve una lista de libros que cuestan más de 100,00 con una columna adicional llamada sales_tax que contiene una cifra de impuesto sobre las ventas calculada al 6% del precio .
SELECCIONAR isbn , título , precio , precio * 0.06 COMO impuesto_ventas DE Libro DONDE precio > 100.00 ORDENAR POR título ;Subconsultas
Las consultas pueden anidarse de manera que los resultados de una consulta se utilicen en otra mediante un operador relacional o una función de agregación. Una consulta anidada también se conoce como subconsulta . Si bien las uniones y otras operaciones de tabla ofrecen alternativas computacionalmente superiores (es decir, más rápidas) en muchos casos, el uso de subconsultas introduce una jerarquía en la ejecución que puede resultar útil o necesaria. En el siguiente ejemplo, la función de agregación AVGrecibe como entrada el resultado de una subconsulta:
SELECCIONAR isbn , título , precio DE Libro DONDE precio < ( SELECCIONAR PROMEDIO ( precio ) DE Libro ) ORDENAR POR título ;Una subconsulta puede utilizar valores de la consulta externa, en cuyo caso se la conoce como subconsulta correlacionada .
Desde 1999, el estándar SQL permite WITHcláusulas para subconsultas, es decir, subconsultas con nombre, generalmente llamadas expresiones de tabla comunes (también conocidas como factorización de subconsultas ). Las CTE también pueden ser recursivas al referirse a sí mismas; el mecanismo resultante permite recorridos de árboles o grafos (cuando se representan como relaciones) y, de forma más general, cálculos de punto fijo .
Tabla derivada
Una tabla derivada se obtiene al hacer referencia a una subconsulta SQL en una cláusula FROM. Básicamente, la tabla derivada es una subconsulta que se puede seleccionar o combinar. La funcionalidad de tabla derivada permite al usuario hacer referencia a la subconsulta como si fuera una tabla. A veces, la tabla derivada se denomina vista en línea o subconsulta .
En el siguiente ejemplo, la instrucción SQL implica una unión de la tabla inicial "Libro" con la tabla derivada "Ventas". Esta tabla derivada captura la información de ventas de libros asociada utilizando el ISBN para unirse a la tabla "Libro". Como resultado, la tabla derivada proporciona al conjunto de resultados columnas adicionales (el número de artículos vendidos y la empresa que vendió los libros):
SELECCIONAR b.isbn , b.título , b.precio , ventas.artículos_vendidos , ventas.empresa_nm DE Libro b UNIR ( SELECCIONAR SUMA ( Artículos_vendidos ) Artículos_vendidos , Empresa_Nm , ISBN DE Ventas_Libro AGRUPAR POR Empresa_Nm , ISBN ) ventas EN ventas.isbn = b.isbnLógica nula o trivalente (3VL)
El concepto de Null permite a SQL gestionar la información faltante en el modelo relacional. La palabra NULLclave Null es una palabra reservada en SQL que se utiliza para identificar el marcador especial Null. Las comparaciones con Null, por ejemplo, la igualdad (=) en las cláusulas WHERE, dan como resultado un valor de verdad Desconocido. En las sentencias SELECT, SQL devuelve únicamente los resultados para los que la cláusula WHERE devuelve un valor Verdadero; es decir, excluye los resultados con valores Falso y también aquellos cuyo valor es Desconocido.
Junto con Verdadero y Falso, el Desconocido resultante de las comparaciones directas con Nulo introduce así un fragmento de lógica trivalente en SQL. Las tablas de verdad que SQL utiliza para AND, OR y NOT corresponden a un fragmento común de la lógica trivalente de Kleene y Lukasiewicz (que difieren en su definición de implicación; sin embargo, SQL no define tal operación). [ 6 ]
Sin embargo, existen controversias sobre la interpretación semántica de los valores nulos en SQL debido a su tratamiento fuera de las comparaciones directas. Como se observa en la tabla anterior, las comparaciones de igualdad directas entre dos valores nulos en SQL (por ejemplo, NULL = NULL) devuelven un valor de verdad desconocido. Esto concuerda con la interpretación de que un valor nulo no tiene un valor (y no pertenece a ningún dominio de datos), sino que es un marcador de posición o "marca" para información faltante. Sin embargo, el principio de que dos valores nulos no son iguales se viola en la especificación SQL para los operadores UNIONy INTERSECT, que sí identifican valores nulos entre sí. [ 7 ] En consecuencia, estas operaciones de conjuntos en SQL pueden producir resultados que no representan información certera, a diferencia de las operaciones que implican comparaciones explícitas con valores nulos (por ejemplo, las de una WHEREcláusula analizada anteriormente). En la propuesta de Codd de 1979 (que fue básicamente adoptada por SQL92), esta inconsistencia semántica se justifica argumentando que la eliminación de duplicados en las operaciones de conjuntos ocurre "a un nivel de detalle inferior al de las pruebas de igualdad en la evaluación de las operaciones de recuperación". [ 6 ] Sin embargo, el profesor de informática Ron van der Meyden concluyó que "Las inconsistencias en el estándar SQL significan que no es posible atribuir ninguna semántica lógica intuitiva al tratamiento de los valores nulos en SQL". [ 7 ]
Además, debido a que los operadores SQL devuelven Desconocido cuando comparan cualquier cosa con Null directamente, SQL proporciona dos predicados de comparación específicos para Null: IS NULLy IS NOT NULLprueban si los datos son o no Null. [ 8 ] SQL no admite explícitamente la cuantificación universal y debe resolverla como una cuantificación existencial negada . [ 9 ] [ 10 ] [ 11 ] También existe el <row value expression> IS DISTINCT FROM <row value expression>operador de comparación infijo, que devuelve VERDADERO a menos que ambos operandos sean iguales o ambos sean NULL. Del mismo modo, IS NOT DISTINCT FROM se define como NOT (<row value expression> IS DISTINCT FROM <row value expression>). SQL:1999 también introdujo BOOLEANel tipo de datos, que según el estándar también puede contener valores Desconocido si es anulable. En la práctica, varios sistemas (por ejemplo, PostgreSQL ) implementan el BOOLEAN Desconocido como un BOOLEAN NULL, que el estándar dice que NULL BOOLEAN y UNKNOWN "pueden usarse indistintamente para significar exactamente lo mismo". [ 12 ] [ 13 ]
Manipulación de datos
El lenguaje de manipulación de datos (DML) es el subconjunto de SQL que se utiliza para agregar, actualizar y eliminar datos:
INSERTAR EN ejemplo ( columna1 , columna2 , columna3 ) VALORES ( 'prueba' , 'N' , NULL );- UPDATE modifica un conjunto de filas de tabla existentes, por ejemplo:
Ejemplo de ACTUALIZACIÓN : ESTABLECER columna1 = 'valor actualizado' DONDE columna2 = 'N' ;- DELETE elimina las filas existentes de una tabla, por ejemplo:
ELIMINAR DE example DONDE column2 = 'N' ;- La instrucción MERGE se utiliza para combinar los datos de varias tablas. Combina los elementos INSERT y UPDATE . Está definida en el estándar SQL:2003; antes de eso, algunas bases de datos ofrecían una funcionalidad similar mediante una sintaxis diferente, a veces denominada " upsert ".
MERGE INTO table_name USING table_reference ON ( condition ) WHEN MATCHED THEN UPDATE SET column1 = value1 [ , column2 = value2 ... ] WHEN NOT MATCHED THEN INSERT ( column1 [ , column2 ... ] ) VALUES ( value1 [ , value2 ... ] )Controles de transacciones
Las transacciones, si están disponibles, encapsulan las operaciones DML:
START TRANSACTION(oBEGIN WORK, oBEGIN TRANSACTION, dependiendo del dialecto SQL) marca el inicio de una transacción de base de datos , que se completa por completo o no se completa en absoluto.SAVE TRANSACTION(oSAVEPOINT) guarda el estado de la base de datos en el punto actual de la transacción
CREATE TABLE tbl_1 ( id int ); INSERT INTO tbl_1 ( id ) VALUES ( 1 ); INSERT INTO tbl_1 ( id ) VALUES ( 2 ); COMMIT ; UPDATE tbl_1 SET id = 200 WHERE id = 1 ; SAVEPOINT id_1upd ; UPDATE tbl_1 SET id = 1000 WHERE id = 2 ; ROLLBACK to id_1upd ; SELECT id from tbl_1 ;COMMITHace que todos los cambios de datos en una transacción sean permanentes.ROLLBACKDescarta todos los cambios de datos desde la últimaCOMMIToperaciónROLLBACK, dejando los datos como estaban antes de dichos cambios. Una vez que laCOMMITinstrucción se completa, los cambios de la transacción no se pueden revertir.
COMMITy ROLLBACKfinalizar la transacción actual y liberar los bloqueos de datos. En ausencia de una START TRANSACTIONinstrucción similar, la semántica de SQL depende de la implementación. El siguiente ejemplo muestra una transacción clásica de transferencia de fondos, donde se retira dinero de una cuenta y se agrega a otra. Si falla la retirada o la adición, se revierte toda la transacción.
INICIAR TRANSACCIÓN ; ACTUALIZAR Cuenta ESTABLECER importe = importe - 200 DONDE número_cuenta = 1234 ; ACTUALIZAR Cuenta ESTABLECER importe = importe + 200 DONDE número_cuenta = 2345 ;SI ERRORES = 0 CONFIRMAR ; SI ERRORES <> 0 REVERTIR ;Definición de datos
El lenguaje de definición de datos (DDL) gestiona la estructura de tablas e índices. Los elementos más básicos del DDL son las sentencias CREATE, ALTER, RENAME, DROPy :TRUNCATE
CREATEcrea un objeto (una tabla, por ejemplo) en la base de datos, por ejemplo:
CREATE TABLE example ( column1 INTEGER , column2 VARCHAR ( 50 ), column3 DATE NOT NULL , PRIMARY KEY ( column1 , column2 ) );ALTERmodifica la estructura de un objeto existente de varias maneras, por ejemplo, agregando una columna a una tabla existente o una restricción, por ejemplo:
Ejemplo de ALTER TABLE : AGREGAR columna4 ENTERO PREDETERMINADO 25 NO NULO ;TRUNCATEElimina todos los datos de una tabla de forma muy rápida, borrando los datos que contiene, pero no la tabla en sí. Generalmente implica una operación COMMIT posterior; es decir, no se puede revertir (a diferencia de DELETE, los datos no se registran en los archivos de registro para su posterior reversión).
Ejemplo de TRUNCATE TABLE ;DROPElimina un objeto de la base de datos, normalmente de forma irrecuperable, es decir, no se puede revertir, por ejemplo:
Ejemplo de DROP TABLE ;Tipos de datos
Cada columna de una tabla SQL declara el/los tipo(s) que puede contener. ANSI SQL incluye los siguientes tipos de datos. [ 14 ]
Cadenas de caracteres y cadenas de caracteres nacionales
CHARACTER(n)(o ): cadena de n caracteres de ancho fijo , rellena con espacios según sea necesarioCHAR(n)CHARACTER VARYING(n)(o ): cadena de ancho variable con un tamaño máximo de n caracteresVARCHAR(n)CHARACTER LARGE OBJECT(n[K|M|G|T])(o ): carácter objeto grande con un tamaño máximo de n [K|M|G|T] caracteresCLOB(n[K|M|G|T])NATIONAL CHARACTER(n)(o ): cadena de ancho fijo que admite un conjunto de caracteres internacionalNCHAR(n)NATIONAL CHARACTER VARYING(n)(o ): cadena de ancho variableNVARCHAR(n)NCHARNATIONAL CHARACTER LARGE OBJECT(n[K|M|G|T])(o ): carácter nacional objeto grande con un tamaño máximo de n [K|M|G|T] caracteresNCLOB(n[K|M|G|T])
Para los tipos de datos CHARACTER LARGE OBJECTy NATIONAL CHARACTER LARGE OBJECT, los multiplicadores K(1024 ), M(1 048 576 ), G(1 073 741 824 ) y T(1 099 511 627 776 ) se puede utilizar opcionalmente al especificar la longitud.
Binario
BINARY(n): Cadena binaria de longitud fija, longitud máxima n .BINARY VARYING(n)(o ): Cadena binaria de longitud variable, longitud máxima n .VARBINARY(n)BINARY LARGE OBJECT(n[K|M|G|T])(o ): objeto binario grande con una longitud máxima n [K|M|G|T] .BLOB(n[K|M|G|T])
Para el BINARY LARGE OBJECTtipo de datos, los multiplicadores K(1024 ), M(1 048 576 ), G(1 073 741 824 ) y T(1 099 511 627 776 ) se puede utilizar opcionalmente al especificar la longitud.
Booleano
BOOLEAN
El BOOLEANtipo de datos puede almacenar los valores TRUEy FALSE.
Numérico
INTEGER(oINT),SMALLINTyBIGINTFLOAT,REALyDOUBLE PRECISIONNUMERIC(precision, scale)oDECIMAL(precision, scale)DECFLOAT(precision)
Por ejemplo, el número 123,45 tiene una precisión de 5 y una escala de 2. La precisión es un entero positivo que determina la cantidad de dígitos significativos en una base particular (binaria o decimal). La escala es un entero no negativo. Una escala de 0 indica que el número es un entero. Para un número decimal con escala S, el valor numérico exacto es el valor entero de los dígitos significativos dividido por 10 S.
SQL proporciona funciones CEILINGpara FLOORredondear valores numéricos. (Las funciones específicas de proveedores más populares son TRUNC(Informix, DB2, PostgreSQL, Oracle y MySQL) e ROUND(Informix, SQLite, Sybase, Oracle, PostgreSQL, Microsoft SQL Server y Mimer SQL)).
Temporal (fecha y hora)
DATE: para valores de fecha (por ejemplo2011-05-03).TIME: para valores de tiempo (por ejemplo15:51:36).TIME WITH TIME ZONE: lo mismo queTIME, pero incluyendo detalles sobre la zona horaria en cuestión.TIMESTAMP: Esto es unDATEy unTIMEcombinados en un solo valor (por ejemplo2011-05-03 15:51:36.123456).TIMESTAMP WITH TIME ZONE: lo mismo queTIMESTAMP, pero incluyendo detalles sobre la zona horaria en cuestión.
La función SQL EXTRACTse puede usar para extraer un solo campo (segundos, por ejemplo) de un valor de fecha y hora o intervalo. La fecha y hora actual del sistema del servidor de la base de datos se puede obtener usando funciones como CURRENT_DATE, CURRENT_TIMESTAMP, LOCALTIME, o LOCALTIMESTAMP. (Las funciones populares específicas del proveedor son TO_DATE, TO_TIME, TO_TIMESTAMP, YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, DAYOFYEAR, DAYOFMONTHy DAYOFWEEK.)
Intervalo (fecha y hora)
YEAR(precision): varios añosYEAR(precision) TO MONTH: un número de años y mesesMONTH(precision): un número de mesesDAY(precision): un número de díasDAY(precision) TO HOUR: un número de días y horasDAY(precision) TO MINUTE: un número de días, horas y minutosDAY(precision) TO SECOND(scale): un número de días, horas, minutos y segundosHOUR(precision): un número de horasHOUR(precision) TO MINUTE: un número de horas y minutosHOUR(precision) TO SECOND(scale): un número de horas, minutos y segundosMINUTE(precision): un número de minutosMINUTE(precision) TO SECOND(scale): un número de minutos y segundos
Control de datos
El lenguaje de control de datos (DCL) autoriza a los usuarios a acceder y manipular datos. Sus dos declaraciones principales son:
GRANTautoriza a uno o más usuarios a realizar una operación o un conjunto de operaciones sobre un objeto.REVOKEelimina una subvención, que puede ser la subvención predeterminada.
Ejemplo:
OTORGAR PERMISO DE SELECCIÓN , ACTUALIZACIÓN EN ejemplo A algún_usuario , otro_usuario ;REVOCAR SELECCIONAR , ACTUALIZAR EN ejemplo DE algún_usuario , otro_usuario ;Referencias
- ↑ Norma internacional ANSI/ISO/IEC (IS). Lenguaje de bases de datos SQL—Parte 2: Fundamentos (SQL/Foundation). 1999.
- ↑ "Cláusula SELECT - INTO (Transact-SQL)" . learn.microsoft.com . 23/05/2023 . Consultado el 07/11/2024 .
- 1 2 Jon Duckett; Emme Stone; Chris Ullman (2022). PHP y MySQL: desarrollo web del lado del servidor . Hoboken, Nueva Jersey : John Wiley & Sons, Inc. ISBN 978-1-119-14921-7LCCN 2021951353. Archivado del original el 30 de abril de 2025. Consultado el 28 de abril de 2026 .
- ↑ Leon, Alexis ; Leon, Mathews (1999). "Eliminación de duplicados: SELECT usando DISTINCT". SQL: Una referencia completa . Nueva Delhi: Tata McGraw-Hill Education (publicado en 2008). pág. 143. ISBN 9780074637081. Recuperado el 21-10-2015 .
[...] la palabra clave DISTINCT [...] elimina los duplicados del conjunto de resultados.
- ↑ "¿Cuál es el orden de ejecución de una consulta SQL? - Designcise.com" . www.designcise.com . 29 de junio de 2015. Consultado el 4 de febrero de 2018 .
- 1 2 Hans-Joachim, K. (2003). "Valores nulos en bases de datos relacionales y respuestas de información segura". Semántica en bases de datos. Segundo taller internacional, Castillo de Dagstuhl, Alemania, 7-12 de enero de 2001. Artículos revisados . Lecture Notes in Computer Science. Vol. 2582. pp. 119-138 . doi : 10.1007/3-540-36596-6_7 . ISBN 978-3-540-00957-3Archivado del original el 7 de julio de 2018.
- 1 2 Ron van der Meyden, «Enfoques lógicos para la información incompleta: una revisión» en Chomicki, Jan; Saake, Gunter (Eds.) Lógica para bases de datos y sistemas de información , Kluwer Academic Publishers ISBN 978-0-7923-8129-7pág. 344
- ↑ ISO/IEC. ISO/IEC 9075-2:2003, "SQL/Foundation" . ISO/IEC.
- ↑ Negri, M.; Pelagatti, G.; Sbattella, L. (febrero de 1989). "Semántica y problemas de cuantificación universal en SQL" . The Computer Journal . 32 (1): 90– 91. doi : 10.1093/comjnl/32.1.90 .
- ↑ Fratarcangeli, Claudio (1991). "Técnica para cuantificación universal en SQL" . ACM SIGMOD Record . 20 (3): 16– 24. doi : 10.1145/126482.126484 . S2CID 18326990 .
- ↑ Kawash, Jalal (2004) Cuantificación compleja en lenguaje de consulta estructurado (SQL): un tutorial con cálculo relacional ; Journal of Computers in Mathematics and Science Teaching ISSN 0731-9258 Volumen 23, Número 2, 2004 AACE Norfolk, Virginia. Thefreelibrary.com
- ↑ C. Date (2011). SQL y la teoría relacional: Cómo escribir código SQL preciso . O'Reilly Media, Inc. pág. 83. ISBN 978-1-4493-1640-2.
- ↑ ISO/IEC 9075-2:2011 §4.5
- ↑ "ISO/IEC 9075-1:2016: Tecnología de la información – Lenguajes de bases de datos – SQL – Parte 1: Marco (SQL/Framework)" .
Enlaces externos
- "Definición de la gramática SQL", ISO_IEC_9075-2(E)_Foundation.bnf.xml ( formato XML de Backus-Naur ) , Portal de mantenimiento de normas ISO.
- "Utilidad de formato SQL en línea", Utilidad de formato SQL en línea , archivada del original el 18 de septiembre de 2024..
- SQL
- Lenguajes de consulta
- sintaxis del lenguaje de programación
- lenguajes de programación declarativos
- Lenguajes de modelado de datos
- Sistemas de gestión de bases de datos relacionales
- Sistemas de gestión de bases de datos