TEMA 12 – Lenguaje de interrogación de bases de datos11 min read

Tema 12. Lenguaje de interrogación de bases de datos.
Estándar ANSI SQL.
Lenguaje de definición de datos (DDL).
Lenguaje de manipulación de datos (DML)
Lenguaje de consulta de datos (DQL).

 

El SQL es el lenguaje estándar ANSI/ISO de definición, manipulación y control de bases de datos relacionales.

Es un lenguaje declarativo: sólo hay que indicar qué se quiere hacer.

En cambio, en los lenguajes procedimentales es necesario especificar cómo hay que hacer cualquier acción sobre la base de datos. El SQL es un lenguaje muy parecido al lenguaje natural; concretamente, se parece al inglés, y es muy expresivo. Por estas razones, y como lenguaje estándar, el SQL es un lenguaje con el que se puede acceder a todos los sistemas relacionales comerciales.

Empezamos con una breve explicación de la forma en que el SQL ha llegado a ser el lenguaje estándar de las bases de datos relacionales:

1) Al principio de los años setenta, los laboratorios de investigación Santa Teresa de IBM empezaron a trabajar en el proyecto System R. El objetivo de este proyecto era implementar un prototipo de Sistema Gestor de Base de Datos relacional; por lo tanto, también necesitaban investigar en el campo de los lenguajes de bases de datos relacionales.

A mediados de los años setenta, el proyecto de IBM dio como resultado un primer lenguaje denominado SEQUEL (Structured English Query Language), que por razones legales se denominó más adelante SQL (Structured Query Language).

Al final de la década de los setenta y al principio de la de los ochenta, una vez finalizado el proyecto System R, IBM y otras empresas empezaron a utilizar el SQL en sus sistema gestor de base de datos relacionales, con lo que este lenguaje adquirió una gran popularidad.

2) En 1982, ANSI (American National Standards Institute) encargó a uno de sus comités (X3H2) la definición de un lenguaje de bases de datos relacionales. Este comité, después de evaluar diferentes lenguajes, y ante la aceptación comercial del SQL, eligió un lenguaje estándar que estaba basado en éste prácticamente en su totalidad.

El SQL se convirtió oficialmente en el lenguaje estándar de ANSI en el año 1986, y de ISO (International Standards Organization) en 1987. También ha sido adoptado como lenguaje estándar por FIPS (Federal Information Processing Standard), Unix X/Open y SAA (Systems Application Architecture) de IBM.

3) En el año 1989, el estándar fue objeto de una revisión y una ampliación que dieron lugar al lenguaje que se conoce con el nombre de SQL1 o SQL89.

En el año 1992 el estándar volvió a ser revisado y ampliado considerablemente para cubrir carencias de la versión anterior. Esta nueva versión del SQL, que se conoce con el nombre de SQL2 o SQL92, es la que nosotros abordaremos.

Aunque aparezcan sólo las siglas SQL, siempre nos estaremos refiriendo al SQL92, ya que éste tiene como subconjunto el SQL89; por lo tanto, todo lo que era válido en el caso del SQL89 lo continuará siendo en el SQL92.

De hecho, se pueden distinguir tres niveles dentro del SQL92:

1) El nivel introductorio (entry), que incluye el SQL89 y las definiciones de clave primaria y clave foránea al crear una tabla.

2) El nivel intermedio (intermediate), que, además del SQL89, añade algunas ampliaciones del SQL92.

3) El nivel completo (full), que ya tiene todas las ampliaciones del SQL92.

 

El modelo relacional tiene como estructura de almacenamiento de los datos las relaciones.

La intención de una relación consiste en el nombre que hemos dado a la relación y un conjunto de atributos. La extensión de una relación es un conjunto de tuplas. Al trabajar con SQL, esta nomenclatura cambia:

• Hablaremos de tablas en lugar de relaciones.

• Hablaremos de columnas en lugar de atributos.

• Hablaremos de filas en lugar de tuplas.

 

Sin embargo, a pesar de que la nomenclatura utilizada sea diferente, los conceptos son los mismos.

Con el SQL se puede definir, manipular y controlar una base de datos relacional.

