Está en la página 1de 61

UNIVERSIDAD JOSE CARLOS MARITEGUI

INTRODUCCIÓN A MICROSOFT ACCESS

¿Qué es Access?

Access es un programa comercial desarrollado por Microsoft. Se refiere a un sistema


gestor de Base de Datos (BD) diseñado para ser utilizado en computadoras personales.
Access proporciona una serie de herramientas de apoyo que facilitan la creación y
administración de una base de datos.

¿Qué es una Base de Datos en 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.

Una Base de Datos en Access es un archivo que contiene datos (estructurados e


interrelacionados) y objetos que definen y manejan esos datos: tablas, consultas,
formularios, informes, macros y módulos. Incluso, se pueden definir estrategias de
seguridad e integridad. Es importante mencionar que pueden coexistir en un disco varias
bases de datos, absolutamente independientes entre sí.

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.

Objetos de una Base de Datos

Los diferentes objetos que puede contener una BD, son:

Base de Datos 18 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

ƒ 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.

Creación de una Base de Datos

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.

Es importante advertir, que al contrario de lo que ocurre en la mayoría de los programas


(Word, PowerPoint), los datos de una BD no necesitan ser explícitamente guardados, esto
debido a que se está trabajando con los datos originales y no con una copia en RAM
como usualmente sucede con otro tipo de aplicaciones; es decir, no se necesita estar
seleccionando la opción de “guardar”, cuando se agrega o se elimina un registro, ya que
estos cambios se realizan de manera automática.

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.

Base de Datos 19 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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.

Base de Datos 20 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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

Matricula Matrícula del alumno

Nombre Nombre del alumno

AP Apellido paterno

AM Apellido materno

Edad Edad

Parcial1 Calificación obtenida en el primer parcial

Parcial2 Calificación obtenida en el segundo parcial

Practicas Calificación obtenida en las prácticas

Se puede observar que no se ha definido un campo “promedio” para almacenar la


calificación final de la asignatura; esto debido a que es posible calcularla a través del resto
de los campos.

En una tabla no debe almacenarse información innecesaria. Además, si se almacenara,


habría que recalcularla cada vez que se modificara alguno de los campos de los que
depende, lo cual representa una fuente de inconsistencia. La forma adecuada de obtener
el promedio es a través de las consultas.
Creación de Tablas

Definición de Campos en Access

Una vez definidos los campos necesarios se debe proceder a crear la tabla.

En la ventana de la BD, se deberá seleccionar el objeto Tabla (table), y seleccionar la


opción Crear Tabla en Vista Diseño (create table in design view), la cual permite definir los

Base de Datos 21 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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.

Base de Datos 22 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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.

Base de Datos 23 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

ƒ Currency (moneda). Un número con formato monetario. Se trata de un valor


numérico real con formato especializado para la manipulación de valores monetarios:
abreviatura de la moneda local, separación con puntos y comas, etcétera.
ƒ Autonumber (autonumérico). Un contador que se incrementa automáticamente. Se
trata de un valor numérico que el sistema genera automáticamente para cada registro de
manera que nunca existirán dos registros en la misma tabla con el mismo valor en este
campo.
ƒ Yes/No (si/no). Valor lógico.

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

(space) Despliega un espacio

Despliega literalmente los caracteres dentro de las


“ABC”
comillas

! Obliga a mantener la alineación a la izquierda

* Llena el espacio disponible con el carácter que le sigue

\ Despliega el carácter que le sucede como una literal

Despliega la información en un color específico. Colores


[color] validos: black, blue, green, cyan, red, magenta, yellow,
white

Base de Datos 24 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Ejemplos:

Forma!Hora.Format = "Long Time"


Forma!Registrado.Format = "Yes/No"

El ejemplo, utiliza un formato personalizado para desplegar la fecha. El formato con el que
se despliega la fecha es el siguiente: Jan 1995.

Forms!Empleados!fecha_contratacion.Format = "mmm yyyy"

ƒ Input Mask (máscara de entrada). Obliga a que los datos se introduzcan en un


formato específico. Por ejemplo, para un teléfono se puede utilizar la siguiente mascara
“(000) 0000-00-00”, de manera que no permita introducir caracteres extraños. La mascara
de entrada es un conjunto de tres datos que definen los caracteres admitidos, el formato
presentado al usuario y el formato almacenado. El atributo Formato (format) prevalece
sobre el atributo Mascara de Entrada (input mask), de manera que, al editar los datos del
campo, una vez introducidos siguiendo una determinada mascara, el contenido del campo
se mostrará con el aspecto definido por el atributo Format.

Carácter Descripción

0 Dígito (requerido; no se permiten los símbolos + o – )

9 Dígito o espacio (opcional; no se permiten los símbolos + o – )

# Dígito o espacio (opcional; se permiten los símbolos + y -)

L Letra (A-Z, requerido)

? Letra (A-Z opcional)

A Letra o dígito (requerido)

a Letra o dígito (opcional)

& Cualquier carácter o espacio (requerido)

C Cualquier carácter o espacio (opcional)

.,:;-/ Separadores

Base de Datos 25 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

< Convierte todos los caracteres que le siguen a mayúsculas

> Convierte todos los caracteres que le siguen a minúsculas

Ocasiona que la máscara de entrada se despliegue de derecha a


!
izquierda, en lugar de izquierda a derecha

Carácter de escape. Ocasiona que el carácter que le sigue se


\ despliegue como una literal. Se utiliza para desplegar los
caracteres especiales como \A, \&

Crea una entrada tipo contraseña, es decir, cualquier carácter


Password que se introduzca en la casilla de texto, se almacena como tal
pero todos son desplegados como asteriscos

Ejemplo:

Mascara Ejemplo

(000)000-0000 (206) 555-0248

(000)AAA-AAAA (206) 555-TELE

LLLL000000-
ROGA431009-T52
AAA

ƒ Caption (título). Es el título de la columna que aparecerá al editar los datos


almacenados para el campo.
ƒ Default Value (valor predeterminado). Un valor que automáticamente se introduce
en el campo si el usuario no indica otro diferente.
ƒ Validation Rule (regla de validación). Una condición que debe cumplir el dato
introducido para que sea aceptado. Por ejemplo, para un campo edad se puede obligar a
que el valor introducido esté comprendido entre 18 y 65 años con una expresión como
sigue “ >=18 AND <=65”.
ƒ Validation Text (texto de validación). Un mensaje que Access mostrará al usuario
cuando intente introducir un valor no permitido por una regla de validación. Para el
ejemplo anterior, el mensaje podría ser “La edad debe estar comprendida entre 18 y 65
años”.

Base de Datos 26 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

ƒ Required (requerido). Indica si el campo debe tener un valor o si permite dejarlo en


