Páginas

martes, 7 de enero de 2014

4.3. Visión general del lenguaje

Normalmente, cuando un SGBD relacional implementa el lenguaje SQL,
todas las acciones que se pueden llevar a cabo sobre el sistema se realizan
mediante sentencias de este lenguaje. Dentro de SQL hay varios tipos de sentencias que se agrupan en tres conjuntos:
Sentencias de definición de datos: son las sentencias que permiten crear
tablas, alterar su definición y eliminarlas. En una base de datos relacional
existen otros tipos de objetos además de las tablas, como las vistas, los
índices y los disparadores, que se estudiarán más adelante. Las sentencias
para crear, alterar y eliminar vistas e índices también pertenecen a este
conjunto.
Sentencias de manejo de datos: son las sentencias que permiten insertar

datos en las tablas, consultarlos, modificarlos y borrarlos.
Sentencias de control: son las sentencias que utilizan los administradores
de la base de datos para realizar sus tareas, como por ejemplo crear
usuarios y concederles o revocarles privilegios.

Las sentencias de SQL se pueden escribir tanto en mayúsculas como en
minúsculas, y lo mismo sucede con los nombres de las tablas y de las columnas. Para facilitar la lectura de los ejemplos, se utilizará mayúsculas para las
palabras clave del lenguaje y minúsculas para los nombres de tablas y de columnas. En los ejemplos se introducirán espacios en blanco para tabular las
expresiones. Las sentencias de SQL terminan siempre con el carácter punto y
coma (;).
4.3.1. Creación de tablas
Para crear una tabla en una base de datos se utiliza la sentencia CREATE
TABLE. Su sintaxis es la siguiente:

A continuación se especifica el significado de cada identificador y de cada
cláusula de la sentencia CREATE TABLE:
nombre_tabla: nombre de la nueva tabla.
nombre_columna: nombre de una columna de la tabla.
tipo_datos: tipo de datos de la columna.
DEFAULT expr: asigna un valor por defecto a la columna junto a la que
aparece; este valor se utilizará cuando en una inserción no se especifique
valor para la columna.
CONSTRAINT nombre_restricción: a las restricciones que se definen sobre columnas y sobre tablas se les puede dar un nombre (si no se hace,
el sistema generará un nombre automáticamente).
NOT NULL: la columna no admite nulos.
NULL: la columna admite nulos (se toma por defecto si no se especifica
NOT NULL).
UNIQUE especificada como restricción de columna indica que la columna
sólo puede contener valores únicos. UNIQUE (nombre_columna [,...])
especificada como restricción de tabla indica que el grupo de columnas
sólo pueden contener grupos de valores únicos. Mediante esta cláusula se
especifican las claves alternativas.
PRIMARY KEY especificada como restricción de columna o bien PRIMARY
KEY (nombre_columna[,...]) especificada como restricción de tabla indica la columna o el grupo de columnas que forman la clave primaria de
la tabla. Los valores de la clave primaria, además de ser únicos, deberán
ser no nulos.
CHECK (expr): permite incluir reglas de integridad específicas que se
comprueban para cada fila que se inserta o que se actualiza. La expresión
es un predicado que produce un resultado booleano. Si se especifica a
nivel de columna, en la expresión sólo puede hacerse referencia a esta
columna. Si se especifica a nivel de tabla, en la expresión puede hacerse
referencia a varias columnas. Por ahora no se puede incluir subconsultas
en esta cláusula.
Restricción de columna:
REFERENCES tablaref [ ( columnaref ) ]
[ ON DELETE acción ] [ ON UPDATE acción ]
Restricción de tabla:
FOREIGN KEY ( nombre_columna [, ... ] )
REFERENCES tablaref [ ( columnaref [, ... ] ) ]
[ MATCH FULL | MATCH PARTIAL ]
[ ON DELETE acción ] [ ON UPDATE acción ]
La restricción de columna REFERENCES permite indicar que la columna
hace referencia a una columna de otra tabla. Si la referencia apunta a
la clave primaria, no es necesario especificar el nombre de la columna a
la que se hace referencia (estamos definiendo una clave ajena). Cuando
se añade o actualiza un valor en esta columna, se comprueba que dicho
valor existe en la tabla referenciada. Cuando la restricción es a nivel
de tabla (FOREIGN KEY) hay dos tipos de comprobación: MATCH FULL
y MATCH PARTIAL. Con MATCH FULL, si la clave ajena está formada por
varias columnas y admite nulos, esta comprobación es la que corresponde
a la regla de integridad referencial: en cada fila, o todas las columnas
de la clave ajena tienen valor o ninguna de ellas lo tiene (todas son
nulas), pero no se permite que en una misma fila, algunas sean nulas y
otras no. Con MATCH PARTIAL, si la clave ajena está formada por varias
columnas y admite nulos, se permiten claves ajenas parcialmente nulas
y se comprueba que en la tabla referenciada se podría apuntar a alguna
de sus filas si los nulos se sustituyeran por los valores adecuados.
Además, se pueden establecer reglas de comportamiento para cada clave
ajena cuando se borra o se actualiza el valor referenciado. En ambos
casos hay cuatro posibles opciones que se enumeran a continuación. NO
ACTION produce un error por intento de violación de una restricción.
RESTRICT es igual que NO ACTION. CASCADE borra/actualiza las filas que
hacen referencia al valor borrado/actualizado. SET NULL pone un nulo
en las filas donde se hacía referencia al valor borrado/actualizado. SET
DEFAULT pone el valor por defecto en las filas donde se hacía referencia
al valor borrado/actualizado.
A continuación se muestra la sentencia de creación de la tabla LINEAS_FAC:

