SQL Interactivo
Introducción
Los orígenes del SQL están ligados a los de las bases de datos relacionales. En 1970 E. F. Codd propone el modelo relacional y asociado a este un sublenguaje de acceso a los datos basado en el cálculo de predicados. Basándose en estas ideas, los laboratorios deIBM definen el lenguaje SEQUEL (Structured English QUEry Language) que más tarde sería ampliamente implementado por elSGBD experimental System R, desarrollado en 1977 también por IBM. Sin embargo, fue Oracle quien lo introdujo por primera vez en1979 en un programa comercial.
El SEQUEL terminaría siendo el predecesor de SQL, siendo éste una versión evolucionada del primero. El SQL pasa a ser el lenguaje por excelencia de los diversos SGBD relacionales surgidos en los años siguientes y es por fin estandarizado en 1986 por el ANSI, dando lugar a la primera versión estándar de este lenguaje, el SQL-86 o SQL1. Al año siguiente este estándar es también adoptado por la ISO.
Sin embargo este primer estándar no cubre todas las necesidades de los desarrolladores e incluye funcionalidades de definición de almacenamiento que se consideraron suprimir. Así que en 1992 se lanza un nuevo estándar ampliado y revisado del SQL llamado SQL-92 o SQL2.
En la actualidad el SQL es el estándar de facto de la inmensa mayoría de los SGBD comerciales. Y, aunque la diversidad de añadidos particulares que incluyen las distintas implementaciones comerciales del lenguaje es amplia, el soporte al estándar SQL-92 es general y muy amplio.
El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones sobre los mismos.
Es un lenguaje declarativo de alto nivel o de no procedimiento, que gracias a su fuerte base teórica y su orientación al manejo de conjuntos de registros, y no a registros individuales, permite una alta productividad en codificación y la orientación a objetos. De esta forma una sola sentencia puede equivaler a uno o más programas que utilizas en un lenguaje de bajo nivel orientado a registro.
SQL Interactivo
Conceptos base del lenguaje
Características
El lenguaje SQL esta formado por tres tipos de caracteres: letras, dígitos y caracteres especiales. Las letras que corresponden con el alfabeto latino tanto en mayúsculas como minúsculas A, B. C, D, E, F. G. H. I, J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y, como también a b, c, d e, f g, h, i, j, k, etc.. Los dígitos son: 1,2, 3, 4, 5, 6, 7, 8, 9. Los caracteres especiales de SQL son: espacio en blanco y los comprendidos en el cuadro siguiente:
Módulos de utilización
Dependiendo de la forma de ejecutar el lenguaje SQL, existen diferentes modos de utilización: ejecución directa o SQL interactivo, SQL incrustado o embebido, módulos SQL-cliente, SQL dinámico, procedimientos invocados externamente, rutinas invocadas por SQL y sus funciones.
Ejecución directa o SQL interactivo
Las ordenes SQL se escriben en una línea de comandos, o se crean mediante un diseño, visual que las traduce a una sentencia SQL son inmediatamente ejecutadas por el sistema. En el caso de SQL Server, este modo viene implementado con la aplicación iSQL.
Modo Incrustado
Las ordenes SQL se escriben como parte del código de otro lenguaje anfitrión, ya sea ADA, C, C++, Fortran, Pascal o PL/I, delimitando las sentencias SQL mediante separadores especiales, de modo que cada unidad de compilación este formada por un código anfitrión y SQL. Una unidad de compilación es un segmento de código ejecutable, formado por uno o más subprogramas. Ada como lenguaje anfitrión contiene los pre compiladores SQL propios de la base de datos en la que se almacenan los datos.
Un modulo SQL-cliente es un objeto, de modo que las ordenes SQL se compilan aparte del código anfitrión y se enlazan (linkan) todos los programas objeto tanto SQL y anfitrión, creándose un ejecutable. Los módulos SQL-cliente se asocian a una unidad de compilación en tiempo de ejecución de modo que un único modulo puede estar asociado a varias unidades de compilación. El mecanismo de asociación entre módulos y los lenguajes a los que puede asociarse un módulo y la transferencia del control de unos a otros son definidos por el fabricante.
Dinámico
En muchos casos las instrucciones SQL a ejecutar incluyen en un modulo de SQL-cliente o en una unida de compilación usando SQL incrustado. En otros casos no se conoce cuando se escriben y ejecutan las órdenes SQL durante la ejecución de un programa. Los tipos de órdenes empleados en SQL dinámico comprenden instrucciones de los siguientes tipos:
Ü Prepare: Preparan el código SQL generado para su ejecución.
Ü Deallocate: Quitan la marca de preparación de las ordenes SQL preparadas.
Ü Describe. Contiene una descripción de los parámetros de entrada/salida dinámica.
Ü Select. Devuelve un conjunto de columnas coma resultado de una consulta dinámica.
Ü Execute: Asocia los parámetros de entrada a una orden prepare de modo que pueda ejecutarse.
Ü Declare cursor. Declara un cursor o tabla en memoria.
Allocate cursor, fetch, delete, update, openclose, son ordenes que pueden ejecutarse sobre cursores.
Las ordenes pueden ser preparadas para su ejecución y mas tarde ejecutadas una o mas veces, pudiéndose eliminar, mediante deallocate o reléase, la orden preparada cuando no se necesite ejecutar mas.
El segundo modo consiste en ejecutar las órdenes directamente, sin prepararlas.
Procedimientos invocado externamente
Los procedimientos invocados externamente son rutinas, funciones o procedimientos de SQL, que contienen órdenes de tipo CALL y una clausula de nombre de lenguaje que define un lenguaje distinto de SQL.
Palabras predefinidas
Son las palabras propias del lenguaje SQL: DELETE., FROM, WHERE, LIKE, CREATE y otros, que se desarrollan a lo largo de los siguientes capítulos.
Nombres de objetos, tablas, columnas.
Son los identificadores asignados por los programadores o usuarios a tablas, campos, variables, procedimientos, etc. La mayor parte de los nombres de objetos se definen mediante una orden CREATE. Ejemplo de nombres de objetos son: nom_cli, imp_iva, etc.
Rutinas invocadas por SQL y funciones construidas
Las rutinas invocadas por SQL pueden ser dependientes de un tipo de datos definido por el usuario (UDT), si se crea durante la ejecución. En determinadas circunstancias los prediseñados, las especificaciones de tipo SET u otros elementos SQL pueden ser dependientes de rutinas invocadas por SQL.
Para definir una rutina invocada por SQL se necesitan, entre otros elementos, el nombre de la rutina y el nombre del lenguaje en que se implementa, siendo relativamente variable su implementación de unas bases de datos comerciales a otras.
Las ordenes SQL no poseen un formato especifico. Siempre empiezan por una palabra predefinida. Para separar ordenes se emplea el punto y coma ~;). Las órdenes SQL están formadas por los siguientes elementos: palabras predefinidas, nombres de objetos creados, constantes, delimitadores, operadores y datos.
Delimitadores
Son un subconjunto de caracteres que separan elementos de una sentencia SQL: espacio, coma, punto y coma, dos puntos, igual, paréntesis, apostrofes, comillas, etc. Su empleo depende de cada sentencia y de los objetos que contiene.
Operadores
Sirven para obtener nuevos datos a partir de uno ya existente. Se pueden localizar operaciones con números aritméticas, cadenas de caracteres, fechas, campos booleanos, binarios, etc.
La procedencia de los tipos de datos permite conocer el tipo de datos obtenido cuando se efectúan operaciones entre distintos tipos. Su orden, de mayor a menor, para SQL Server es: datetime, smalltime, float, real, decimal, money, smallmoney, int, smallint, tinyint, bit, ntext~ text, image, timestamp, nvarchar, varehar, ehar~ varbinary, binary, uniqueidentificator.
Los operadores de comparación devuelven un resultado booleano como resultado. Se han definido los siguientes operadores ANSI de comparación: igual (-), distinto (~>), mayor que (>), menor que (<), mayor 0 igual que (>=, menor o igual que (=).
Datos y Nulos
Un dato es una unidad de información con sentido en si misma que se almacena en un campo, una constante o una variable. Dependiendo del contenido de la información almacenada, los daros pertenecen a diferentes tipos: cadenas de caracteres, fechas o números entre otros.
Un valor nulo (NULL) es un valor no asignable en especial a un determinado tipo de datos, cuyo significado es: no se ah definido un valor previo para este dato; el valor de este dato es desconocido. Los valores nulos se diferencian de ceros y espacios en blanco, ya que en estos últimos casos se ah asignado información a un campo o dato correspondiente por lo que ese campo no ha sido utilizado.
Expresiones y Predicados
Una expresión es una combinación de operadores y operandos. Los operandos son contenedores de información, datos, constantes y variables y se ligan unos con otros mediante operadores.
Los predicados, expresiones contenidas en órdenes de SQL, permiten expresar condiciones en diferentes órdenes, obteniéndose un valor booleano. El resultado de la evaluación varía de las condiciones para cada registro.
Los predicados se clasifican en los siguientes tipos de comparación:
BETWEEN, IN, LIKE, NULL y los cuantificados que son EXIST, UNIQUE, MATCH, OVERLAPS, SIMILAR, DISTINCT y TYPE.