SQL
Generalidades
SQL (Structured Query Language, lenguaje estructurado de consulta) es un lenguaje de consulta utilizado para manipular bases de datos relacionales.
Fue desarrollado a mediados de los años 70 por IBM y lo comenzó a comercializar Oracle en 1979.
El interés del SQL reside en las siguientes características:
Normalización
Implementa el modelo relacional y se describe en los estándares de los principales organismos de normalización, que lo describen como sigue:
-
El instituto ANSI (American National Standards Institute) lo describe en sus documentos ANSI 9075-1:1999, ANSI 9075-2:1999 y ANSI 9075-5:1999. Puede obtener más detalles sobre estos documentos que describen la norma visitando el sitio web de ANSI (http://webstore.ansi.org) o bien el sitio web de NCITS (National Comittee for Information Technology Standards) que incluye parte de los estándares ANSI sobre SQL (http://www.incits.org).
-
ISO (International Organisation for Standardization) lo describe en los documentos ISO/IEC 9075-1:1999, ISO/IEC 9075-2:1999 e ISO/IEC 9075-5:1999. Puede obtener una copia de los documentos de normalización en el sitio web de ISO: http://www.iso.ch/iso/iso_catalogue.html.
Estándar
Debido a esta normalización, la mayor parte de los creadores de sistemas de bases de datos relacionales integran el SQL en sus productos (INFORMIX, DB2, MS SQL Server, SYBASE...).
Los datos, consultas y aplicaciones pueden por tanto migrarse con bastante facilidad de una base de datos a otra.
No procedimental
El SQL es un lenguaje de consulta que permite al usuario solicitar un resultado sin preocuparse de los medios técnicos necesarios para obtener dicho resultado. Un componente del motor de la base de datos (el optimizador) se encarga de esta tarea.
Las instrucciones se escriben en inglés, en lenguaje natural.
El SQL permite manipular tanto registros individuales como conjuntos de registros y permite el uso del resultado en otro comando. Por tanto, no son necesarias estructuras de control como en los lenguajes de programación habituales (lenguajes de tercera generación).
Universal
El lenguaje SQL puede utilizarse en todos los niveles de la gestión de una base de datos:
-
administración del sistema,
-
administración de la base de datos,
-
desarrollo y aplicaciones,
-
gestión de datos simple.
Todos los usuarios de la base de datos disponen por tanto...
Descripción de objetos
Cuando se emplea una base de datos, los primeros objetos que hay que manipular son las tablas, que "contienen" los datos, y los índices, que permiten obtener un mejor rendimiento de las consultas.
Estos dos tipos de objetos se deben crear antes de comenzar a manipular los datos en sí.
1. Tipos
CHAR (n)
Cadena de caracteres de longitud fija de n bytes, que se completa añadiendo espacios a la derecha (n <= 2000).
VARCHAR2 (n)
Cadena de caracteres de longitud variable, de n bytes como máximo (n <= 4000 si el argumento MAX_STRING_SIZE es igual a STANDARD; n <= 32767 si el argumento MAX_STRING_SIZE es igual a EXTENDED).
NCHAR (n)
Cadena de caracteres de longitud fija de n bytes, que se completan añadiendo espacios a la derecha (n <= 2000). Los caracteres se codifican de acuerdo con el juego de caracteres nacional activo.
NVARCHAR2 (n)
Cadena de caracteres de longitud variable, de n bytes como máximo (n <= 4000 si el argumento MAX_STRING_SIZE es igual a STANDARD; n <= 32767 si el argumento MAX_STRING_SIZE es igual a EXTENDED). Los caracteres se codifican de acuerdo con el juego de caracteres nacional activo.
NUMBER (p,s)
Número con una precisión de p cifras, de las cuales s son decimales, siendo (1 <= p <= 38 y -84 <= s <= +127).
DATE
Fecha comprendida entre el 1 de enero de 4712 a.C. y el 31 de diciembre de 9999 d.C.
TIMESTAMP (p)
Datos de tipo Date (año, mes, día, hora, minutos y segundos) en los que es posible especificar, con una precisión p, el número de cifras significativas para las fracciones de segundo. El valor predeterminado es 6.
TIMESTAMP(p) WITH TIME ZONE
Datos de tipo TIMESTAMP con desplazamiento de zona horaria.
TIMESTAMP(p) WITH LOCAL TIME ZONE
Datos de tipo TIMESTAMP WITH TIME ZONE que están almacenados en el servidor teniendo en cuenta la zona horaria del mismo, pero que se muestran en el equipo del cliente teniendo en cuenta la zona horaria definida en el nivel de sesión.
BLOB
Datos binarios no estructurados (hasta 128 TB como máximo, dependiendo del tamaño del bloque utilizado en la base de datos).
CLOB
Cadena de caracteres de longitud variable (hasta 128 TB como máximo, dependiendo del tamaño del bloque utilizado en la base de datos). Solo puede contener caracteres codificados con 1 byte.
NCLOB
Cadena de caracteres de longitud...
Manipulación de los datos
Las instrucciones DML permiten añadir, eliminar, modificar y visualizar las filas contenidas en las tablas existentes.
1. Instrucciones
Las instrucciones SQL manipulan expresiones. Estas expresiones hacen referencia a constantes y nombres de objetos de la base de datos, realizan llamadas a funciones estándar y establecen relaciones entre estos elementos mediante el uso de operadores.
Las expresiones lógicas (condiciones) también permiten definir el ámbito de las instrucciones.
a. Expresiones
Los términos de las expresiones pueden ser:
-
constantes de caracteres
ejemplo: ’cadena de caracteres’; ’Escuela de Informática’.
-
constantes literales de fecha (el formato depende del idioma que se haya configurado para la instancia)
ejemplo: ’15-JAN-94’
-
constantes numéricas
ejemplo: 10; -123.459; -1.26e+6
-
nombres de atributos de tabla
ejemplo: CLIENTES.NUMCLI; ARTICULOS.DESCRIPCION
-
funciones
ejemplo: SQRT(81); REPLACE(’IAGADIGI’, ’I’, ’OU’); SYSDATE
-
pseudo-columnas
ejemplo: nombresecuencia.NEXTVAL; ROWID.
b. Operadores
-
Aritméticos + - / * ( )
ejemplo: 1.15 * PRECIO; (2 * IMPLIN)/5; SYSDATE +15
-
Sobre cadenas de caracteres: concatenación: ||
ejemplo: ’Señor’|| NOMBRE
c. Condiciones
Las condiciones emplean expresiones, operadores de comparación y operadores lógicos.
Operadores de comparación
El valor de las expresiones lógicas puede ser VERDADERO, FALSO o DESCONOCIDO. Una comparación se evaluará como DESCONOCIDO si al menos uno de los términos es NULL.
-
Comparación simple
expresión1 {=,!=,<>, <,<=, >, >=} expresión2
-
Pertenencia a un conjunto de valores
expresión1 IN (expresión2,...)
VERDADERO si expresión1 aparece al menos una vez en la lista (expresión2, ...).
-
Pertenencia a un intervalo de valores
expresión1 BETWEEN expresión2 AND expresión3
VERDADERO si expresión1 se encuentra entre los valores límite determinados por expresión2 y expresión3, ambos inclusive.
-
Comparación con un formato de cadena de caracteres.
expresión1 LIKE ’formato’
El formato puede incluir los metacaracteres:
-
- "%" para designar una serie de 0 a n caracteres
-
- "_" para designar un único...
Traducción del álgebra relacional
El método del álgebra relacional permite resolver extracciones de datos creando tablas intermedias mediante el uso de operadores (unión, restricción, combinación, etc.). Este método puede traducirse a SQL mediante la instrucción SELECT, que permite llevar a cabo todas las operaciones mediante sus diferentes cláusulas (WHERE, GROUP BY, UNION, etc.), y mediante las instrucciones CREATE e INSERT, que permiten la gestión de las tablas intermedias.
1. Operaciones
a. Restricción
La restricción permite extraer solo aquellas filas que cumplan una condición.
SELECT * FROM S WHERE condición;
Ejemplo
Restricción sobre el número de pedido en la tabla PED = PEDIDOS (NUMPED = 100):
SQL> select * from PEDIDOS where NUMPED=100;
NUMPED NUMCLI FECHAPED ES
---------- ---------- -------- -
100 15 18/11/02 EC
SQL>
b. Campos calculados elementales
SELECT col, ..., expresión FROM S;
Ejemplo
Cálculo del valor del almacén ARTICULOS(REFART, DESCRIPCION, VALALM = (PRECIOSINIVA * CANTALM))
SQL> select REFART, DESCRIPCION, (PRECIO * CANTALM) from ARTICULOS;
REFA DESCRIPCION (PRECIO*CANTALM)
---- ------------------------------ ---------------
ZZZZ CANTIMPLORA
ZZ01 LOTE ALFOMBRAS 0
AA00 REGALO 0
CD50 CADENA HIFI 5147,8
AB ALFOMBRA
AB10 Alfombra china 12501
AB03 Alfombras 17400
AB22 ALFOMBRA...
SQL avanzado
El lenguaje SQL permite emplear otros objetos, además de las tablas y los índices, para gestionar los datos o manipular las consultas.
Por otro lado, la potencia de la instrucción SELECT permite combinar las diferentes cláusulas en un único comando, así como anidar consultas.
Por último, en un entorno multiusuario, SQL permite bloquear las tablas para preservar la integridad de los datos.
1. Los objetos
a. Objetos View (vista)
Las vistas son tablas virtuales que presentan el resultado de una instrucción SELECT.
Una de las principales ventajas de utilizar vistas procede del hecho de que la vista no almacena los datos, sino que hace referencia a una o varias tablas de origen mediante una consulta SELECT, consulta que se ejecuta cada vez que se hace referencia a la vista. De este modo, cualquier modificación que se realice sobre los datos de las tablas de origen es inmediatamente visible en la vista, cuando ésta vuelve a ejecutarse.
Los casos en que se emplean las vistas son diversos:
-
Para ocultar a los usuarios determinadas columnas o filas, poniendo a su disposición vistas de proyección o de restricción. Esto permite proporcionar un nivel de seguridad adicional.
-
Para simplificar el uso de tablas que incluyan muchas columnas, muchas filas o nombres complejos, creando vistas con estructuras más sencillas y nombres más explícitos.
-
Para "salvaguardar" las consultas utilizadas con mayor frecuencia, empleando un nombre para designarlas.
-
Para simplificar la introducción de instrucciones SQL por parte de los usuarios, enmascarando las combinaciones utilizadas con mayor frecuencia.
Una vez creadas, las vistas se emplean como las tablas en las instrucciones DML, INSERT, SELECT, UPDATE, DELETE. Sin embargo, no es posible realizar actualizaciones si la vista contiene:
-
instrucciones para operaciones de conjuntos (UNION, INTERSECT, MINUS),
-
funciones de grupo,
-
cláusulas GROUP BY, CONNECT BY, START WITH.
Una vista definida mediante una combinación soporta las instrucciones INSERT, UPDATE, DELETE, si hace referencia en su definición a una tabla cuya(s) columna(s) de clave primaria aparecen en la lista de las columnas proyectadas de la combinación y si las instrucciones INSERT, UPDATE, DELETE se aplican sobre dicha tabla.
Creación
Sintaxis
CREATE [OR REPLACE] [FORCE | NO FORCE] VIEW nombre
[(columnas...