4.3.2. Inserción de datos
Una vez creada una tabla podemos introducir datos en ella mediante la
sentencia INSERT, como se muestra en los siguientes ejemplos:

Mediante estas sentencias se ha introducido la cabecera de una factura y tres
de sus líneas. Nótese que tanto las cadenas de caracteres como las fechas, se
introducen entre comillas simples. Para introducir nulos se utiliza la expresión
NULL.
Algunos SGBD relacionales permiten insertar varias filas en una misma
tabla mediante una sola sentencia INSERT, y realizan las inserciones de un
modo más eficiente que si se hace mediante varias sentencias independientes.
Así, la tres inserciones que se han realizado en la tabla LINEAS_FAC también
se pueden realizar mediante la siguiente sentencia:

4.3.3. Consulta de datos
Una vez se ha visto cómo almacenar datos en la base de datos, interesa
conocer cómo se puede acceder a dichos datos para consultarlos. Para ello se
utiliza la sentencia SELECT. Por ejemplo:
SELECT *
FROM
facturas;
En primer lugar aparece la palabra SELECT, que indica que se va a realizar una
consulta. A continuación, el * indica que se desea ver el contenido de todas
las columnas de la tabla consultada. El nombre de esta tabla es el que aparece
tras la palabra FROM, en este caso, la tabla facturas.
Esta sentencia es, sin lugar a dudas, la más compleja del lenguaje de manejo
de datos y es por ello que gran parte de este capítulo se centra en su estudio.

4.3.4. Actualización y eliminación de datos
Una vez insertados los datos es posible actualizarlos o eliminarlos mediante
las sentencias UPDATE y DELETE, respectivamente. Para comprender el funcionamiento de estas dos sentencias es imprescindible conocer bien el funcionamiento de la sentencia SELECT. Esto es así porque para poder actualizar o
eliminar datos que se han almacenado es preciso encontrarlos antes. Y por lo
tanto, la cláusula de estas sentencias que establece las condiciones de búsqueda
de dichos datos (WHERE) se especifica del mismo modo que las condiciones de
búsqueda cuando se hace una consulta.
Sin embargo, antes de pasar al estudio de la sentencia SELECT se muestran
algunos ejemplos de estas dos sentencias.
4.4. Estructura básica de la sentencia SELECT

No hay comentarios:

Publicar un comentario