blanco. Por omisión, un campo no contiene ningún valor.
ƒ Index (indexado). Establece si sobre el campo debe construirse un índice. Un índice
es una estructura que hace que determinadas operaciones con el campo sean más
rápidas (ordenaciones y búsquedas) a costa de un mayor espacio en disco y en memoria
(para almacenar el índice) y de que otras operaciones sean más lentas y costosas
(inserciones y borrados). Existen dos formas de hacer índices, con y sin duplicado.

Llave Primaria – Primary Key


En toda tabla suele existir una llave primaria, también llamada clave primaria o clave
maestra. Una llave primaria es un campo o conjunto de campos cuyos valores no se
repiten y a través de los cuales se identifica de forma única a un registro completo. Es
decir, que no hay dos registros en una tabla con la misma clave. En el ejemplo de los
alumnos, el campo matrícula puede ser una llave primaria, ya que no habrá dos alumnos
con la misma matrícula; y además, es posible identificar a un alumno a través de su
matrícula. El campo AP, no puede ser llave primaria porque puede haber más de un
alumno con el mismo apellido. El conjunto formado por AP, AM y Nombre, podría
constituir una llave primaria, pero no podemos asegurar que no existan dos personas con
el mismo conjunto de datos.

Sobre un campo que se emplea como llave primaria, forzosamente debe formarse un
índice sin duplicado, y no deben aceptarse valores nulos.

Si no se tiene ningún campo o conjunto de campos candidato a llave primaria, antes de


salvar la tabla en Access, preguntará si se desea crear una llave primaria, al contestar
que si, Access automáticamente creará un campo llamado ID, el cual será de tipo
autonumérico.
Siguiendo con el ejemplo de Alumnos, se pueden definir los atributos para cada uno de
los campos:

Campo Tipo Descripción Otros atributos

Requerido, indexado sin repetición,


Matricula Cadena (7) Matrícula mascara de entrada: 0/00000;0;"*";
clave principal.

Base de Datos 27 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Nombre Cadena (40) Nombre completo requerido

AP Cadena (25) Apellido Paterno requerido

AM Cadena (25) Apellido Materno requerido

Numérico
Edad Edad >018 AND <=65
byte

Numérico Calificación 1 decimal; predeterminado 0; >=0


Parcial1
simple primer parcial AND <=10

Numérico Calificación 1 decimal; predeterminado 0; >=0


Parcial2
simple segundo parcial AND <=10

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.

Base de Datos 28 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Integridad Referencial

La integridad referencial es un sistema de reglas que utilizan la mayoría de las BD


relacionales para asegurarse que los registros de tablas relacionadas sean validos y que
no se borren o cambien datos relacionados de forma accidental dando como resultado
errores de integridad.

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).

Base de Datos 29 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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.

Para establecer las relaciones de integridad en Access, se deberá seleccionar la opción


Relaciones (relationships), del menú Herramientas (tools), en la barra de herramientas.

Base de Datos 30 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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:

Base de Datos 31 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Se sugiere seleccionar la opción Actualización en Cascada de los Campos Relacionados


(cascade update related fields), de tal forma que al realizar algún cambio en los campos,
los datos se actualicen de manera automática en el campo relacionado.

NORMALIZACIÓN

Introducción

El proceso de normalización, se define como el procedimiento que permite dividir una


relación en dos o más relaciones más pequeñas, con base a las relaciones de atributos.
La normalización es un procedimiento riguroso para el diseño de BD.

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.

La meta final del proceso de normalización es la agrupación de todos los atributos


(campos) de una BD en relaciones adecuadas para que se puedan almacenar con el
mínimo de datos redundantes.

Básicamente, las reglas de normalización están encaminadas a eliminar redundancias e


inconsistencias de dependencia en el diseño de las tablas.

El proceso de normalización se compone de cinco pasos.


De esta manera, suponga que se desea crear una tabla con la siguiente información:
nombre de usuario, nombre de la empresa, dirección de la empresa y correo electrónico.
En principio se definiría la estructura de una tabla como la que se muestra a continuación:

Normalización CERO

Usuarios

Nombre Empresa Dirección Email1 Email2

Angélica ABC Km. 106 Tij-Eda abc@abc.com ange@abc.com

Base de Datos 32 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Víctor XYZ Punta Banda 32 xyz@uni.home.com vic@uni.home.com

La tabla anterior se encuentra en el nivel de Normalización Cero, debido a que ninguna de


las reglas de normalización ha sido aplicada. Esto es, como se puede observar en los
campos Email1 y Email2, ¿qué pasará, cuando se requiera una tercera dirección de
correo (Email3)? ¿Se deberá agregar otro campo/columna a la tabla, además de tener
que reprogramar la entrada de los datos en el código?

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

Las reglas de la Primera Forma Normal, son las siguientes:

ƒ Eliminar los grupos repetitivos de las tablas individuales.


ƒ Crear una tabla separada por cada grupo de datos relacionales.
ƒ Identificar cada grupo de datos relacionados con una llave primaria.

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.

Una vez aplicadas las reglas de la 1FN, la tabla resultante es la siguiente:

Usuarios

ID Nombre Empresa Direccion Email

1 Angélica ABC Km. 106 Tij-Eda abc@abc.com

1 Angélica ABC Km. 106 Tij-Eda ange@abc.com

Base de Datos 33 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

2 Víctor XYZ Punta Banda 32 xyz@uni.home.com

2 Víctor XYZ Punta Banda 32 vic@uni.home.com

La tabla se encuentra ahora en 1FN. Se ha solucionado el problema de la limitación del


campo Email. Sin embargo, surgen otros problemas, cada vez que se introduce un nuevo
registro en la tabla usuarios, se duplica cierta información como es el nombre de la
empresa, su dirección y el nombre del usuario. Esto ocasiona no únicamente que la BD
crezca demasiado, sino que la BD pueda corromperse fácilmente, al introducir mal alguno
de los datos redundantes.

Por lo anterior, se debe proceder a aplicar la Segunda Forma Normal.

Segunda Forma Normal – 2FN

Las reglas de la Segunda Forma Normal, son las siguientes:

ƒ 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

ID Nombre empresa direccion_empresa

1 Angélica ABC Km. 106 Tij-Eda

2 Victor XYZ Punta Banda 32

Base de Datos 34 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Emails

EID relID Email

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.

Por lo tanto, el siguiente paso es aplicar la Tercera Forma Normal.

Tercera Forma Normal – 3FN

ƒ Eliminar aquellos campos que no dependan de la llave principal.

En la tabla de usuarios, el nombre de la empresa y su dirección, no dependen de la llave


principal (ID), por lo tanto deben de tener su propio (empresaID):

Usuarios

ID Nombre relEmpresaID

1 Angelica 1

2 Victor 2

Base de Datos 35 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Empresas