Para utilizar SQL desde un lenguaje de programación necesitaremos sentencias especiales que nos permitan distinguir entre las instrucciones del lenguaje de programación y las sentencias de SQL.

La idea es que trabajando básicamente con un lenguaje de programación anfitrión se puede cobijar SQL como si fuese un huésped.

Por este motivo, este tipo de SQL se conoce con el nombre de SQL hospedado.

Para trabajar con SQL hospedado necesitamos un precompilador que separe las sentencias del lenguaje de programación de las del lenguaje de bases de datos.

Una alternativa a esta forma de trabajar son las rutinas SQL/CLI* (SQL/Call-Level Interface), que resolviendo también el problema de acceder a SQL desde un lenguaje de programación, no necesitan precompilador.

 

Aunque SQL es el lenguaje estándar para bases de datos relacionales y ha sido ampliamente aceptado por los sistemas relacionales comerciales, no ha sido capaz de reflejar toda la teoría del modelo relacional establecida por E.F. Codd.

Los sistemas relacionales comerciales y los investigadores de bases de datos son una referencia muy importante para mantener el estándar actualizado.

En estos momentos ya se dispone de una nueva versión de SQL92 que se denomina SQL1999 o SQL3. SQL: 1999 tiene a SQL92 como subconjunto, e incorpora nuevas prestaciones de gran interés.

En estos momentos la última versión de la que se dispone es SQL: 2008. Pero con
anterioridad habían aparecido, respectivamente, SQL: 2003 y SQL: 2006. Las
principales novedades de estos últimos estándares tienen que ver con como
utilizar SQL en conjunción con XML.

En informática, en general, y particularmente en bases de datos, es necesario estar siempre al día, y por eso es muy importante tener el hábito de leer publicaciones periódicas que nos informen y nos mantengan al corriente de las novedades.

 

Las operaciones de SQL se llaman sentencias y están formadas por diferentes
partes que denominamos cláusulas.

 

////////////////////////////////////////////////////////////

En su primera versión del SQL-89 se tienen tres partes:
• El lenguaje de definición de datos (LDD). Contiene todas las instrucciones
para definir el esquema de una base de datos, como son: create, alter y drop.
• El lenguaje de manipulación de datos (LMD). Contiene las instrucciones de
manejo de las tablas como son: select, insert, delete y update, y para
control de concurrencia como: commit y rollback.
• El lenguaje de control de datos (LCD). Contiene aquellas instrucciones para
dar y revocar permisos de acceso a los datos de la base de datos, como son:
grant y revoke.

 

Todas las sentencias SQL comienzan con un verbo, una palabra clave que describe lo que la sentencia hace. CREATE, INSERT, DELETE, COMMIT son verbos típicos. La
sentencia continua con una o más cláusulas. Una cláusula puede especificar los datos sobre los que debe actuar la sentencia, o proporcionar más detalles acerca de lo que la sentencia debe hacer. Todas las cláusulas comienzan también con una palabra clave, tal como WHERE, FROM, INTO y HAVING. Algunas cláusulas son opcionales, otras necesarias. La estructura y contenido específico varían de una cláusula a otra. Muchas cláusulas contienen nombres de tablas o columnas; algunas pueden contener palabras claves adicionales, constantes o expresiones.

 

Definición de tablas y esquemas
Definición de Esquemas
La definición de un esquema es simple. Sólo se necesita identificar el comienzo de la definición con una instrucción CREATE SCHEMA y una cláusula adicional
AUTHORIZATION y a continuación definir cada dominio, tabla, vista y demás en el
esquema.

Por ejemplo:

CREATE SCHEMA EMPRESA_CL
AUTHORIZATION DUEÑO
definición de dominios
definición de tablas
definición de vistas
etc.

El dueño del esquema, o propietario del esquema puede otorgar privilegios de acceso y actualización de la base de datos definida en el esquema a otros usuarios del sistema.

 

Tipos de datos y dominios
Un dominio es un conjunto del cual toma sus valores una columna de una relación.
Según este concepto, los tipos de datos predefinidos son dominios. Adicionalmente SQL-92 permite la definición de dominios por parte de los usuarios.

 

