stringtranslate.com

Sintaxis SQL

La sintaxis del lenguaje de programación SQL está definida y mantenida por la norma ISO/IEC SC 32 como parte de la norma ISO/IEC 9075. Esta norma no está disponible de forma gratuita. 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

Un gráfico que muestra varios de los elementos del lenguaje SQL que componen una sola declaración. Esto suma uno a la población de los EE. UU. en la tabla de países.

El lenguaje SQL se subdivide en varios elementos de lenguaje, entre ellos:

Operadores

En ocasiones se han sugerido o implementado otros operadores, como el operador skyline (para encontrar solo aquellas filas que no sean "peores" que otras).

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' DE LO CONTRARIO 'cero' FIN              

SQL prueba WHENlas condiciones en el orden en que aparecen en la fuente. Si la fuente no especifica una ELSEexpresión, SQL toma como valor predeterminado ELSE NULL. También se puede utilizar una sintaxis abreviada denominada "caso simple":

CASO n CUANDO 1 ENTONCES 'Uno' CUANDO 2 ENTONCES 'Dos' DE LO CONTRARIO 'No puedo contar tan alto' FIN           

Esta sintaxis utiliza comparaciones de igualdad implícita, 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 no NULL, que se encuentra trabajando de izquierda a derecha, o NULL si todos los operandos son iguales a NULL.

COALESCE ( x1 , x2 )

es equivalente a:

CASO CUANDO x1 NO ES NULO ENTONCES x1 DE LO CONTRARIO x2 FIN         

La NULLIFexpresión tiene dos operandos y devuelve NULL si los operandos tienen el mismo valor; de lo contrario, tiene el valor del primer operando.

NULLIF ( x1 , x2 ) 

es equivalente a

CASO CUANDO x1 = x2 ENTONCES NULO DE LO CONTRARIO x1 FIN         

Comentarios

El SQL estándar permite dos formatos para los comentarios : -- comment, que finaliza con la primera nueva línea , y /* comment */, que puede abarcar varias líneas.

Consultas

La operación más común en SQL, la consulta, hace uso de la SELECTsentencia declarativa. SELECTrecupera datos de una o más tablas o expresiones. SELECTLas sentencias estándar no tienen efectos persistentes en la base de datos. Algunas implementaciones no estándar de 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) realice la planificación , la optimización y la ejecución de las operaciones físicas necesarias para producir ese resultado según lo elija.

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 utilizar un asterisco (" ") para especificar que la consulta debe devolver todas las columnas de las tablas consultadas. SELECTes la sentencia más compleja de SQL, con palabras clave y cláusulas opcionales que incluyen:

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 Book en las que la columna price contiene un valor mayor que 100,00. El resultado se ordena en orden ascendente por título . El asterisco (*) en la lista de selección indica que todas las columnas de la tabla Book deben incluirse en el conjunto de resultados.

SELECCIONAR * DE Libro DONDE precio > 100 . 00 ORDENAR POR título ;          

El siguiente ejemplo demuestra una consulta de múltiples tablas, agrupación y agregación, devolviendo una lista de libros y la cantidad de autores asociados a cada libro.

SELECCIONAR Libro . título COMO Título , contar ( * ) COMO Autores DE Libro UNIR Libro_autor EN Libro . isbn = Libro_autor . isbn AGRUPAR POR Libro . título ;                 

El resultado de ejemplo podría parecerse al siguiente:

Título Autores---------------------- -------Ejemplos y guía de SQL 4La alegría de SQL 1Introducción a SQL 2Errores de 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 título solo exista en la tabla Libro , se podría reescribir la consulta anterior en la siguiente forma:

SELECCIONAR título , contar ( * ) COMO Autores DE Libro NATURAL UNIRSE Libro_autor AGRUPAR POR título ;            

Sin embargo, muchos proveedores de [ cuantificación ] no admiten este enfoque o requieren ciertas convenciones de nombres de columnas para que las uniones naturales funcionen de manera efectiva.