empID Empresa Direccion_empresa

1 ABC Km. 106 Tij-Eda

2 XYZ Punta Banda 32

Emails

EID relID Email

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.

Quinta Forma Normal – 5FN

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:

Base de Datos 36 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

ƒ 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:

ƒ Consultas de selección de datos. Permiten recuperar los datos almacenados en las


tablas en un formato y orden adecuados. Además, permiten filtrar y agrupar la
información.
ƒ Consultas de inserción de datos. Permiten agregar registros a una tabla.
ƒ Consultas de modificación. Permiten modificar los valores de los campos de los
registros de una tabla.
ƒ Consultas de borrado. Permiten eliminar registros de una tabla.
ƒ Consultas de creación de tablas. Permiten crear nuevas tablas cuyos campos y
registros se obtienen a partir de los almacenados en otras tablas.

Dentro de las consultas de selección se pueden resaltar algunos grupos importantes:

ƒ Consultas de selección simple. Permiten filtrar registros y añadir o descartar


campos de los registros. Se utilizan para crear “vistas”.
ƒ Consultas de unión. Permiten relacionar los datos de distintas tablas a través de
campos clave.
ƒ Consultas de agrupamiento. Permiten obtener resultados estadísticos de conjuntos
de registros, como medias de un campo, totales, etcétera.

Base de Datos 37 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Las consultas a las BD se hacen a través de los denominados “lenguajes de consulta”. El


más utilizando de este tipo de lenguajes es el SQL (Structured Query Languge).

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

El lenguaje SQL está compuesto por comandos, cláusulas, operadores, expresiones y


funciones de agregado. Estos elementos se combinan en las instrucciones para crear,
actualizar, y manipular las BD.

Comandos

Existen dos tipos de comandos SQL:

ƒ 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

CREATE Utilizado para crear nuevas tablas, campos e índices

DROP Empleado para eliminar tablas e índices

Utilizado para modificar las tablas agregando campos o


ALTER
cambiando la definición de los campos

Base de Datos 38 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

COMANDOS DML

Comando Descripción

Utilizado para consultar registros de la base de datos


SELECT
que cumplan un criterio determinado

Utilizado para cargar lotes de datos en la base de datos


INSERT
en una operación única

Utilizado para modificar los valores de los campos y


UPDATE
registros especificados

Utilizado para eliminar registros de una tabla de una


DELETE
base de datos

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

Se utiliza para especificar la tabla de la cual se van a


FROM
seleccionar los registros

Se utiliza para especificar las condiciones que deben


WHERE
reunir los registros que se van a seleccionar

Se utiliza para separar los registros seleccionados en


GROUP BY
grupos específicos

Se utiliza para expresar la condición que debe satisfacer


HAVING
cada grupo

Se utiliza para ordenar los registros seleccionados de


ORDER BY
acuerdo con un orden específico

Base de Datos 39 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Operadores Lógicos

Operador Descripción

Es el "y" lógico. Evalúa dos condiciones y devuelve un


AND
valor de verdad sólo si ambas son ciertas

Es el "o" lógico. Evalúa dos condiciones y devuelve un


OR
valor de verdad si alguna de las dos es cierta

Negación lógica. Devuelve el valor contrario de la


NOT
expresión

Operadores de Comparación

Operador Descripción

< Menor que

> Mayor que

<> Distinto de

<= Menor ó Igual que

>= Mayor ó Igual que

= Igual que

BETWEEN Utilizado para especificar un intervalo de valores

LIKE Utilizado en la comparación de un modelo

IN Utilizado para especificar registros de una base de datos

Funciones de Agregado

Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de


registros para devolver un único valor que se aplica a un grupo de registros.

Base de Datos 40 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Función Descripción

Utilizada para calcular el promedio de los valores de un


AVG
campo determinado

Utilizada para devolver el número de registros de la


COUNT
selección

Utilizada para devolver la suma de todos los valores de un


SUM
campo determinado

Utilizada para devolver el valor más alto de un campo


MAX
especificado

Utilizada para devolver el valor más bajo de un campo


MIN
especificado

Consultas de Selección Simple

La consulta más simple posible consiste en la selección de campos y registros de una


tabla. Se identifican los campos que se desean y una condición que deben cumplir los
registros seleccionados. El resultado es una tabla, que consiste en un subconjunto de la
original.

Sintaxis básica:

SELECT <lista de campos> FROM <tabla> WHERE <condición>;

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:

SELECT <lista de campos> FROM <tabla>;

Base de Datos 41 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Si nos interesan todos los campos, se puede utilizar el signo de comodín (*) para
identificar la lista completa.

Sintaxis:

SELECT * FROM <tabla> WHERE <condición>;

También, se pueden especificar varios campos identificándolos por sus nombres y


separándolos por comas (,).

Sintaxis:

SELECT <campo1,campo2,……,campoN> FROM <tabla> WHERE


<condición>;

En la tabla de alumnos, se pueden definir las siguientes consultas de ejemplo:

Consulta SQL

Seleccionar los alumnos mayores de SELECT *


25 años FROM Alumnos
WHERE Edad>=25;

Seleccionar los apellidos y nombre de


los que han aprobado los dos SELECT AP, AM, Nombre
parciales FROM Alumnos
WHERE (Parcial1>=6) AND
(Parcial2>=6);

Generar un listado con los nombres y


apellidos de los alumnos y sus SELECT Nombre, AP, AM, Parcial1,
calificaciones Parcial2, Practicas
FROM Alumnos;

Base de Datos 42 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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:

SELECT <lista de campos> FROM <tabla> IN <Base de Datos>;

Consulta SQL

Seleccionar los alumnos mayores de 25 SELECT *


años, suponiendo que la tabla alumnos FROM Alumnos
está en otra BD que se llama IN “C:\colegio\registro.mdb”
C:\colegio\registro.mdb WHERE Edad >=25;

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:

SELECT <lista de campos>, <expresión> AS <nombre campo> FROM


<tabla> WHERE <condición>;

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

Base de Datos 43 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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

Comparador con valor nulo. Indica si un valor se ha dejado en


blanco. Ejemplo: Alumnos cuya edad se desconoce:
IS NULL

SELECT * FROM Alumnos WHERE Edad IS NULL;

Comparador con valor no nulo. Indica si un campo tiene un


valor y no se ha dejado en blanco. Ejemplo: Alumnos cuya
IS NOT NULL edad no se desconoce:

SELECT * FROM Alumnos WHERE Edad IS NOT NULL;

Comparador de semejanza. Permite realizar una comparación


de cadenas utilizando caracteres comodines:
? = Un carácter cualquiera
* = Cualquier combinación de caracteres
LIKE

Ejemplo: Alumnos cuyo apellido comienza con “A”:

SELECT * FROM Alumnos WHERE Nombre LIKE "A*";

Comparador de pertenencia a rango. Por ejemplo: Alumnos


cuya edad está comprendida entre 18 y 20:
BETWEEN..AND
SELECT * FROM Alumnos WHERE Edad BETWEEN 18 AND
20;

Base de Datos 44 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Delimitador de identificadores. Sirven para delimitar los


nombres de objetos (campos, tablas, etcétera) cuando estos
incluyen espacios. Ejemplo: Suponga una tabla llamada
[]
“Alumnos Nuevos”:

SELECT * FROM [Alumnos Nuevos];

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:

SELECT <lista de campos seleccionados> FROM <tabla> WHERE


<condición> ORDER BY <lista de campos para ordenar>;

La lista de campos para ordenar debe ser un subconjunto de la lista de campos


seleccionados. Para especificar un orden inverso (decreciente) se emplea la cláusula
DESC, que puede ser incluida tras el nombre del campo por el que se ordena de forma
descendente. De la misma forma, la cláusula ASC ordena los datos pero de forma
ascendente, aunque no es necesario especificarla, ya que es la opción por omisión.

Ejemplos:

Consulta SQL

Obtener un listado de alumnos SELECT *


ordenado por apellidos FROM Alumnos
ORDER BY AP, AM, Nombre;

Base de Datos 45 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Obtener los alumnos con el primer SELECT *


parcial aprobado, comenzando por las FROM Alumnos
mejores notas WHERE Parcial1 >=6
ORDER BY Parcial1 DESC;

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

Número de registros seleccionados (excepto los que contienen


COUNT
valor nulo para el campo). Sí <campo> es una lista de campos
(<campo>)
(separados por un &) o *, el registro se cuenta si alguno de los
campos que intervienen es no nulo

Suma del conjunto de valores contenidos en el campo


SUM (<campo>)
especificado. Los registros con valor nulo no se cuentan

Media aritmética del conjunto de valores contenidos en el


AVG (<campo>)
campo especificado. Los registros con valor nulo no se cuentan

Valor máximo del conjunto de valores contenido en el campo


MAX (<campo>)
especificado. Los registros con valor nulo no se cuentan

Base de Datos 46 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Valor mínimo del conjunto de valores contenido en el campo


MIN (<campo>)
especificado. Los registros con valor nulo no se cuentan

El formato de este tipo de consulta es:

Sintaxis:

SELECT COUNT/SUM/AVG/MAX/MIN <campo> AS <nombre>


FROM <tabla> WHERE <condición>;

Se pueden incluir varias funciones de agregado en la misma consulta. Ejemplo:

Consulta SQL

Obtener la calificación media SELECT AVG (Parcial1) AS MediaP1


para el primer parcial FROM Alumnos;

SELECT MAX (Parcial1 + Parcial2)/2 AS


Obtener la máxima y mínima
MedMax,
calificación media de los dos
MIN (Parcial1 + Parcial2)/2 AS MEdMin
parciales
FROM Alumnos;

Obtener la máxima calificación


SELECT MAX (Parcial1) AS MaxP1
del primer parcial de entre los
FROM Alumnos
alumnos que no tengan cero en
WHERE Practicas <> 0;
las practicas

Obtener el número de alumnos SELECT COUNT (*) AS Numero


que han aprobado el primer FROM Alumnos
parcial WHERE Parcial1>=6;

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.

Base de Datos 47 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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:

SELECT <agregado> AS <nombre> FROM <tabla>


WHERE <condición> GROUP BY <lista de campos>;

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

Obtener el número de alumnos que hay SELECT Nombre, COUNT (*) AS


con el mismo nombre (sin apellido) para Cuantos
cada nombre diferente (¿cuántos FROM Alumnos
Juanes, Pedros, ...hay?) GROUP BY Nombre;

Obtener el número de personas que han SELECT INT (Parcial1) AS Nota,


obtenido 0, 1, 2,..10 en el primer parcial COUNT (*) AS Cuantos
(despreciando la parte decimal de las FROM Alumnos
calificaciones). Ordenar el resultado por GROUP BY INT (Parcial1)
el número de alumnos de forma ORDER BY COUNT (*) DESC;
descendente

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

Base de Datos 48 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

BY, y nunca otros campos de la tabla origen. Por ejemplo, la siguiente consulta sería
incorrecta:

SELECT Nombre FROM Alumnos GROUP BY AP;

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.

Filtrado de Registros de Salida


En estas consultas puede aparecer una condición WHERE que permite descartar los
registros que no deben ser tomados en cuenta a la hora de calcular las funciones de
agregado. Sin embargo, la cláusula WHERE no permite descartar registros utilizando
como condición el resultado de la función de agregado.
Por ejemplo, supóngase la siguiente consulta: “seleccionar los nombres de alumnos para
los que haya más de dos alumnos con el mismo nombre (3 Pedros, 4 Juanes,..)”.
Intuitivamente se podría pensar en la siguiente consulta:

Ejemplo:

SELECT Nombre, COUNT (*) FROM Alumnos


WHERE COUNT (*)>2 GROUP BY Nombre;

Sin embargo, la consulta anterior no es correcta. La cláusula WHERE no puede contener


funciones de agregado. Para este caso existe otra cláusula semejante a WHERE,
HAVING, que tiene el siguiente formato:

Sintaxis:

SELECT <agregado> AS <nombre> FROM <tabla>


WHERE <condición> GROUP BY <lista de campos>
HAVING <condición de agregado>;

Base de Datos 49 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Para el ejemplo anterior, la instrucción SQL apropiada sería:

Ejemplo:

SELECT Nombre, COUNT (*) FROM Alumnos


GROUP BY Nombre HAVING COUNT (*)>2;

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:

SELECT <lista de campos> FROM <tabla> WHERE <condición>


GROUP BY <lista de campos> HAVING <condición de agregado>
ORDER BY <lista de campos>;

Base de Datos 50 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Consultas Sobre Múltiples Tablas

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

El origen de las consultas basadas en múltiples tablas es la operación de producto


cartesiano, que consiste en una consulta para la que se generan registros como
resultado de todas las combinaciones de los registros de las tablas implicadas.
Supónganse las tablas siguientes: Almacenes, registra los distintos almacenes de la
empresa; Existencias, almacena el stock de cada tipo de pieza en cada almacén; Piezas,
almacena información sobre cada tipo de pieza.

Almacenes Existencias Piezas

ID Ciudad Almacén Tipo Cantidad Tipo Nombre

E Ensenada E 1 100 1 Circuitería

M Mexicali E 2 30 2 TRC

T Tijuana T 4 200 3 Altavoz

R Rosarito M 1 50 4 Carcasa

R 1 10

R 2 200

R 3 100

Base de Datos 51 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