Definición de dominios:
Los tipos de datos con restricciones (constrains) y valores por defecto (default values) se pueden combinar en la definición de dominios. Una definición de dominio es un tipo de datos especializado que puede estar definido dentro de un esquema y utilizado en la definición de columnas.

Por ejemplo:

CREATE DOMAIN IDENTIFICADOR NUMERIC(4) DEFAULT 0
CHECK (VALUE IS NOT NULL)

Esta definición dice que un dominio llamado IDENTIFICADOR tiene las siguientes
propiedades:

1. Su tipo de datos es numérico de cuatro dígitos.
2. Su valor por defecto es 0.
3. Nunca puede ser nulo.

 

Definición de Tablas
Las tablas se definen en tres pasos:

1. Dar el nombre de la tabla.
2. Definir cada columna, posiblemente incluyendo restricciones de columna.
3. Definir las restricciones de la tabla.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. Sentencias de definición de datos

Para poder trabajar con bases de datos relacionales, lo primero que tenemos que hacer es definirlas.

La sencillez y la homogeneidad de SQL hacen que:

1. Para crear bases de datos, tablas, dominios y aserciones se utilice la sentencia CREATE.

2. Para modificar tablas y dominios se utilice la sentencia ALTER.

3. Para borrar bases de datos, tablas, dominios y aserciones se utilice la sentencia DROP.

 

1.1. Creación y borrado de una BD relacional
SQL estándar no dispone de ninguna sentencia de creación de BD.

La idea es que una base de datos no es nada más que un conjunto de tablas y, por lo tanto, las sentencias que SQL nos ofrece se concentran en la creación, la modificación y el borrado de estas tablas.

 

Muchos de los sistemas relacionales comerciales (como es el caso de Informix, DB2, SQL Server y otros) han incorporado sentencias de creación de base de datos con la siguiente sintaxis: CREATE DATABASE

En cambio, en SQL, disponemos de una sentencia más potente que la de creación de bases de datos, la sentencia de creación de esquemas llamada CREATE SCHEMA.

Para borrar una base de dato encontramos el mismo problema que para crearla. SQL nos ofrece sólo la sentencia de borrado de esquemas DROP SCHEMA, que tiene la siguiente sintaxis:

DROP SCHEMA {RESTRICT | CASCADE}

• La opción de borrado de esquemas RESTRICT hace que el esquema sólo se
pueda borrar si no contiene ningún elemento.

• La opción CASCADE borra el esquema aunque no esté completamente vacío..

 

Muchos de los sistemas relacionales comerciales (como Informix, DB2, SQL Server y
otros) han incorporado sentencias de borrado de BD con la siguiente sintaxis:
DROP DATABASE.

 

1.2. Creación de tablas
La estructura de almacenamiento de los datos del modelo relacional son las tablas. Para crear una tabla hay que utilizar la sentencia CREATE TABLE.

 

1.2.1. Tipos de datos
Para cada columna tenemos que escoger entre algún dominio definido por el
usuario o alguno de los tipos de datos predefinidos que se describen a continuación:

CHARACTER (longitud): Cadenas de caracteres de longitud fija.
CHARACTER VARYING (longitud): Cadenas de caracteres de longitud variable.
BIT (longitud): Cadenas de bits de longitud fija.
BIT VARYING (longitud): Cadenas de bits de longitud variable.
NUMERIC (precisión, escala): Números decimales con tantos dígitos como indique la precisión y tantos decimales como indique la escala.
DECIMAL (precisión, escala): Números decimales con tantos dígitos como indique la precisión y tantos decimales como indique la escala.
INTEGER: Números enteros.
SMALLINT: Números enteros pequeños.
REAL: Números con coma flotante con precisión predefinida.
FLOAT (precisión): Números con coma flotante con la precisión especificada.
DOUBLE PRECISION: Números con coma flotante con más precisión predefinida que la del tipo REAL.

DATE: Fecha, se componen de: YEAR año, MONTH mes, DAY día.

TIME: Horas, se componen de: : HOUR hora, MINUT minutos, SECOND segundos.

TIMESTAMP: Fechas y horas. Se componen de: YEAR año, MONTH mes, DAY día, HOUR hora, MINUT minutos, SECOND segundos