SQL incluye operadores y funciones para calcular valores a partir de 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 sales_tax adicional que contiene una cifra de impuesto a las ventas calculada al 6 % del precio .

SELECCIONAR isbn , título , precio , precio * 0,06 COMO impuesto_venta DE Libro DONDE precio > 100,00 ORDENAR POR título ;                 

Subconsultas

Las consultas se pueden anidar de modo que los resultados de una consulta se puedan utilizar en otra consulta a través de 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 proporcionan 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 ser ú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 AVG ( precio ) DE Libro ) ORDENAR POR título ;               

Una subconsulta puede utilizar valores de la consulta externa, en cuyo caso se 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 llamadas factorización de subconsultas ). Las CTE también pueden ser recursivas haciendo referencia a sí mismas; el mecanismo resultante permite recorridos de árboles o gráficos (cuando se representan como relaciones) y, de manera más general, cálculos de puntos fijos .

Tabla derivada

Una tabla derivada es el uso de referenciar una subconsulta SQL en una cláusula FROM. Básicamente, la tabla derivada es una subconsulta de la que se puede seleccionar o unir. La funcionalidad de tabla derivada permite al usuario hacer referencia a la subconsulta como una tabla. A veces, la tabla derivada se denomina vista en línea o subselección .

En el siguiente ejemplo, la sentencia SQL implica una unión de la tabla inicial "Book" a la tabla derivada "sales". Esta tabla derivada captura la información de ventas de libros asociada utilizando el ISBN para unirse a la tabla "Book". Como resultado, la tabla derivada proporciona el conjunto de resultados con columnas adicionales (la cantidad 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 Libro_Ventas AGRUPAR POR Empresa_Nm , ISBN ) ventas EN ventas . isbn = b . isbn                        

Lógica nula o de tres valores (3VL)

El concepto de Null permite a SQL tratar la información faltante en el modelo relacional. La palabra NULLes una palabra clave 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 Unknown. En las instrucciones SELECT, SQL devuelve solo los resultados para los que la cláusula WHERE devuelve un valor True; es decir, excluye los resultados con valores False y también excluye aquellos cuyo valor es Unknown.

Junto con Verdadero y Falso, el Desconocido resultante de comparaciones directas con Nulo trae así un fragmento de lógica de tres valores a SQL. Las tablas de verdad que SQL utiliza para AND, OR y NOT corresponden a un fragmento común de la lógica de tres valores 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 disputas sobre la interpretación semántica de los valores nulos en SQL debido a su tratamiento fuera de las comparaciones directas. Como se ve en la tabla anterior, las comparaciones de igualdad directa entre dos valores nulos en SQL (por ejemplo, NULL = NULL) devuelven un valor de verdad de Desconocido. Esto está en línea con la interpretación de que Null no tiene un valor (y no es miembro de ningún dominio de datos) sino que es más bien un marcador de posición o "marca" para la información faltante. Sin embargo, el principio de que dos valores nulos no son iguales entre sí se viola efectivamente en la especificación SQL para los operadores UNIONy INTERSECT, que identifican los valores nulos entre sí. [7] En consecuencia, estas operaciones de conjuntos en SQL pueden producir resultados que no representan información segura, a diferencia de las operaciones que involucran comparaciones explícitas con NULL (por ejemplo, las de una WHEREcláusula discutida anteriormente). En la propuesta de Codd de 1979 (que fue básicamente adoptada por SQL92) esta inconsistencia semántica se racionaliza argumentando que la eliminación de duplicados en las operaciones de conjuntos ocurre "en un nivel de detalle más bajo que 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 Unknown al comparar algo con Null directamente, SQL proporciona dos predicados de comparación específicos de Null: IS NULLy IS NOT NULLprueba 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 TRUE 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 BOOLEANvariables de tipo, que según el estándar también pueden contener valores Unknown si es nulo. En la práctica, varios sistemas (por ejemplo, PostgreSQL ) implementan el BOOLEAN Unknown 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 utilizado para agregar, actualizar y eliminar datos:

INSERTAR EN ejemplo ( columna1 , columna2 , columna3 ) VALORES ( 'prueba' , 'N' , NULL );         
Ejemplo de ACTUALIZACIÓN SET columna1 = 'valor actualizado' DONDE columna2 = 'N' ;         
ELIMINAR DE ejemplo DONDE columna2 = 'N' ;      
 FUSIONAR EN nombre_tabla USANDO referencia_tabla ON ( condición ) CUANDO COINCIDE ENTONCES ACTUALIZAR ESTABLECER columna1 = valor1 [, columna2 = valor2 ...] CUANDO NO COINCIDE ENTONCES INSERTAR ( columna1 [, columna2 ...]) VALORES ( valor1 [, valor2 ...])                                 

Controles de transacciones

Las transacciones, si están disponibles, encapsulan las operaciones DML:

CREAR TABLA tbl_1 ( id int ); INSERTAR EN tbl_1 ( id ) VALORES ( 1 ); INSERTAR EN tbl_1 ( id ) VALORES ( 2 ); CONFIRMACIÓN ; ACTUALIZAR tbl_1 ESTABLECER id = 200 DONDE id = 1 ; PUNTO DE GUARDADO id_1upd ; ACTUALIZAR tbl_1 ESTABLECER id = 1000 DONDE id = 2 ; RETROCEDER a id_1upd ; SELECCIONAR id de tbl_1 ;                              

COMMITy ROLLBACKterminar la transacción actual y liberar los bloqueos de datos. En ausencia de una START TRANSACTIONdeclaración o similar, la semántica de SQL depende de la implementación. El siguiente ejemplo muestra una clásica transacción de transferencia de fondos, donde se retira dinero de una cuenta y se agrega a otra. Si la eliminación o la adición fallan, se revierte toda la transacción.

INICIAR TRANSACCIÓN ; ACTUALIZAR Cuenta ESTABLECER monto = monto - 200 DONDE número_de_cuenta = 1234 ; ACTUALIZAR Cuenta ESTABLECER monto = monto + 200 DONDE número_de_cuenta = 2345 ;             SI ERRORES = 0 CONFIRMACIÓN ; SI ERRORES <> 0 RETROCESO ;    

Definición de datos

El lenguaje de definición de datos ( DDL) administra la estructura de tablas e índices. Los elementos más básicos del DDL son las instrucciones CREATE, ALTER, y :RENAMEDROPTRUNCATE

Ejemplo CREAR TABLA ( columna1 ENTERO , columna2 VARCHAR ( 50 ), columna3 FECHA NO NULA , CLAVE PRIMARIA ( columna1 , columna2 ) );              
Ejemplo de ALTER TABLE ADD column4 INTEGER DEFAULT 25 NOT NULL ;         
Ejemplo de TRUNCATE TABLE ;  
Ejemplo de DROP TABLE ;  

Tipos de datos

Cada columna de una tabla SQL declara el tipo o los tipos que puede contener esa columna. ANSI SQL incluye los siguientes tipos de datos. [14]

Cadenas de caracteres y cadenas de caracteres nacionales

Para los tipos de datos CHARACTER LARGE OBJECTy , se pueden utilizar opcionalmente NATIONAL CHARACTER LARGE OBJECTlos multiplicadores K(1 024), M(1 048 576), G(1 073 741 824) y (1 099 511 627 776) al especificar la longitud.T

Binario

Para el BINARY LARGE OBJECTtipo de datos, los multiplicadores K(1 024), M(1 048 576), G(1 073 741 824) y T(1 099 511 627 776) se pueden utilizar opcionalmente al especificar la longitud.

Booleano

El BOOLEANtipo de datos puede almacenar los valores TRUEy FALSE.

Numérico

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 las funciones CEILINGpara FLOORredondear valores numéricos. (Las funciones específicas de los proveedores más populares son TRUNC(Informix, DB2, PostgreSQL, Oracle y MySQL) y ROUND(Informix, SQLite, Sybase, Oracle, PostgreSQL, Microsoft SQL Server y Mimer SQL).)