El producto cartesiano de las tablas almacenes, existencias sería la siguiente tabla:

Almacenes.ID Almacenes.Ciudad Existencias. Existencias.Tipo Existencias.


Almacén Cantidad

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

Base de Datos 52 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

R Rosarito R 1 10

R Rosarito R 2 200

R Rosarito R 3 100

En la tabla aparecen todas las combinaciones de las tablas implicadas. La forma de


obtener una consulta de producto cartesiano es especificando el nombre de las tablas
implicadas en la cláusula FROM.

Sintaxis:

SELECT <lista de campos> FROM <tabla1, tabla2, .. tablaN>;

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:

SELECT * FROM Almacenes, Existencias;

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:

Almacenes Existencias Piezas

Almacén Tipo
ID

Base de Datos 53 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Ciudad Tipo Nombre

Cantidad

Existencias.Almacén contiene un identificador del almacén al que se refieren las


existencias (requiere integridad referencial de algún tipo con el campo Almacenes.ID), y
Existencias.Tipo, contiene un identificador del tipo al que se refieren el registro de
existencias (requiere integridad referencial con el campo Piezas.Tipo).

Además se puede intuir la siguiente información:

ƒ Almacenes.ID es la clave principal de Almacenes


ƒ Piezas.Tipo es la clave principal de Piezas
ƒ (Exitencias.Almacén, Exitencias.Tipo) es la clave principal de Existencias
ƒ Exitencias.Almacén es una clave externa de Existencias sobre Almacenes
ƒ Exitencias.Tipo es una clave externa de Existencias sobre Piezas

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:

SELECT Almacenes.Ciudad, Existencias.Tipo, Existencias.Cantidad


FROM Almacenes, Existencias
WHERE Almacenes.ID = Existencias.Almacén;

Esta consulta proporcionaría la siguiente tabla:

Almacenes.Ciudad Existencias.Tipo Existencias.Cantidad

Ensenada 1 100

Base de Datos 54 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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:

SELECT Almacenes.Ciudad, Piezas.Nombre, Existencias.Cantidad


FROM Almacenes, Existencias, Piezas
WHERE (Almacenes.ID = Existencias.Almacén)
AND(Existencias.Tipo = Piezas.Tipo);

El resultado de tal consulta es la siguiente tabla:

Almacenes.Ciudad Piezas.Nombre Existencias.Cantidad

Ensenada Circuitería 100

Ensenada TRC 30

Tijuana Carcasa 200

Mexicali Circuitería 50

Rosarito Circuitería 10

Rosarito TRC 200

Rosarito Altavoz 100

Base de Datos 55 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Uniones - Joins

La operación de unión- Join, es un mecanismo más adecuado para enlazar tablas.

La operación de unión básicamente obtiene el mismo resultado que un producto


cartesiano filtrado, para que sólo se muestren los registros en los que coincida la llave
externa (condición de join). La diferencia con el producto cartesiano es que se va a
emplear una cláusula específica para definir la operación, en lugar de la genérica
WHERE, lo que permitirá al SGBD (Sistema Gestor de Base de Datos) identificar el tipo
de operación y proporcionar algunas ventajas sobre el resultado.

Sintaxis:

SELECT <lista de campos>


FROM <tabla1> INNER JOIN <tabla2>
ON <tabla1>.<campo1>=<tabla2>.<campo2>;

Esta es la unión equiparable al producto cartesiano filtrado como:

SELECT <lista de campos>


FROM <tabla1>, <tabla2> WHERE
<tabla1>.<campo1>=<tabla2>.<campo2>;

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:

SELECT <lista de campos>


FROM <tabla1> INNER JOIN (<tabla2>INNER JOIN <tabla3> ON
<tabla2>.<campo2>=<tabla3>.<campo3>)
ON <tabla1>.<campo1>=<tabla2>.<campo2>;

Base de Datos 56 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Consultas de Inserción

Las consultas de inserción permiten añadir registros a una tabla, para este tipo de
consultas se requiere:

1. Una tabla a la que añadir datos.


2. Una consulta de la que obtener los datos que se añaden; o bien, una lista de los
valores a insertar.

El formato SQL de una consulta de inserción de datos utilizando una consulta de


selección como origen de los datos es:

Sintaxis:

INSERT INTO <tabla destino> (<lista capos destino>)


SELECT <lista capos origen>
FROM <tabla origen>

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 parte de la consulta de selección puede contener todas las opciones vistas al


momento: funciones de agregado, ordenamiento por registros, condiciones de filtrado,
etcétera.

La siguiente sintaxis, se utiliza para añadir datos a una tabla sin utilizar a otra tabla o
consulta como origen de datos.

Base de Datos 57 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Sintaxis:

INSERT INTO <tabla destino> (<lista campos destino>)


VALUES <lista capos origen>;

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 Personas en la INSERT INTO Personas (nombre,


que se almacena información sobre el apellidos, cargo) SELECT Nombre, AP
nombre, apellidos y cargo (en campos & “ ” & AM AS ApellidosA, “Alumno” AS
nombre, apellidos, cargo) de todas las CargoA FROM Alumnos;
personas de la Universidad. Añadir a
esta tabla todos los alumnos de la tabla
Alumnos

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

Añadir al alumno “Francisco Pérez INSERT INTO Alumnos (Nombre, AP,


Solís”, con matrícula 3/18965 a la lista AM, Matricula) VALUES (“Francisco”,
de alumnos “Perez”, “Solis”, “3/18965”);

Consultas de Actualización

Las consultas de actualización de datos, permiten modificar los datos almacenados en


una tabla. Se trata de modificar los valores de determinados campos en los registros que
cumplan una determinada condición.

Base de Datos 58 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Sintaxis:

UPDATE <tabla> SET <campo>=<nuevo valor>,


<campo>=<nuevo valor>, <campo>=<nuevo valor>
WHERE <condición>;

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);

Poner un 1 en las prácticas a todos los UPDATE Alumnos SET Practicas=1


alumnos que tengan 0 de calificación en WHERE (Parcial1>=6) AND
prácticas y tenga los dos parciales (Parcial2>=6)
aprobados con una calificación media AND ((Parcial1+Parcial2)/2 >7) AND
entre ambos mayor que 7 (Practicas =0);

Redondear las calificaciones de los UPDATE Alumnos SET Parcial1= INT


alumnos quitando los decimales (Parcial1), Parcial2= INT (Parcial2),
Practicas = INT (Practicas);

Poner un 0 en prácticas al alumno con UPDATE Alumnos SET Practicas = 0


matrícula 3/01621 WHERE Matricula=”3/01621”;

Olvidar la matrícula de los alumnos que UPDATE Alumnos


se han presentado al segundo parcial SET Matricula = NULL
WHERE Parcial2 IS NOT NULL;

