Documentos de Académico
Documentos de Profesional
Documentos de Cultura
¿Qué es Access?
Una Base de Datos se puede definir como un conjunto de información relacionada que se
encuentra agrupada o estructurada. La BD es un sistema formado por un conjunto de
datos almacenados, que permite el acceso directo a ellos y un conjunto de programas que
manipulan ese conjunto de datos.
En algunos otros sistemas, como DBase, una base de datos es un directorio del disco en
el que se encuentran multitud de archivos que contienen los datos y los objetos.
Tablas. Las tablas se pueden definir como una colección de registros. El diseño de
tablas consiste en el diseño de campos necesarios para almacenar correctamente la
información.
Consultas. Operaciones que pueden realizarse sobre los datos de las tablas:
selección de datos, inserción, modificación, eliminación, entre otros.
Formularios. Pantallas que se presentan a los usuarios de una BD para que tengan
un acceso amigable a los datos y operaciones.
Reportes. Formatos de presentación de los datos para generar copias impresas de la
información registrada en la BD.
Macros. Conjunto de instrucciones que se pueden almacenar para automatizar tareas
repetitivas.
Módulos. Segmentos de código en lenguaje de alto nivel que permiten realizar
operaciones complejas con los datos y objetos de la BD.
Al crear una base de datos vacía en Access, en ella se almacenan algunos datos y
objetos del sistema, los cuales están ocultos al usuario y al programador. Por lo tanto,
antes de tener acceso a la base de datos vacía, se debe tener un directorio para
guardarla en disco. Ahora, el paso a realizar, es la creación de la nueva BD.
Para crear la nueva BD, es necesario acceder la opción Nueva (new) del menú Archivo
(file) y seleccionar Base de Datos Vacía (blank database); y en la pantalla que aparece,
deberá dar un nombre a la nueva BD.
El archivo de una Base de Datos Access tiene la extensión MDB (Microsoft DataBase).
Además de este archivo, puede existir otro con la extensión LDB. Este último contiene
información de bloqueo de registros, que permite el acceso seguro de múltiples usuarios
de forma concurrente. El archivo de la BD permanece abierto mientras se trabaja con la
BD, y únicamente se cierra cuando la BD es cerrada de forma explícita, con la opción
correspondiente. Si por cualquier problema la BD no se cierra correctamente, ésta podría
dañarse.
MANEJO DE TABLAS
Introducción
Las tablas son las estructuras que permiten almacenar los datos en la BD.
Una tabla es un conjunto de registros. Cada registro estará compuesto por una colección
de campos. Cada campo tendrá un tipo que indica la clase de datos que puede
almacenar. Y cada tipo tendrá ciertos atributos que limitan el dominio de los valores
permitidos, así como una serie de restricciones y normas.
A manera de ilustración, se puede tener una tabla para almacenar datos sobre los
alumnos registrados en determinada asignatura. La tabla puede denominarse “Alumnos” y
estará compuesta de registros con los siguientes campos:
Campo Descripción
AP Apellido paterno
AM Apellido materno
Edad Edad
Una vez definidos los campos necesarios se debe proceder a crear la tabla.
campos y sus características. En la opción de Asistenta para Tablas (create table by using
wizard), un programa guía al usuario automáticamente en la creación de los campos de la
tabla; y la opción Vista Hoja de Datos (create table by entering data), permite introducir los
datos directamente.
Para cada campo que se defina, se le deberá asignar un nombre, un tipo y una
descripción. Además, para cada tipo existen una serie de atributos que permiten describir
con precisión el dominio de valores aceptados por el campo.
Tipos de Datos
Los principales tipos de datos disponibles para las bases de datos son:
Text (texto). Una cadena de caracteres de longitud limitada. La longitud máxima se
define como uno de los atributos, y no puede ser mayor de 255 caracteres. El espacio
utilizado en disco por este campo corresponde a la longitud máxima definida. Un atributo
importante del tipo texto es si permite o no la longitud cero.
Memo (memo). Una cadena de caracteres de longitud ilimitada. El espacio ocupado
en disco depende del texto almacenado. Tiene como desventaja con respecto al tipo
texto, que no permite algunas operaciones como: ordenamiento y agrupación de los
registros.
Number (numérico). Número entero o real. Existen diversos tamaños y precisiones:
byte, integer, long integer, decimal, double, entre otros.
Date/Hour (fecha/hora). Fecha, hora o ambos a la vez. Existen diversos formatos de
fecha y hora que pueden ser definidos como atributos.
Atributos Comunes
Cada uno de los tipos de datos dispone de atributos propios, por ejemplo, la precisión
decimal y el rango de valores en los campos numéricos, así como la longitud de cadena
para los campos de texto. Existe una serie de atributos comunes, que se describen a
continuación:
Format (formato). Se puede utilizar la propiedad de formato para personalizar la
manera en que los números, fecha, hora y textos se despliegan o imprimen. Se pueden
utilizar los formatos predefinidos o se pueden crear formatos especiales utilizando la
simbología correspondiente. La propiedad de formato afecta únicamente la forma en la
que la información es presentada, no afecta la forma en que la información es
almacenada.
Símbolo Significado
Ejemplos:
El ejemplo, utiliza un formato personalizado para desplegar la fecha. El formato con el que
se despliega la fecha es el siguiente: Jan 1995.
Carácter Descripción
.,:;-/ Separadores
Ejemplo:
Mascara Ejemplo
LLLL000000-
ROGA431009-T52
AAA
Sobre un campo que se emplea como llave primaria, forzosamente debe formarse un
índice sin duplicado, y no deben aceptarse valores nulos.
Numérico
Edad Edad >018 AND <=65
byte
Calificación
Numérico 1 decimal; predeterminado 0; >=0
Practicas obtenida en las
simple AND <=2
prácticas
Introducción de Datos
El modo de Ver Datos (view) de una tabla, presenta una tabla formada por filas y
columnas. Una fila corresponde a un registro y cada columna a un campo. Inicialmente la
tabla estará vacía. Al final de la tabla siempre aparece una fila en blanco destinada a la
inserción de nuevos registros.
Antes de salir de un campo, se verifican las reglas de validación del mismo, de manera
que no se acepta el cambio hasta que todas las reglas asociadas al campo son
cumplidas. Así mismo, antes de abandonar un registro se comprobarán las reglas
asociadas al mismo, y no se grabarán los datos mientras no se cumpla alguna.
Integridad Referencial
Tipos de Relaciones
Entre dos tablas de cualquier BD relacional, puede haber dos tipos de relaciones: uno a
uno y uno a muchos.
Relación uno a uno. Cuando un registro de una tabla sólo puede estar relacionado
con un único registro de otra tabla y viceversa.
Por ejemplo: tenemos dos tablas, una de maestros y otra de departamentos, queremos
saber que maestro es jefe de que departamento, tenemos una relación uno a uno entre
las dos tablas, ya que un departamento tiene un sólo jefe y un maestro, puede ser jefe de
un sólo departamento.
Relación uno a muchos. Cuando un registro de una tabla (tabla secundaria) sólo
puede estar relacionado con un único registro de otra tabla (tabla principal) y un registro
de la tabla principal, puede tener más de un registro relacionado en la tabla secundaria,
en este caso se suele hacer referencia a la tabla principal como “tabla padre”, y a la tabla
secundaria como “tabla hijo”, entonces la regla se convierte en “un padre puede tener
varios hijos, pero un hijo sólo tiene un padre”.
Por ejemplo: tenemos dos tablas, una con los datos de diferentes poblaciones y otra con
los habitantes, una población puede tener más de un habitante, pero un habitante
pertenecerá a una población única. En este caso la tabla principal, será la de poblaciones
y la tabla secundaria será la de habitantes. Una población puede tener varios habitantes,
pero un habitante pertenece a una sola población. Esta relación se representa incluyendo
en la tabla “hijo” una columna que corresponde con la clave principal de la tabla “padre”,
esta columna es lo que se denomina llave foránea (clave foránea o clave externa).
Una llave foránea, es pues, un campo de una tabla que contiene una referencia a un
registro de otra tabla. Siguiendo el ejemplo de la tabla habitantes, se tiene una columna
población que contiene el código de la población en la que está empadronado el
habitante, esta columna es la llave foránea de la tabla habitante, y en la tabla poblaciones,
se tiene una columna código de población como llave primaria.
Relación varios a varios: Cuando un registro de una tabla puede estar relacionada con
más de un registro de la otra tabla y viceversa, en este caso las dos tablas no pueden
estar relacionadas directamente, se tiene que añadir una tercera tabla entre las dos que
incluyan los pares de valores relacionados entre sí.
Por ejemplo: se tienen dos tablas, una con los datos de clientes y otra con los artículos
que se venden en una empresa, un cliente podrá realizar un pedido con varios artículos y
un artículo podrá ser vendido a varios clientes.
No se puede definir entre clientes y artículos, hace falta otra tabla (por ejemplo una tabla
de pedidos) relacionada con clientes y artículos. La tabla pedidos, estará relacionada con
clientes por una relación uno a muchos y también estará relacionada con artículos por una
relación uno a muchos.
Aparece una ventana con las tablas que están disponibles en la BD, ahí se deberán
seleccionar las tablas que se desean relacionar.
Una vez seleccionadas las tablas, se deberán definir los campos a relacionar:
NORMALIZACIÓN
Introducción
El propósito de este proceso es quitar las cualidades indeseables de una relación que
puedan causar anomalías en el almacenamiento al momento de realizar operaciones de
actualización en la base de datos.
Normalización CERO
Usuarios
Obviamente no, lo que se desea es crear un sistema funcional que pueda crecer y
adaptarse fácilmente a los nuevos requisitos; para esto, es necesario aplicar las reglas del
Primer Nivel de Formalización.
Primera Forma Normal – 1FN
Se puede observar que en la tabla del ejemplo se está rompiendo la primera regla, al
repetir los campos Email1 y Email2. Además, no existe una llave primaria. La tercera regla
de la 1FN, básicamente indica que es necesario agregar un campo tipo autonumérico,
para distinguir entre usuarios que pudieran tener el mismo nombre.
Usuarios
Crear tablas separadas para aquellos grupos de datos que se aplican a varios
registros.
Relacionar estas tablas mediante una llave externa. Se ha separado el campo Email
en otra tabla, de forma que sea posible introducir tantos correos como el usuario
proporcione sin tener que duplicar los demás datos del usuario. Por último, será necesario
utilizar la llave primaria para relacionar estos campos:
Usuarios
Emails
1 1 abc@abc.com
2 1 ange@abc.com
3 2 xyz@uni.home.com
4 2 vic@uni.home.com
Ahora, existen dos tablas separadas, donde la llave primaria en la tabla Usuarios (ID),
está relacionada con la llave externa en la tabla Emails (relID). Sin embargo todavía surge
un problema, ya que al tratar de añadir nuevos empleados que pertenecen a una misma
empresa, se estaría duplicando la información de ésta (dirección y nombre). También en
este caso, se corre el riesgo de introducir datos diferentes de una misma empresa.
Usuarios
ID Nombre relEmpresaID
1 Angelica 1
2 Victor 2
Empresas
Emails
1 1 abc@abc.com
2 1 ange@abc.com
3 2 xyz@uni.home.com
4 2 vic@uni.home.com
El resultado es, que ahora la llave primaria empID en la tabla Empresas está relacionada
con la llave externa relEmpresaID en la tabla Usuarios, de manera que es posible añadir
200 (o más) usuarios a la empresa ABC, y sólo añadir una vez la información de dicha
empresa. Como consecuencia, las tablas de Usuarios y Emails pueden crecer, sin correr
el riesgo de la duplicidad o corrupción de datos.
Cuarta Forma Normal – 4FN
La Cuarta Forma Normal se aplica cuando existe una relación varios-a-varios entre dos
tablas y, consiste en crear una tercera tabla que relacione las llaves primarias de las dos
tablas originales, donde el resultado son dos relaciones una-a-varios. En el ejemplo
anterior no se presentó la necesidad de aplicar la cuarta forma normal.
Existe un último nivel de normalización que se aplica en ciertas ocasiones, aún cuando en
la mayoría de los casos no resulta necesario para obtener la mejor funcionalidad de la
estructura de datos. El principio de la Quinta Forma Normal sugiere que:
La tabla original debe ser reconstruida desde las tablas resultantes en las cuales fue
separada.
Los beneficios de aplicar ésta última regla asegurarán que no se ha creado ninguna
columna extraña en las tablas y que la estructura de las tablas que se han creado es de
tamaño justo.
CONSULTAS
Introducción
Las consultas son operaciones que se realizan sobre los datos de una BD. Estas
operaciones pueden ser de diversos tipos:
Introducción al SQL
Una consulta SQL está compuesta por una instrucción SQL que la define. Se trata de un
comando que puede ocupar cuanta línea de texto se desee, terminado en (;).
SQL, como cualquier otro lenguaje, también cuenta con algunas palabras reservadas,
como son: SELECT, INSERT, DELETE, UPDATE, SET, WHERE, IN, DISTINCT, GROUP,
ORDER BY, etcétera.
Componentes SQL
Comandos
Los DLL que permiten crear y definir nuevas BD, campos e índices.
Los DML que permiten generar consultas para ordenar, filtrar y extraer datos de la BD.
COMANDOS DLL
Comando Descripción
COMANDOS DML
Comando Descripción
Cláusulas
Las cláusulas son condiciones de modificación utilizadas para definir los datos que se
desean seleccionar o manipular.
Cláusula Descripción
Operadores Lógicos
Operador Descripción
Operadores de Comparación
Operador Descripción
<> Distinto de
= Igual que
Funciones de Agregado
Función Descripción
Sintaxis básica:
Esta instrucción recupera ciertos campos de los registros de una tabla que cumplen una
condición. La cláusula WHERE es opcional. Si se omite, se seleccionan todos los
registros (se supone que la condición es siempre verdadera).
Sintaxis:
Si nos interesan todos los campos, se puede utilizar el signo de comodín (*) para
identificar la lista completa.
Sintaxis:
Sintaxis:
Consulta SQL
Es posible consultar, desde una BD, una tabla que pertenezca a otra BD. La cláusula IN
permite especificar otra BD como origen de la tabla.
Sintaxis:
Consulta SQL
Alias - AS
Se pueden generar consultas en las que aparezcan nuevos campos. Por ejemplo, si se
desea realizar una consulta en la que se muestre la nota media obtenida por los alumnos.
En tal caso se puede utilizar la sintaxis “<expresión> AS <nombre campo>” para cada
columna como si se tratara de un campo más de la tabla.
Sintaxis:
Ejemplos:
Consulta SQL
Obtener los apellidos junto a la nota SELECT AP, AM, ((Parcial1 + Parcial2)
media, suponiendo que la media de los / 2) * 0.8 + Practicas AS Media
parciales es el 80% y el resto se obtiene FROM Alumnos;
con las prácticas
Obtener los nombres completos de los SELECT Nombre & " " & AP & " " &
alumnos junto a su matrícula AM AS NombreCompleto, Matricula
FROM Alumnos;
Expresiones
Las expresiones en SQL son semejantes a las utilizadas en la mayoría de los lenguajes,
entre las principales se encuentran:
Operador Significado
Ordenación de Registros
SQL permite especificar que los registros seleccionados se muestren ordenados de forma
ascendente o descendente, de acuerdo a alguno o algunos de los campos seleccionados.
Para ello se dispone de la palabra reservada ORDER BY, con el siguiente formato:
Sintaxis:
Ejemplos:
Consulta SQL
Obtener los apellidos y las notas de los SELECT AP, AM, Parcial1, Parcial2
parciales de los alumnos que han FROM Alumnos
sacado mejor nota en el primer parcial WHERE Parcial1> Parcial2
que en el segundo, ordenados según la ORDER BY (Parcial1-Parcial2) DESC,
diferencia entre ambas notas (las AP, AM;
mayores diferencias primero). En caso
de empate ordenar por apellidos de
forma ascendente.
Agrupamiento de Datos
SQL permite definir consultas en las que se ofrecen registros que se obtienen como
resultado del agrupamiento de varios registros. Por ejemplo, valor promedio de un campo,
máximo, mínimo, cuenta, etcétera.
Para este tipo de consultas se proporcionan los siguientes operadores, conocidos también
como funciones de agregado.
Operador Significado
Sintaxis:
Consulta SQL
En todas las consultas vistas hasta ahora, las funciones de agregado se aplican sobre el
conjunto total de registros de una tabla (excepto los que no cumplen la cláusula WHERE
que son descartados), y el resultado de tales consultas es un único valor.
SQL permite crear grupos de registros sobre las cuales aplicar las funciones de agregado,
de manera que el resultado es un conjunto de registros para cada uno de los cuales se ha
calculado el valor de agregado. Los grupos se componen de varios registros que
contienen el mismo valor para un campo o conjunto de campos.
Sintaxis:
De esta forma, para cada valor distinto de la <lista de campos> suministrada, se calcula la
función de agregado correspondiente, sólo con el conjunto de registros con dicho valor en
los campos (los registros que no cumplan la condición WHERE no se toman en cuenta).
Ejemplos:
Consulta SQL
El agrupamiento de filas impone limitaciones obvias sobre los campos que pueden ser
seleccionados, de manera que sólo puedan obtenerse campos como resultado de una
función de agregado o la combinación de campos que aparezcan en la cláusula GROUP
BY, y nunca otros campos de la tabla origen. Por ejemplo, la siguiente consulta sería
incorrecta:
La razón de que sea incorrecta es trivial: ¿Qué nombre (de los varios posibles) se
seleccionaría para cada grupo de AP?. Se debe tener en cuenta que para cada grupo
generado con GROUP BY, sólo se muestra una fila como resultado de la consulta.
Ejemplo:
Sintaxis:
Ejemplo:
En otras palabras, la cláusula WHERE selecciona los registros que intervienen para
calcular las funciones de agregado; mientras que la cláusula HAVING, selecciona los
registros que se muestran teniendo en cuenta los resultados de las funciones de
agregado.
En todos los casos, la cláusula ORDER BY puede ser incluida. Evidentemente esta
cláusula afectará únicamente el orden en que se muestran los registros resultado, y no el
cálculo de las funciones de agregado. Los campos por los cuales puede efectuarse la
ordenación sólo pueden ser aquellos susceptibles de ser mostrados; es decir, que los
campos admisibles en la cláusula ORDER BY son los mismos que se encuentran en la
cláusula SELECT: funciones de agregado y la combinación de campos que aparezcan en
GROUP BY.
El formato de una instrucción de selección SQL con todas las opciones vistas hasta ahora
es la siguiente:
Sintaxis:
Hasta el momento todas las consultas se basan en seleccionar registros y campos sobre
los datos almacenados en una única tabla. SQL también permite obtener resultados a
través de la combinación de múltiples tablas, la forma de hacerlo es mediante un enlace o
unión (Join) de varias tablas a través de llaves externas (Foreing key). Una llave externa
es un campo o conjunto de campos que hacen referencia a otro campo o conjunto de
campos de otra tabla. Esta relación se establece habitualmente entre uno o varios
campos de la tabla y la llave principal de otra tabla, y la mayoría de las veces guarda
relación directa con las políticas de integridad referencial definidas.
Producto Cartesiano
M Mexicali E 2 30 2 TRC
R Rosarito M 1 50 4 Carcasa
R 1 10
R 2 200
R 3 100
E Ensenada E 1 100
E Ensenada E 2 30
E Ensenada T 4 200
E Ensenada M 1 50
E Ensenada R 1 10
E Ensenada R 2 200
E Ensenada R 3 100
M Mexicali E 1 100
M Mexicali E 2 30
M Mexicali T 4 200
M Mexicali M 1 50
M Mexicali R 1 10
M Mexicali R 2 200
M Mexicali R 3 100
T Tijuana E 1 100
T Tijuana E 2 30
T Tijuana T 4 200
T Tijuana M 1 50
T Tijuana R 1 10
T Tijuana R 2 200
T Tijuana R 3 100
R Rosarito E 1 100
R Rosarito E 2 30
R Rosarito T 4 200
R Rosarito M 1 50
R Rosarito R 1 10
R Rosarito R 2 200
R Rosarito R 3 100
Sintaxis:
La lista de campos válidos es ahora cualquiera de los de las tablas utilizadas, como si se
tratara de una única tabla en la que existen todos los campos de todas las tablas. Puesto
que es posible que existan campos con el mismo nombre en las diferentes tablas, a la
hora de nombrar los campos será necesario especificar a qué tabla pertenecen con el
formato "<tabla>.<campo>".
Así, la tabla generada en el ejemplo anterior (producto cartesiano) se obtiene con la
siguiente instrucción SQL:
Ejemplo:
Las consultas de producto cartesiano como fin último son poco habituales. Por lo general,
el producto cartesiano se utiliza como medio para obtener consultas que relacionan varias
tablas a partir de llaves externas.
En las tablas de ejemplo se observa claramente la relación existente entre los campos:
Almacén Tipo
ID
Cantidad
Las llaves externas permiten enlazar la información relacionada entre diferentes tablas. Es
decir, si se desea relacionar las existencias en un almacén con el nombre de la ciudad
donde se ubica éste, se puede calcular el producto cartesiano de Almacenes y
Existencias, y descartar aquellos registros para los cuales no coincidan los campos
Almacenes.ID y Existencias.Almacén.
Ejemplo:
Ensenada 1 100
Ensenada 2 30
Mexicali 1 50
Tijuana 4 200
Rosarito 1 10
Rosarito 2 200
Rosarito 3 100
Tijuana 4 200
De la misma forma se podrían enlazar las tres tablas mediante la siguiente consulta:
Ejemplo:
Ensenada TRC 30
Mexicali Circuitería 50
Rosarito Circuitería 10
Uniones - Joins
Sintaxis:
En general, para cualquier número de tablas la unión se realiza anidando las uniones. La
sintaxis para tres tablas sería como sigue:
Consultas de Inserción
Las consultas de inserción permiten añadir registros a una tabla, para este tipo de
consultas se requiere:
Sintaxis:
La lista de campos destino, es una lista de campos separados por comas; la lista de
campos origen es una lista como la que se utiliza en una consulta de selección cualquiera.
Cada campo de la lista origen debe corresponder con otro en la lista destino, en el mismo
orden, de manera que los registros obtenidos en la consulta se añadan a la tabla destino.
Los campos no especificados serán llenados con los valores predeterminados, a menos
que no se tengan ninguno, en éste caso quedarán vacíos.
La siguiente sintaxis, se utiliza para añadir datos a una tabla sin utilizar a otra tabla o
consulta como origen de datos.
Sintaxis:
En el caso anterior, debe existir una correspondencia y compatibilidad exacta entre la lista
de campos origen y la lista de campos destino.
Ejemplos:
Consulta SQL
Supóngase una tabla Historia en la que INSERT INTO Historia (año, numero)
se almacena información sobre el SELECT Year (Date()) AS esteaño,
número de alumnos matriculados cada COUNT (*) AS Total FROM Alumnos;
año. Esta tabla tiene los campos: año
(tipo fecha) y número (entero largo).
Añadir a esta tabla el número de
alumnos actual con la fecha de este año
Consultas de Actualización
Sintaxis:
Ejemplos:
Consulta SQL
Aprobar el primer parcial que tenga una UPDATE Alumnos SET Parcial1=6
calificación entre 4.5 y 5.9 WHERE (Parcial1<=5) AND
(Parcial2>=6);
Predicado Descripción
ALL
Si no se incluye ninguno de los predicados se asume ALL, por omisión. El motor de BD
selecciona todos los registros que cumplen las condiciones de la instrucción SQL. No es
conveniente abusar de este predicado, ya que obligamos al motor de la BD a analizar la
estructura de la tabla para averiguar los campos que contiene, es mucho más rápido
indicar el listado de campos deseados.
Ejemplo:
TOP
Devuelve un cierto número de registros que entran entre el principio o el final de un rango
determinado por una cláusula ORDER BY. Suponga que se desean recuperar los
nombres de los 25 primeros estudiantes con una calificación mayor a 7 en el parcial 1. La
consulta sería:
Ejemplo:
DISTINCT
Omite los registros que contienen datos duplicados en los campos seleccionados. Para
que los valores de cada campo listado en la instrucción SELECT se incluyan en la
consulta, deben ser únicos. Por ejemplo, varios alumnos listados en la tabla Alumnos
pueden tener el mismo apellido. Si dos registros contienen López en el campo AP, la
siguiente instrucción SQL devolvería un único registro:
Ejemplo:
DISTINCTROW
Devuelve los registros diferentes de una tabla; a diferencia del predicado anterior que sólo
se fijaba en el contenido de los campos seleccionados, éste lo hace en el contenido del
registro completo, independientemente de los campos indicados en la cláusula SELECT:
Ejemplo:
Si la tabla empleada contiene dos registros: Antonio López y Martha López, el ejemplo del
predicado DISTINCT devuelve un único registro con el valor López en el campo AP, ya
que busca no duplicados en dicho campo. Este último ejemplo devuelve dos registros con
el valor López en el apellido, ya que busca no duplicados en el registro completo.
Consultas de Borrado
Las consultas de borrado de datos permiten eliminar registros de una tabla de forma
selectiva, esto es, los registros que cumplan una determinada condición. Para este tipo de
consulta se tiene:
Sintaxis:
Ejemplos:
Consulta SQL
Eliminar a los alumnos cuyo apellido se DELETE FROM Alumnos WHERE (AP
desconozca total o parcialmente IS NULL) OR (AM IS NULL);
Consultas Anidadas
Ejemplo:
La subconsulta se cierra entre paréntesis. Se pueden anidar tantas consultas como sean
necesarias.
Las cláusulas que permiten enlazar la consulta principal y las subconsultas, son las
siguientes:
Cualquier comparador (>, >, =, etc.). En este caso, la subconsulta debe proporcionar
un resultado único con el cual realizar la comparación.
Ejemplos:
Consulta SQL
calificación del primer parcial mayor que Alumnos WHERE Parcial1> ( SELECT
la máxima calificación del segundo MAX (Parcial2) FROM Alumnos
parcial de entre los alumnos que en las WHERE Practicas <1);
prácticas no han aprobado
Supóngase la siguiente consulta: seleccionar los alumnos cuyo profesor es “Carlos”. Esta
consulta puede escribirse en SQL de la siguiente forma:
Ejemplo:
En donde:
Ejemplo:
El ejemplo anterior crea una nueva tabla llamada Empleados con dos campos, uno
llamado Nombre de tipo texto con longitud 25, y otro llamado Apellidos con longitud 50.
Ejemplo:
El ejemplo anterior, crea una nueva tabla llamada Empleados con un campo Nombre tipo
texto de longitud 10, otro campo llamado Apellidos tipo texto de longitud 50, y uno más
llamado Fecha_nacimiento de tipo Fecha/Hora. También crea un índice único (no permite
valores repetidos) formado por los tres campos.
Ejemplo:
En este ejemplo, se crea una tabla llamada Empleados con un campo de tipo texto con
longitud predeterminada (50) llamado Nombre, otro igual llamado Apellidos, otro campo
llamado Fecha_nacimiento de tipo Fecha/Hora y el campo ID de tipo entero al que
establece como llave principal.
Cláusula CONSTRAINT
CONSTRAINT <Nombre> {
PRIMARY KEY <primario1> [,<primario2>[, .. ]]) |
UNIQUE (<único1> [,<único2>[, ..]])|
FOREING KEY (<ref1>[,<ref2>[, ..]]) REFERENCES <Tabla externa>
[(<campoexterno1>,[<campoexterno2>[,..]])]}
En donde:
Si se desea crear un índice para un campo cuando se están utilizando las instrucciones
ALTER TABLE o CREATE TABLE, la cláusula CONSTRAINT debe aparecer
inmediatamente después de la especificación del campo indexado.
Si se desea crear un índice con múltiples campos cuando se están utilizando las
instrucciones ALTER TABLE O CREATE TABLE, la cláusula CONSTRAINT debe
aparecer afuera de la cláusula de creación de tabla.
Creación de Índices
En donde:
Es posible modificar el diseño de una tabla ya existente; se pueden modificar los campos
o los índices.
Sintaxis:
En donde:
Operación Descripción
Ejemplos:
Consulta SQL
Agrega una columna ID de tipo entero a ALTER TABLE Empleados ADD COLUMN
la tabla Empleados y los marca como el ID INTEGER CONSTRAINT IndicePrimario
índice primario de la tabla. PRIMARY KEY;
CREACIÓN DE VISTAS
El lenguaje SQL también pone a disposición la posibilidad de definir tablas “virtuales”, las
vistas, calculadas a partir de otras tablas. Son virtuales en el sentido de que no ocupan
espacio en el disco, pero son el resultado de consultas sobre otras tablas y, por lo tanto,
siempre están alineadas con los valores obtenidos en dichas tablas.
Una vista se puede presentar a casi todos los efectos de la misma forma que una tabla.
Se pueden hacer consultas sobre consultas, añadir, modificar o eliminar datos sobre la
presentación del resultado de una consulta, crear formularios e informes sobre vistas,
etcétera.
Sintaxis:
La consulta anterior crea una vista llamada <nombre vista> definida por la <expresión
tabla>. Típicamente, <expresión tabla> es una instrucción SELECT que producirá la tabla
que interesa. <lista de campos> se puede usar para asignar nombres a las columnas de
la vista. Esto es útil en el caso en que las columnas que derivan de <expresión tabla>
sean resultado de un cálculo (por ejemplo, COUNT (<campo>) y por ello no tengan un
nombre explícito. Una vez creada, una vista se puede utilizar como una tabla normal. Las
únicas limitaciones se refieren a las operaciones que cambian los datos contenidos en
ella. En efecto, no todas las vistas pueden actualizarse.
También se pueden crear vistas haciendo una consulta sobre varias tablas, introduciendo
diferentes condiciones o haciendo que el resultado se ordene según una columna
concreta de la vista.
Para cada uno de ellos puede crearse un disparador BEFORE (antes) y otro AFTER
(después). Entre los sucesos de disparo se encuentran las operaciones INSERT, DELETE
o UPDATE.
Los disparadores de instrucción son útiles si el código del disparador no depende de los
datos afectados. Por ejemplo, se puede crear un disparador de instrucción BEFORE
INSERT en una tabla, para pedir que se efectúe una operación de inserción en dicha
tabla, excepto en determinados períodos de tiempo. Los disparadores de fila son útiles si
la acción del disparador depende de los datos afectados por la transacción, por ejemplo,
puede crearse un disparador de fila AFTER INSERT que introduzca filas nuevas en una
tabla de auditoria, así como en la tabla base del disparador. Para crear un disparador se
tiene:
Sintaxis:
El nombre del trigger se usará sí se desea eliminar el trigger. Se usa como argumento
del comando DROP TRIGGER.
La palabra siguiente determina si la función debe ser llamada antes (BEFORE) o
después (AFTER) del evento.
El siguiente elemento del comando determina en que evento o eventos será llamada
la función. Es posible especificar múltiples eventos utilizando el operador OR.
El nombre de la relación determinará la tabla afectada por el evento.
La instrucción FOR EACH determina si el trigger se ejecutará para cada fila afectada,
o bien, antes o después de que la secuencia se halla completado.
El nombre del procedimiento es la función llamada.
Los argumentos son pasados a la función en la estructura CurrentTriggerData. El
propósito de pasar los argumentos a la función es permitir a triggers diferentes con
requisitos similares llamar a la misma función.
Ejemplo:
El disparador anterior utiliza la palabra clave NEW para hacer referencia a los valores de
la fila que acaba de ser insertada en la tabla local Alumnos.
CREACIÓN DE PROCEDIMIENTOS
Ejemplo:
balance_anterior NUMBER;
balance_nuevo NUMBER;
BEGIN
SELECT balance INTO balance_anterior FROM Cuentas
WHERE id_cuenta=cta
FOR UPDATE OF balance;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO Cuentas(id_cuenta, balance)
VALUES (cuenta, credito);
WHEN OTHERS THEN
ROLLBACK;
END cuenta_credito;
Planteamiento de problema