stringtranslate.com

sintaxis SQL

La sintaxis del lenguaje de programación SQL está definida y mantenida por ISO/IEC SC 32 como parte de ISO/IEC 9075 . Este estándar no está disponible gratuitamente. A pesar de la existencia del estándar, el código SQL no es completamente portátil entre diferentes sistemas de bases de datos sin ajustes.

Elementos del lenguaje

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

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

Operadores

En ocasiones se han sugerido o implementado otros operadores, como el operador horizonte (para encontrar sólo aquellas filas que no son "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' ELSE 'cero' FINAL              

SQL prueba WHENlas condiciones en el orden en que aparecen en el código fuente. Si la fuente no especifica una ELSEexpresión, SQL por defecto es ELSE NULL. También se puede utilizar una sintaxis abreviada llamada "caso simple":

CASO n CUANDO 1 ENTONCES 'Uno' CUANDO 2 ENTONCES 'Dos' MÁS 'No puedo contar tan alto' FINAL           

Esta sintaxis utiliza comparaciones de igualdad implícitas, con las advertencias habituales para comparar con NULL .

Hay dos formas breves 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.

FUSIONAR ( x1 , x2 )

es equivalente a:

CASO CUANDO x1 NO ES NULO ENTONCES x1 OTRA COSA x2 FINAL         

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

NULO SI ( x1 , x2 ) 

es equivalente a

CASO CUANDO x1 = x2 ENTONCES NULL ELSE x1 FINAL         

Comentarios

SQL estándar permite dos formatos para 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, utiliza la SELECTdeclaración declarativa. SELECTrecupera datos de una o más tablas o expresiones. Las declaraciones estándar SELECTno 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) lleve a cabo la planificación , la optimización y la realización de las operaciones físicas necesarias para producir el resultado que elija.

Una consulta incluye una lista de columnas para incluir 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 declaración más compleja en 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 con el número en el 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 Libro en las que la columna de precio contiene un valor superior a 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 Libro deben incluirse en el conjunto de resultados.

SELECCIONAR * DESDE Reservar DONDE precio > 100 . 00 ORDENAR POR título ;          

El siguiente ejemplo demuestra una consulta de varias tablas, agrupaciones y agregaciones, al devolver una lista de libros y la cantidad de autores asociados con cada libro.

SELECCIONAR Libro . título AS Título , contar ( * ) AS Autores DESDE Libro ÚNETE Libro_autor EN Libro . isbn = Libro_autor . isbn GRUPO POR Libro . título ;                 

El resultado de ejemplo podría parecerse al siguiente:

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

SELECCIONE el título , cuente ( * ) COMO Autores DEL Libro UNIRSE NATURAL Libro_autor GRUPO POR título ;            

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

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 sales_tax que contiene una cifra de impuesto sobre las ventas calculada al 6% del precio .

SELECCIONAR isbn , titulo , precio , precio * 0 . 06 AS sales_tax DESDE Reservar DONDE precio > 100 . 00 ORDENAR POR título ;                 

Subconsultas