Consultas con Predicado

El predicado se incluye dentro de la cláusula y el primer nombre del campo a recuperar;


los posibles predicados son:

Base de Datos 59 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Predicado Descripción

ALL Devuelve todos los campos de la tabla

TOP Devuelve un determinado número de registros de la


tabla

DISTINCT Omite los registros cuyos campos seleccionados


coincidan totalmente

DISTINCTROW Omite los registros duplicados basándose en la


totalidad del registro y no sólo en los campos
seleccionados

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:

SELECT ALL FROM Alumnos;

La consulta anterior es equivalente a la siguiente:

SELECT * FROM Alumnos;

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:

Base de Datos 60 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

SELECT TOP 25 Nombre, AP, Parcial1 FROM Alumnos WHERE


Parcial1>7 ORDER BY Parcial1 DESC;

Si no se incluye la cláusula ORDER BY, la consulta devolverá un conjunto arbitrario de 25


registros de la tabla Alumnos.
El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si la calificación
número 25 y la 26 son iguales, la consulta regresará 26 registros. Se puede utilizar la
palabra reservada PERCENT para devolver un cierto porcentaje de registros que caen al
principio o al final de un rango especifico por la cláusula ORDER BY. Suponga que en
lugar de los 25 primeros estudiantes con una calificación mayor a 7 en el parcial 1 se
desea el 10%:

Ejemplo:

SELECT TOP 10 PERCENT Nombre, AP, Parcial1 FROM Alumnos


WHERE Parcial1>7 ORDER BY Parcial1 DESC;

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:

SELECT DISTINCT AP FROM Alumnos;

En otras palabras, el predicado DISTINCT devuelve aquellos registros cuyos campos


indicados en la cláusula SELECT tengan un contenido diferente. El resultado de una

Base de Datos 61 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

consulta que utiliza DISTINCT no es actualizable y no refleja los cambios subsiguientes


realizados por otros usuarios.

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:

SELECT DISTINCTROW AP FROM Alumnos;

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:

DELETE [<tabla>. *] FROM <tabla> WHERE <condición>;

Las consultas de borrado no permiten borrar campos, únicamente registros completos.


Por eso en la parte <tabla>.* es opcional. Para eliminar el valor de los campos debe
utilizarse una consulta de actualización, cambiando el valor de los campos a nulo. Si no
se especifica ninguna condición, se eliminan todos los registros. No se elimina la tabla,
ya que la estructura sigue existiendo, aunque no contenga ningún registro.

Base de Datos 62 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Ejemplos:

Consulta SQL

Eliminar los alumnos que hayan DELETE FROM Alumnos WHERE


aprobado todo (Parcial1<=5) AND (Parcial2<=5) AND
(Practicas<=1);

Eliminar a los alumnos cuyo apellido se DELETE FROM Alumnos WHERE (AP
desconozca total o parcialmente IS NULL) OR (AM IS NULL);

Eliminar a todos los alumnos DELETE FROM Alumnos;

Consultas Anidadas

SQL permite el anidamiento de consultas. La forma habitual de utilizar este mecanismo es


emplear el resultado de una consulta para seleccionar valores de otra. Por ejemplo, la
consulta “tomar de la tabla de Alumnos aquellos primeros apellidos que también se
utilizan como segundos apellidos”, se escribe en SQL como sigue:

Ejemplo:

SELECT DISTINCT AP FROM Alumnos WHERE AP IN (SELECT AM


FROM Alumnos);

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.

Base de Datos 63 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

ƒ Cualquier comparador seguido de ALL, ANY o SOME. En este caso, la subconsulta


puede proporcionar múltiples registros como resultado.
− ALL. Se seleccionan en la consulta principal sólo los registros que verifiquen la
comparación con todos los registros seleccionados en la subconsulta.
− ANY. Se seleccionan en la consulta principal sólo los registros que verifiquen
la comparación con cualquiera de los registros seleccionados en la subconsulta.
− SOME. Es idéntico a ANY.
ƒ El nombre de un campo + IN. En este caso, la subconsulta puede proporcionar
múltiples registros como resultados, y se seleccionan en la consulta principal los registros
para los que el valor del campo aparezca también en el resultado de la subconsulta. Es
equivalente a utilizar “=ANY”. Se puede utilizar NOT IN para conseguir el efecto contrario,
equivalente a “<>ALL”.
ƒ La cláusula EXIST. El resultado de la consulta puede proporcionar múltiples registros.
La condición evaluada es que en la subconsulta se recupere algún registro (EXISTS) o no
se recupere ningún registro (NOT EXISTS).

Ejemplos:

Consulta SQL

Seleccionar los alumnos cuya SELECT * FROM Alumnos


calificación en el primer parcial sea WHERE Parcial1>= (SELECT
mayor o igual que la media de todos los AVG(Parcial1)
alumnos en ese parcial FROM Alumnos);

Seleccionar a los alumnos mayores que SELECT * FROM Alumnos


el alumno con mejor calificación en WHERE Edad>= ( SELECT Edad
prácticas (suponiendo que sólo hay uno FROM Alumnos WHERE Practicas = (
con la máxima calificación) SELECT Max (Practicas) AS MaxPract
FROM Alumnos));

Seleccionar los alumnos cuyo nombre SELECT * FROM Alumnos


también lo tengan profesores WHERE Nombre IN (SELECT Nombre
FROM Maestros);

Indicar cuantos alumnos tienen la SELECT COUNT(*) AS Numero FROM

Base de Datos 64 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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

A veces es necesario utilizar los valores de los campos de la consulta principal en la


subconsulta, en tal caso es necesario identificar la tabla del campo consultado utilizando
un nombre y la cláusula AS.

Supóngase la siguiente consulta: seleccionar los alumnos cuyo profesor es “Carlos”. Esta
consulta puede escribirse en SQL de la siguiente forma:

Ejemplo:

SELECT * FROM Alumnos AS Alu WHERE EXISTS


(SELECT * FROM Maestros WHERE (Alu.Tutor=Maestros.NE) AND
(Maestros.Nombre=”Carlos”));

La razón de dar un nombre a la tabla dentro de la consulta es para permitir identificar


correctamente a la tabla Alumnos de la que se obtiene el campo Tutor, ya que la
subconsulta podría contener a la tabla Alumnos.

CREACIÓN Y ADMINISTRACIÓN DE TABLAS


Creación de Tablas Nuevas

La sintaxis para la creación de una tabla nueva es la siguiente:

CREATE TABLE <tabla> (


<campo1> <tipo> (<tamaño>) <índice1>,
<campo2> <tipo> (<tamaño>)
<índice2>,..,<índice múlticampo>, ..);

Base de Datos 65 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

En donde:

ƒ Tabla. Es el nombre de la tabla que se va a crear.