Temporal (fecha y hora)

La función SQL EXTRACTse puede utilizar para extraer un único campo (segundos, por ejemplo) de un valor de fecha y hora o de intervalo. La fecha y hora del sistema actual del servidor de base de datos se puede llamar mediante funciones como CURRENT_DATE, CURRENT_TIMESTAMP, LOCALTIMEo . LOCALTIMESTAMP(Las funciones específicas de proveedores populares son TO_DATE, TO_TIME, TO_TIMESTAMP, YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, y .)DAYOFYEARDAYOFMONTHDAYOFWEEK

Intervalo (fecha y hora)

Control de datos

El lenguaje de control de datos (DCL) autoriza a los usuarios a acceder y manipular datos. Sus dos enunciados principales son:

Ejemplo:

CONCEDER SELECCIONAR , ACTUALIZAR EN ejemplo A algún_usuario , otro_usuario ;       REVOCAR SELECCIONAR , ACTUALIZAR EN ejemplo DE algún_usuario , otro_usuario ;       

Notas

Referencias

  1. ^ Norma internacional ANSI/ISO/IEC (IS). Lenguaje de base de datos SQL, parte 2: Fundamentos (SQL/Foundation). 1999.
  2. ^ "Referencia de Transact-SQL". Referencia del lenguaje de SQL Server. Libros en línea de SQL Server 2005. Microsoft. 15 de septiembre de 2007. Consultado el 17 de junio de 2007 .
  3. ^ Guía del usuario de procedimientos SQL de SAS 9.4. SAS Institute. 2013. pág. 248. ISBN 9781612905686. Recuperado el 21 de octubre de 2015. Aunque el argumento UNIQUE es idéntico a DISTINCT, no es un estándar ANSI.
  4. ^ Leon, Alexis ; Leon, Mathews (1999). "Eliminación de duplicados: SELECT con DISTINCT". SQL: una referencia completa. Nueva Delhi: Tata McGraw-Hill Education (publicado en 2008). pág. 143. ISBN 9780074637081. Recuperado el 21 de octubre de 2015. [...] la palabra clave DISTINCT [...] elimina los duplicados del conjunto de resultados.
  5. ^ "¿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 .
  6. ^ ab Hans-Joachim, K. (2003). "Valores nulos en bases de datos relacionales y respuestas seguras de información". Semántica en bases de datos. Segundo taller internacional en el castillo de Dagstuhl, Alemania, del 7 al 12 de enero de 2001. Artículos revisados. Lecture Notes in Computer Science. Vol. 2582. págs. 119–138. doi :10.1007/3-540-36596-6_7. ISBN 978-3-540-00957-3.
  7. ^ de Ron van der Meyden, "Enfoques lógicos para la información incompleta: una encuesta" 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-7 , p. 344 
  8. ^ ISO/IEC. ISO/IEC 9075-2:2003, "SQL/Foundation" . ISO/IEC.
  9. ^ 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 . Consultado el 16 de enero de 2017 .
  10. ^ Fratarcangeli, Claudio (1991). "Técnica de cuantificación universal en SQL". ACM SIGMOD Record . 20 (3): 16–24. doi :10.1145/126482.126484. S2CID  18326990 . Consultado el 16 de enero de 2017 .
  11. ^ Kawash, Jalal (2004) Cuantificación compleja en lenguaje de consulta estructurado (SQL): un tutorial que utiliza 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
  12. ^ C. Date (2011). SQL y teoría relacional: cómo escribir código SQL preciso. O'Reilly Media, Inc., pág. 83. ISBN 978-1-4493-1640-2.
  13. ^ ISO/IEC 9075-2:2011 §4.5
  14. ^ "ISO/IEC 9075-1:2016: Tecnología de la información – Lenguajes de bases de datos – SQL – Parte 1: Marco (SQL/Framework)".

Enlaces externos