Las consultas se pueden anidar para que los resultados de una consulta se puedan utilizar en otra consulta 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 tablas 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 DEL Libro DONDE precio < ( SELECCIONAR PROMEDIO ( precio ) DEL 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, normalmente denominadas expresiones de tabla comunes (también denominadas factorización de subconsultas ). Los CTE también pueden ser recursivos al referirse a sí mismos; 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 hacer referencia a una subconsulta SQL en una cláusula FROM. Básicamente, la tabla derivada es una subconsulta de la que se puede seleccionar o unirse. La funcionalidad de tabla derivada permite al usuario hacer referencia a la subconsulta como una tabla. La tabla derivada a veces se denomina vista en línea o subselección .

En el siguiente ejemplo, la instrucción SQL implica una unión de la tabla "Libro" inicial a la tabla derivada "ventas". Esta tabla derivada captura información de ventas de libros asociada utilizando el ISBN para unirla a la tabla "Libro". 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 . company_nm FROM Libro b ÚNETE ( SELECCIONAR SUMA ( Artículos_Vendidos ) Artículos_Vendidos , Company_Nm , ISBN FROM Book_Sales GROUP BY Company_Nm , ISBN ) ventas EN ventas . isbn = b . isbn                        

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

El concepto de Nulo permite a SQL lidiar con 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 nulo. 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 sólo resultados para los cuales la cláusula WHERE devuelve un valor de Verdadero; es decir, excluye resultados con valores False y también excluye aquellos cuyo valor es Desconocido.

Junto con Verdadero y Falso, lo desconocido resultante de comparaciones directas con Nulo aporta así un fragmento de lógica de tres valores a SQL. Las tablas de verdad que utiliza SQL 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 Nulls en SQL debido a su tratamiento fuera de las comparaciones directas. Como se ve en la tabla anterior, las comparaciones directas de igualdad entre dos NULL en SQL (por ejemplo, NULL = NULL) devuelven un valor de verdad 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 una "marca" para la información faltante. Sin embargo, el principio de que dos nulos no son iguales entre sí se viola efectivamente en la especificación SQL para los operadores UNIONy INTERSECT, que sí identifican 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 implican comparaciones explícitas con NULL (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 racionaliza argumentando que la eliminación de duplicados en operaciones de conjuntos ocurre "a un nivel de detalle más bajo que las pruebas de igualdad en la evaluación de 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 nulos en SQL". [7]

Además, debido a que los operadores SQL devuelven Desconocido 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 Null o no. [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. Asimismo, NO ES DISTINTO DE 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 desconocidos si son anulables. En la práctica, varios sistemas (por ejemplo, PostgreSQL ) implementan BOOLEAN Unknown como BOOLEAN NULL, y 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 );         
ACTUALIZAR ejemplo SET columna1 = 'valor actualizado' WHERE columna2 = 'N' ;         
ELIMINAR DEL ejemplo DONDE columna2 = 'N' ;      
 FUSIONAR EN nombre_tabla USANDO referencia_tabla ENCENDIDO ( condición ) CUANDO COINCIDE , ENTONCES ACTUALIZAR CONFIGURAR columna1 = valor1 [, columna2 = valor2 ...] CUANDO NO COINCIDE ENTONCES INSERTAR ( columna1 [, columna2 ...]) VALORES ( valor1 [, valor2 ... ])                                 

Controles de transacciones

Las transacciones, si están disponibles, envuelven operaciones DML:

CREAR TABLA tbl_1 ( id int ); INSERTAR EN tbl_1 ( id ) VALORES ( 1 ); INSERTAR EN tbl_1 ( id ) VALORES ( 2 ); COMPROMETERSE ; ACTUALIZAR tbl_1 ESTABLECER id = 200 DONDE id = 1 ; PUNTO DE GUARDADO id_1upd ; ACTUALIZAR tbl_1 ESTABLECER id = 1000 DONDE id = 2 ; VOLVER a id_1upd ; SELECCIONE la identificación de tbl_1 ;                              

COMMITy ROLLBACKfinalizar 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 transacción clásica 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 SET monto = monto - 200 WHERE número_cuenta = 1234 ; ACTUALIZAR cuenta SET monto = monto + 200 WHERE número_cuenta = 2345 ;             SI ERRORES = 0 COMPROMISO ; SI ERRORES <> 0 ROLLBACK ;    

Definición de datos

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

Ejemplo de CREAR TABLA ( columna1 INTEGER , columna2 VARCHAR ( 50 ), columna3 FECHA NO NULA , CLAVE PRIMARIA ( columna1 , columna2 ) );              
ALTER TABLE ejemplo AGREGAR columna4 INTEGER DEFAULT 25 NOT NULL ;         
Ejemplo de TRUNCAR TABLA ;  
Ejemplo de TABLA DROP ;  

Tipos de datos

Cada columna de una tabla SQL declara 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 NATIONAL CHARACTER LARGE OBJECT, 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.

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 el número de dígitos significativos en una base particular (binaria o decimal). La escala es un número entero no negativo. Una escala de 0 indica que el número es un número 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 CEILINGy FLOORpara redondear valores numéricos. (Las funciones específicas de proveedores populares son TRUNC(Informix, DB2, PostgreSQL, Oracle y MySQL) e ROUND(Informix, SQLite, Sybase, Oracle, PostgreSQL, Microsoft SQL Server y Mimer SQL.))

Temporal (fechahora)

La función SQL EXTRACTse puede utilizar para extraer un solo campo (segundos, por ejemplo) de un valor de fecha y hora o intervalo. La fecha/hora actual del sistema del servidor de la base de datos se puede llamar usando 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, DAYOFYEARy .)DAYOFMONTHDAYOFWEEK

Intervalo (fechahora)

Control de datos

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

Ejemplo:

GRANT SELECT , UPDATE ON ejemplo PARA algún_usuario , otro_usuario ;       REVOCAR SELECCIÓN , ACTUALIZAR EN ejemplo DESDE algún_usuario , otro_usuario ;       

Notas

  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 SQL Server. Libros en línea de SQL Server 2005. Microsoft. 2007-09-15 . Consultado el 17 de junio de 2007 .
  3. ^ Guía del usuario del procedimiento SQL SAS 9.4. Instituto SAS. 2013. pág. 248.ISBN 9781612905686. Consultado el 21 de octubre de 2015 . Aunque el argumento ÚNICO es idéntico a DISTINCT, no es un estándar ANSI.
  4. ^ León, Alexis ; León, Mathews (1999). "Eliminación de duplicados: SELECCIONAR usando DISTINCT". SQL: una referencia completa. Nueva Delhi: Tata McGraw-Hill Education (publicado en 2008). pag. 143.ISBN 9780074637081. Consultado 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 de información segura". Semántica en Bases de Datos. Segundo taller internacional Castillo de Dagstuhl, Alemania, 7 al 12 de enero de 2001. Artículos revisados. Apuntes de conferencias sobre informática. vol. 2582, págs. 119-138. doi :10.1007/3-540-36596-6_7. ISBN 978-3-540-00957-3.
  7. ^ ab Ron van der Meyden, "Enfoques lógicos para la información incompleta: una encuesta" en Chomicki, enero; Saake, Gunter (Eds.) Lógicas para bases de datos y sistemas de información, Kluwer Academic Publishers ISBN 978-0-7923-8129-7 , p. 344 
  8. ^ ISO/CEI. ISO/IEC 9075-2:2003, "SQL/Fundación" . ISO/CEI.
  9. ^ Negri, M.; Pelagatti, G.; Sbattella, L. (febrero de 1989). "Semántica y problemas de cuantificación universal en SQL". La revista informática . 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". Registro ACM SIGMOD . 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; Revista de Computación en la Enseñanza de Matemáticas y Ciencias ISSN  0731-9258 Volumen 23, Número 2, 2004 AACE Norfolk, Virginia. La biblioteca gratuita.com
  12. ^ C. Fecha (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)".