ƒ Campo1, Campo2. Son el nombre de los campos que se van a crear en la tabla
nueva. La nueva tabla debe contener al menos un campo.
ƒ Tipo. Es el tipo de dato del campo en la nueva tabla.
ƒ Tamaño. Es el tamaño del campo y sólo se aplica a los campos de tipo texto.
ƒ Índice1, Índice2. Es una cláusula CONSTRAINT que define el tipo de índice a crear.
Esta cláusula es opcional.
ƒ Índice Multicampos. Es una cláusula CONSTRAINT que define el tipo de índice
multicampos a crear. Un índice múlticampo es aquel que está indexado por el contenido
de varios campos. Esta cláusula es opcional.

Ejemplo:

CREATE TABLE Empleados (


Nombre TEXT (25),
Apellidos TEXT (50));

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:

CREATE TABLE Empleados (


Nombre TEXT (10),
Apellidos TEXT (50),
Fecha_nacimiento DATETIME, CONSTRAINT IndiceGeneral UNIQUE
([Nombre], [Apellidos], [Fecha_nacimiento]));

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.

Base de Datos 66 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Ejemplo:

CREATE TABLE Empleados (


ID INTEGER CONSTRAINT IndicePrimario PRIMARY KEY ,
Nombre TEXT,
Apellidos TEXT,
Fecha_nacimiento DATETIME);

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

Se utiliza la cláusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE


TABLE para crear o eliminar índices. Existen dos sintaxis para esta cláusula, dependiendo
si desea crear o eliminar un índice de un único campo o si se trata de un índice
multicampo.

Sintaxis para índices de un único campo:

CONSTRAINT <Nombre> {PRIMARY KEY | UNIQUE |


REFERENCES <Tabla externa> [(<campoexterno1>,
<campoexterno2>)]}

Sintaxis para los índices de campo múltiples:

CONSTRAINT <Nombre> {
PRIMARY KEY <primario1> [,<primario2>[, .. ]]) |
UNIQUE (<único1> [,<único2>[, ..]])|
FOREING KEY (<ref1>[,<ref2>[, ..]]) REFERENCES <Tabla externa>
[(<campoexterno1>,[<campoexterno2>[,..]])]}

Base de Datos 67 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

En donde:

ƒ Nombre. Es el nombre del índice que se va a crear.


ƒ primarioN. Es el nombre del campo o los campos que forman el índice primario.
ƒ únicoN. Es el nombre del campo o de los campos que forman el índice de clave
única.
ƒ refN. Es el nombre del campo o de los campos que forman el índice externo (hacen
referencia a campos de otra tabla).
ƒ Tabla externa. Es el nombre de la tabla que contiene el campo o los campos
referenciados en refN.
ƒ Campos Externos. Es el nombre del campo o de los campos de la tabla externa
especificados por ref1, ref2, .. ref..

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

La sintaxis para crear un índice en una tabla ya definida, es la siguiente:

CREATE [UNIQUE] INDEX <índice> ON <tabla>


(<campo>[ASC|DESC][,<campo>[ASC|DESC],..])[WITH{PRIMARY|DISALLOW
NULL|IGNORE NULL}];

En donde:

ƒ Índice. Es el nombre del índice a crear.


ƒ Tabla. Es el nombre de una tabla existente en la que se creará el índice.
ƒ Campo. Es el nombre del campo o lista de campos que constituyen el índice.

Base de Datos 68 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

ƒ ASC|DESC. Indica el orden de los valores de los campos.


ƒ UNIQUE. Indica que el índice no puede tener valores duplicados.
ƒ DISALLOW NULL. Prohíbe valores nulos en el índice.
ƒ IGNORE NULL. Excluye del índice los valores nulos incluidos en los campos que lo
componen.
ƒ PRIMARY. Asigna al índice la categoría de llave principal, el cada tabla sólo puede
existir un único índice que sea llave principal. Si un índice es llave principal, implica que
no puede contener valores nulos ni duplicados.

Tipo de Índice Descripción

Se genera un índice de clave única. Lo que implica que los


UNIQUE registros de la tabla no puedan contener el mismo valor en
los campos indexados

Genera un índice primario en el campo o los campos


especificados. Todos los campos de la llave principal deben
PRIMARY KEY
ser únicos y no nulos, cada tabla sólo puede contener una
única llave principal

Genera un índice externo (toma como valor del índice


campos contenidos en otras tablas). Si la llave principal de la
tabla externa consta de más de un campo, se debe utilizar
una definición de índice de múltiples campos, listando todos
FOREIGN KEY
los campos de referencia, el nombre de la tabla externa, y
los nombres de los campos referenciados en la tabla
externa, en el mismo orden que los campos de referencia
del listado

Modificación del Diseño de una Tabla

Es posible modificar el diseño de una tabla ya existente; se pueden modificar los campos
o los índices.

Base de Datos 69 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Sintaxis:

ALTER TABLE <tabla> {


ADD {
{COLUMN <campo> <tipo> [<tamaño>][CONSTRAINT
<índice> <tipo>]} |
{CONSTRAINT <índice> <tipo> (<campo1>, <campo2>,...,
<campoN>)}
}|
DROP{
{COLUMN <campo>} |
{CONSTRAINT <índice>}
}
}

En donde:

ƒ Tabla. Es el nombre de la tabla a modificar.


ƒ Campo. Es el nombre del campo que se va a añadir o eliminar.
ƒ Tipo. Es el tipo del campo que se va a añadir.
ƒ Índice. Es el nombre del índice del campo (cuando se crean campos) o el nombre del
índice de la tabla que se desea eliminar.
ƒ Índice multicampo. Es el nombre del índice del campo multicampo (cuando se crean
campos) o el nombre del índice de la tabla que se desea eliminar.

Se pueden realizar distintas operaciones para modificar las columnas e índices.

Operación Descripción

Se utiliza para añadir un nuevo campo a la tabla, indicando el


ADD COLUMN nombre, el tipo de campo y opcionalmente el tamaño (para
campos de tipo texto)

ADD Se utiliza para agregar un índice de multicampos o de un único


CONSTRAINT campo

Base de Datos 70 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Se utiliza para borrar un campo. Se especifica únicamente el


DROP COLUMN
nombre del campo

Se utiliza para eliminar un índice. Se especifica únicamente el


DROP
nombre del índice a continuación de la palabra reservada
CONSTRAINT
CONSTRAINT

Ejemplos:

Consulta SQL

Agregar un campo Salario de tipo ALTER TABLE Empleados


Moneda a la tabla Empleados ADD COLUMN Salario CURRENCY;

Elimina el campo Salario de la tabla ALTER TABLE Empleados


Empleados DROP COLUMN Salario;

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;

Elimina el índice IndicePrimario de la ALTER TABLE Empleados DROP


tabla Empleados CONSTRAINT IndicePrimario;

Agrega un índice primario de nombre ALTER TABLE Empleados ADD


IndicePrimario sobre el campo ID de la CONSTRAINT IndicePrimario PRIMARY
tabla Empleados. KEY (ID);

Agrega un índice externo a la tabla


Pedidos. El índice externo se basa en el
campo ID_Empleado y se refiere al
campo ID_Empleado de la tabla ALTER TABLE Pedidos
Empleados. En este ejmplo no es ADD CONSTRAINT RelacionPedidos
necesario indicar el campo junto al FOREIGN KEY (ID_Empleado)
nombre de la tabla en la cláusula REFERENCES Empleados (ID);
REFERENCES, pues ID_Empleados se
supone es la llave principal de la tabla
Empleados.

Base de Datos 71 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Elimina el índice externo ALTER TABLE Pedidos DROP


RelacioinPedidos de la tabla Pedidos CONSTRAINT RelacionPedidos;

Agrega un índice multicampo de nombre ALTER TABLE Empleados


IndiceGeneral formado por los campos ADD CONSTRAINT IndiceGeneral
Nombre,Apellidos y Fecha_Nacimiento UNIQUE
de la tabla Empleados. Nombre,Apellidos,Fecha_Nacimiento);

Elimina el índice multicampo de nombre ALTER TABLE Empleados DROP


IndiceGeneral en la tabla Empleados CONSTRAINT IndiceGeneral;

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.

Sin embargo, existe una limitación: determinadas operaciones no se permiten sobre


determinadas consultas empleadas como vistas.

La instrucción SQL para definir una vista es la siguiente:

Sintaxis:

CREATE VIEW <nombre vista> [<lista de campos>]


AS <select query>;

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

Base de Datos 72 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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.

CREACIÓN DE TRIGGERS (DISPARADORES)

Los triggers (disparadores) son procedimientos que se ejecutan cuando se produce un


suceso de BD determinado en una tabla específica. Pueden utilizarse para aumentar la
integridad referencial, conseguir una seguridad adicional o mejorar las opciones de
auditoria disponibles.

Existen dos tipos de disparadores:

ƒ Disparadores de instrucción. Se activan una vez por cada instrucción de disparo.


ƒ Disparadores de fila. Se activan una vez por cada fila de una tabla afectada por las
instrucciones.

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:

Base de Datos 73 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Sintaxis:

CREATE TRIGGER <nombre trigger> <BEFORE|AFTER>


<INSERT|DELETE|UPDATE> ON <nombre relación> FOR EACH
<ROW|STATEMENT> EXECUTE PROCEDURE <nombre procedimiento>
(<argumentos de la función>);

ƒ 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.

El disparador presentado se activa después de haber insertado una fila en la tabla


Alumnos. Puesto que se ejecutará después de que la fila haya sido insertada, los datos de
la misma ya habrán sido validados. A continuación, la misma fila se inserta en una tabla
remota con la misma estructura, la tabla remota debe existir previamente.

Ejemplo:

CREATE TRIGGER copia_datos AFTER INSERT ON Alumnos FOR


EACH ROW ON Alumnos
BEGIN
INSERT INTO Alumnos@hostremoto
VALUES (:new.Nombre, :new.AP, :new.AM, :new.Matricula);
END;

Base de Datos 74 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

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

Un procedimiento es un bloque de instrucciones PL/SQL que se almacenan en el


diccionario de la BD y al que pueden llamar las aplicaciones. Los procedimientos permiten
almacenar dentro de la BD la lógica de las aplicaciones que se emplean con más
frecuencia. Cuando se ejecuta el procedimiento, sus instrucciones se ejecutan como una
unidad. Los procedimientos no devuelven ningún valor al programa que los llama. Los
procedimientos permiten que la aplicación que los invoca pueda proveer parámetros de
entrada. Los procedimientos permiten también, combinar la flexibilidad y facilidad del SQL
con la funcionalidad procedural de un lenguaje de programación estructurado.

Por ejemplo, el siguiente código crea el procedimiento Cuenta_Credito, el cual acredita


una cantidad monetaria a una cuenta bancaria:

Ejemplo:

CREATE PROCEDURE cuenta_credito (cta NUMBER, credito NUMBER) AS


/* Este procedimiento acepta dos argumentos: un número de cuenta y un monto de
dinero acreditado a la cuenta específica.
Sí la cuenta especificada no existe, se crea una nueva cuenta.*/

balance_anterior NUMBER;
balance_nuevo NUMBER;

BEGIN
SELECT balance INTO balance_anterior FROM Cuentas
WHERE id_cuenta=cta
FOR UPDATE OF balance;

balance_nuevo:= balance_anterior + credito;

Base de Datos 75 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

UPDATE Cuentas SET balance=balance_nuevo


WHERE id_cuenta=cta;
COMMIT;

EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO Cuentas(id_cuenta, balance)
VALUES (cuenta, credito);
WHEN OTHERS THEN
ROLLBACK;
END cuenta_credito;

Base de Datos 76 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Auto evaluación Nro 02

Planteamiento de problema

La compañía “xxx” necesita automatizar sus procesos para el eficiente manejo de


la información dentro del ramo de las autopartes.

Los procesos a efectuarse dentro de la empresa son:


1. Captura de los datos de los clientes
2. Facturación
3. Cobranza
4. Corte de caja

Entre otros que se necesitaran debido a los procesos anteriores.


Los datos necesarios para la facturación de los clientes seran:
• Nombre completo
• Dirección
• Fecha en que se está llevando acabo la compra
• Teléfono
• RUC

La factura necesitará contener los datos anteriores y además los siguientes:


• Numero de factura
• Detalle de la compra:
o Clave del articulo
o Descripción
o Cantidad
o Monto
o Desgloce de igv
o Monto total

Para obtener automáticamente en la forma de la factura deberá contener un


catalogo de artículos y para obtener los datos del usuario, debe elaborar un catalogo
de clientes.

Base de Datos 77 Ing° Juan Daniel Cortez Soto


UNIVERSIDAD JOSE CARLOS MARITEGUI

Al momento de realizar la factura de un cliente inexistente deberá capturarse.


Pero si había comprado en esta empresa deberán obtenerse los datos del catálogo de
clientes.

Para este ejercicio deberá efectuar lo siguiente:


1. Crear las tablas que considere necesario
2. Elaborar las relaciones que existen entre ellas para poder efectuar el enlace en la
forma de factura.
3. Se agregan las tablas o consultas y se deben hacer las
Relaciones de acuerdo a sus llaves.
4. Por lo tanto deberá estipular cuales son las llaves en cada
Tabla.

Base de Datos 78 Ing° Juan Daniel Cortez Soto

También podría gustarte