Você está na página 1de 61

UNIVERSIDAD JOSE CARLOS MARITEGUI

INTRODUCCIN 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) diseado para ser utilizado en computadoras personales.
Access proporciona una serie de herramientas de apoyo que facilitan la creacin y
administracin de una base de datos.
Qu es una Base de Datos en Access?
Una Base de Datos se puede definir como un conjunto de informacin 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 mdulos. 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 coleccin de registros. El diseo de
tablas consiste en el diseo de campos necesarios para almacenar correctamente la
informacin.

Consultas. Operaciones que pueden realizarse sobre los datos de las tablas:
seleccin de datos, insercin, modificacin, eliminacin, 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 presentacin de los datos para generar copias impresas de la


informacin registrada en la BD.

Macros. Conjunto de instrucciones que se pueden almacenar para automatizar tareas


repetitivas.

Mdulos. Segmentos de cdigo en lenguaje de alto nivel que permiten realizar


operaciones complejas con los datos y objetos de la BD.
Creacin de una Base de Datos
Al crear una base de datos vaca en Access, en ella se almacenan algunos datos y
objetos del sistema, los cuales estn ocultos al usuario y al programador. Por lo tanto,
antes de tener acceso a la base de datos vaca, se debe tener un directorio para
guardarla en disco. Ahora, el paso a realizar, es la creacin de la nueva BD.
Es importante advertir, que al contrario de lo que ocurre en la mayora de los programas
(Word, PowerPoint), los datos de una BD no necesitan ser explcitamente 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 opcin de guardar, cuando se agrega o se elimina un registro, ya que
estos cambios se realizan de manera automtica.
Para crear la nueva BD, es necesario acceder la opcin Nueva (new) del men Archivo
(file) y seleccionar Base de Datos Vaca (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 extensin MDB (Microsoft DataBase).
Adems de este archivo, puede existir otro con la extensin LDB. Este ltimo contiene
informacin de bloqueo de registros, que permite el acceso seguro de mltiples 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 explcita, con la opcin
correspondiente. Si por cualquier problema la BD no se cierra correctamente, sta podra
daarse.
MANEJO DE TABLAS
Introduccin
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 coleccin
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 ilustracin, 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

Descripcin

Matricula

Matrcula del alumno

Nombre

Nombre del alumno

AP

Apellido paterno

AM

Apellido materno

Edad

Edad

Parcial1

Calificacin obtenida en el primer parcial

Parcial2

Calificacin obtenida en el segundo parcial

Practicas

Calificacin obtenida en las prcticas

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


calificacin final de la asignatura; esto debido a que es posible calcularla a travs del resto
de los campos.
En una tabla no debe almacenarse informacin innecesaria. Adems, si se almacenara,
habra 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 travs de las consultas.
Creacin de Tablas
Definicin 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
opcin Crear Tabla en Vista Diseo (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 caractersticas. En la opcin de Asistenta para Tablas (create table by using
wizard), un programa gua al usuario automticamente en la creacin de los campos de la
tabla; y la opcin 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
descripcin. Adems, para cada tipo existen una serie de atributos que permiten describir
con precisin 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 mxima 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 mxima 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 agrupacin de los
registros.

Number (numrico). Nmero entero o real. Existen diversos tamaos 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 nmero con formato monetario. Se trata de un valor


numrico real con formato especializado para la manipulacin de valores monetarios:
abreviatura de la moneda local, separacin con puntos y comas, etctera.

Autonumber (autonumrico). Un contador que se incrementa automticamente. Se


trata de un valor numrico que el sistema genera automticamente para cada registro de
manera que nunca existirn dos registros en la misma tabla con el mismo valor en este
campo.

Yes/No (si/no). Valor lgico.


Atributos Comunes
Cada uno de los tipos de datos dispone de atributos propios, por ejemplo, la precisin
decimal y el rango de valores en los campos numricos, as como la longitud de cadena
para los campos de texto. Existe una serie de atributos comunes, que se describen a
continuacin:

Format (formato). Se puede utilizar la propiedad de formato para personalizar la


manera en que los nmeros, fecha, hora y textos se despliegan o imprimen. Se pueden
utilizar los formatos predefinidos o se pueden crear formatos especiales utilizando la
simbologa correspondiente. La propiedad de formato afecta nicamente la forma en la
que la informacin es presentada, no afecta la forma en que la informacin es
almacenada.

Smbolo

Significado

(space)

Despliega un espacio

ABC

Despliega literalmente los caracteres dentro de las


comillas

Obliga a mantener la alineacin a la izquierda

Llena el espacio disponible con el carcter que le sigue

Despliega el carcter que le sucede como una literal


Despliega la informacin en un color especfico. 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 (mscara de entrada). Obliga a que los datos se introduzcan en un


formato especfico. Por ejemplo, para un telfono se puede utilizar la siguiente mascara
(000) 0000-00-00, de manera que no permita introducir caracteres extraos. 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.

Carcter

Descripcin

Dgito (requerido; no se permiten los smbolos + o )

Dgito o espacio (opcional; no se permiten los smbolos + o )

Dgito o espacio (opcional; se permiten los smbolos + y -)

Letra (A-Z, requerido)

Letra (A-Z opcional)

Letra o dgito (requerido)

Letra o dgito (opcional)

&

Cualquier carcter o espacio (requerido)

Cualquier carcter 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 maysculas

>

Convierte todos los caracteres que le siguen a minsculas


Ocasiona que la mscara de entrada se despliegue de derecha a

izquierda, en lugar de izquierda a derecha


Carcter de escape. Ocasiona que el carcter que le sigue se
despliegue como una literal. Se utiliza para desplegar los

caracteres especiales como \A, \&


Crea una entrada tipo contrasea, es decir, cualquier carcter
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

LLLL000000AAA

ROGA431009-T52

Caption (ttulo). Es el ttulo de la columna que aparecer al editar los datos


almacenados para el campo.

Default Value (valor predeterminado). Un valor que automticamente se introduce


en el campo si el usuario no indica otro diferente.

Validation Rule (regla de validacin). Una condicin 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 aos con una expresin como
sigue >=18 AND <=65.

Validation Text (texto de validacin). Un mensaje que Access mostrar al usuario


cuando intente introducir un valor no permitido por una regla de validacin. Para el
ejemplo anterior, el mensaje podra ser La edad debe estar comprendida entre 18 y 65
aos.

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 omisin, un campo no contiene ningn 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 ms
rpidas (ordenaciones y bsquedas) a costa de un mayor espacio en disco y en memoria
(para almacenar el ndice) y de que otras operaciones sean ms 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, tambin llamada clave primaria o clave
maestra. Una llave primaria es un campo o conjunto de campos cuyos valores no se
repiten y a travs 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 matrcula puede ser una llave primaria, ya que no habr dos alumnos
con la misma matrcula; y adems, es posible identificar a un alumno a travs de su
matrcula. El campo AP, no puede ser llave primaria porque puede haber ms de un
alumno con el mismo apellido. El conjunto formado por AP, AM y Nombre, podra
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 ningn 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 automticamente crear un campo llamado ID, el cual ser de tipo
autonumrico.
Siguiendo con el ejemplo de Alumnos, se pueden definir los atributos para cada uno de
los campos:

Campo

Tipo

Descripcin

Otros atributos
Requerido, indexado sin repeticin,

Matricula

Cadena (7)

Matrcula

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

Edad

>018 AND <=65

Numrico

Calificacin

1 decimal; predeterminado 0; >=0

simple

primer parcial

AND <=10

Numrico

Calificacin

1 decimal; predeterminado 0; >=0

simple

segundo parcial

AND <=10

Edad

Parcial1

Parcial2

Practicas

Numrico
byte

Numrico
simple

Calificacin
obtenida en las
prcticas

1 decimal; predeterminado 0; >=0


AND <=2

Introduccin 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 vaca. Al final de la tabla siempre aparece una fila en blanco destinada a la
insercin de nuevos registros.

Antes de salir de un campo, se verifican las reglas de validacin 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 comprobarn las reglas
asociadas al mismo, y no se grabarn 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 mayora 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.

Relacin uno a uno. Cuando un registro de una tabla slo 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 relacin uno a uno entre
las dos tablas, ya que un departamento tiene un slo jefe y un maestro, puede ser jefe de
un slo departamento.

Relacin uno a muchos. Cuando un registro de una tabla (tabla secundaria) slo
puede estar relacionado con un nico registro de otra tabla (tabla principal) y un registro
de la tabla principal, puede tener ms 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 slo tiene un padre.
Por ejemplo: tenemos dos tablas, una con los datos de diferentes poblaciones y otra con
los habitantes, una poblacin puede tener ms de un habitante, pero un habitante
pertenecer a una poblacin nica. En este caso la tabla principal, ser la de poblaciones
y la tabla secundaria ser la de habitantes. Una poblacin puede tener varios habitantes,
pero un habitante pertenece a una sola poblacin. Esta relacin 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 fornea (clave fornea o clave externa).

Base de Datos

29

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Una llave fornea, 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
poblacin que contiene el cdigo de la poblacin en la que est empadronado el
habitante, esta columna es la llave fornea de la tabla habitante, y en la tabla poblaciones,
se tiene una columna cdigo de poblacin como llave primaria.

Relacin varios a varios: Cuando un registro de una tabla puede estar relacionada con
ms de un registro de la otra tabla y viceversa, en este caso las dos tablas no pueden
estar relacionadas directamente, se tiene que aadir 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 artculos
que se venden en una empresa, un cliente podr realizar un pedido con varios artculos y
un artculo podr ser vendido a varios clientes.
No se puede definir entre clientes y artculos, hace falta otra tabla (por ejemplo una tabla
de pedidos) relacionada con clientes y artculos. La tabla pedidos, estar relacionada con
clientes por una relacin uno a muchos y tambin estar relacionada con artculos por una
relacin uno a muchos.

Para establecer las relaciones de integridad en Access, se deber seleccionar la opcin


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 estn disponibles en la BD, ah se debern
seleccionar las tablas que se desean relacionar.

Una vez seleccionadas las tablas, se debern definir los campos a relacionar:

Base de Datos

31

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Se sugiere seleccionar la opcin Actualizacin en Cascada de los Campos Relacionados


(cascade update related fields), de tal forma que al realizar algn cambio en los campos,
los datos se actualicen de manera automtica en el campo relacionado.
NORMALIZACIN
Introduccin
El proceso de normalizacin, se define como el procedimiento que permite dividir una
relacin en dos o ms relaciones ms pequeas, con base a las relaciones de atributos.
La normalizacin es un procedimiento riguroso para el diseo de BD.
El propsito de este proceso es quitar las cualidades indeseables de una relacin que
puedan causar anomalas en el almacenamiento al momento de realizar operaciones de
actualizacin en la base de datos.
La meta final del proceso de normalizacin es la agrupacin de todos los atributos
(campos) de una BD en relaciones adecuadas para que se puedan almacenar con el
mnimo de datos redundantes.
Bsicamente, las reglas de normalizacin estn encaminadas a eliminar redundancias e
inconsistencias de dependencia en el diseo de las tablas.
El proceso de normalizacin se compone de cinco pasos.
De esta manera, suponga que se desea crear una tabla con la siguiente informacin:
nombre de usuario, nombre de la empresa, direccin de la empresa y correo electrnico.
En principio se definira la estructura de una tabla como la que se muestra a continuacin:
Normalizacin CERO
Usuarios
Nombre

Empresa

Direccin

Email1

Email2

Anglica

ABC

Km. 106 Tij-Eda

abc@abc.com

ange@abc.com

Base de Datos

32

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Vctor

XYZ

Punta Banda 32

xyz@uni.home.com

vic@uni.home.com

La tabla anterior se encuentra en el nivel de Normalizacin Cero, debido a que ninguna de


las reglas de normalizacin ha sido aplicada. Esto es, como se puede observar en los
campos Email1 y Email2, qu pasar, cuando se requiera una tercera direccin de
correo (Email3)? Se deber agregar otro campo/columna a la tabla, adems de tener
que reprogramar la entrada de los datos en el cdigo?
Obviamente no, lo que se desea es crear un sistema funcional que pueda crecer y
adaptarse fcilmente a los nuevos requisitos; para esto, es necesario aplicar las reglas del
Primer Nivel de Formalizacin.
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. Adems, no existe una llave primaria. La tercera regla
de la 1FN, bsicamente indica que es necesario agregar un campo tipo autonumrico,
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

Anglica

ABC

Km. 106 Tij-Eda

abc@abc.com

Anglica

ABC

Km. 106 Tij-Eda

ange@abc.com

Base de Datos

33

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Vctor

XYZ

Punta Banda 32

xyz@uni.home.com

Vctor

XYZ

Punta Banda 32

vic@uni.home.com

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


campo Email. Sin embargo, surgen otros problemas, cada vez que se introduce un nuevo
registro en la tabla usuarios, se duplica cierta informacin como es el nombre de la
empresa, su direccin y el nombre del usuario. Esto ocasiona no nicamente que la BD
crezca demasiado, sino que la BD pueda corromperse fcilmente, 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 dems datos del usuario. Por ltimo, ser necesario
utilizar la llave primaria para relacionar estos campos:

Usuarios
ID

Nombre

empresa

direccion_empresa

Anglica

ABC

Km. 106 Tij-Eda

Victor

XYZ

Punta Banda 32

Base de Datos

34

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Emails
EID

relID

Email

abc@abc.com

ange@abc.com

xyz@uni.home.com

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 todava surge
un problema, ya que al tratar de aadir nuevos empleados que pertenecen a una misma
empresa, se estara duplicando la informacin de sta (direccin y nombre). Tambin 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 direccin, no dependen de la llave
principal (ID), por lo tanto deben de tener su propio (empresaID):

Usuarios

Base de Datos

ID

Nombre

relEmpresaID

Angelica

Victor

35

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Empresas
empID

Empresa

Direccion_empresa

ABC

Km. 106 Tij-Eda

XYZ

Punta Banda 32

EID

relID

Email

abc@abc.com

ange@abc.com

xyz@uni.home.com

vic@uni.home.com

Emails

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 aadir
200 (o ms) usuarios a la empresa ABC, y slo aadir una vez la informacin de dicha
empresa. Como consecuencia, las tablas de Usuarios y Emails pueden crecer, sin correr
el riesgo de la duplicidad o corrupcin de datos.
Cuarta Forma Normal 4FN
La Cuarta Forma Normal se aplica cuando existe una relacin 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 normalizacin que se aplica en ciertas ocasiones, an cuando en
la mayora 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 asegurarn que no se ha creado ninguna
columna extraa en las tablas y que la estructura de las tablas que se han creado es de
tamao justo.
CONSULTAS
Introduccin
Las consultas son operaciones que se realizan sobre los datos de una BD. Estas
operaciones pueden ser de diversos tipos:

Consultas de seleccin de datos. Permiten recuperar los datos almacenados en las


tablas en un formato y orden adecuados. Adems, permiten filtrar y agrupar la
informacin.

Consultas de insercin de datos. Permiten agregar registros a una tabla.

Consultas de modificacin. Permiten modificar los valores de los campos de los


registros de una tabla.

Consultas de borrado. Permiten eliminar registros de una tabla.

Consultas de creacin 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 seleccin se pueden resaltar algunos grupos importantes:

Consultas de seleccin simple. Permiten filtrar registros y aadir o descartar


campos de los registros. Se utilizan para crear vistas.

Consultas de unin. Permiten relacionar los datos de distintas tablas a travs de


campos clave.

Consultas de agrupamiento. Permiten obtener resultados estadsticos de conjuntos


de registros, como medias de un campo, totales, etctera.

Base de Datos

37

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Las consultas a las BD se hacen a travs de los denominados lenguajes de consulta. El


ms utilizando de este tipo de lenguajes es el SQL (Structured Query Languge).

Introduccin al SQL
Una consulta SQL est compuesta por una instruccin SQL que la define. Se trata de un
comando que puede ocupar cuanta lnea de texto se desee, terminado en (;).
SQL, como cualquier otro lenguaje, tambin cuenta con algunas palabras reservadas,
como son: SELECT, INSERT, DELETE, UPDATE, SET, WHERE, IN, DISTINCT, GROUP,
ORDER BY, etctera.
Componentes SQL
El lenguaje SQL est compuesto por comandos, clusulas, 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

Descripcin

CREATE

Utilizado para crear nuevas tablas, campos e ndices

DROP

Empleado para eliminar tablas e ndices

ALTER

Base de Datos

Utilizado para modificar las tablas agregando campos o


cambiando la definicin de los campos

38

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

COMANDOS DML
Comando
SELECT

INSERT

UPDATE

DELETE

Descripcin
Utilizado para consultar registros de la base de datos
que cumplan un criterio determinado
Utilizado para cargar lotes de datos en la base de datos
en una operacin nica
Utilizado para modificar los valores de los campos y
registros especificados
Utilizado para eliminar registros de una tabla de una
base de datos

Clusulas
Las clusulas son condiciones de modificacin utilizadas para definir los datos que se
desean seleccionar o manipular.

Clusula
FROM

WHERE

GROUP BY

HAVING

ORDER BY

Base de Datos

Descripcin
Se utiliza para especificar la tabla de la cual se van a
seleccionar los registros
Se utiliza para especificar las condiciones que deben
reunir los registros que se van a seleccionar
Se utiliza para separar los registros seleccionados en
grupos especficos
Se utiliza para expresar la condicin que debe satisfacer
cada grupo
Se utiliza para ordenar los registros seleccionados de
acuerdo con un orden especfico

39

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Operadores Lgicos
Operador
AND

OR

NOT

Descripcin
Es el "y" lgico. Evala dos condiciones y devuelve un
valor de verdad slo si ambas son ciertas
Es el "o" lgico. Evala dos condiciones y devuelve un
valor de verdad si alguna de las dos es cierta
Negacin lgica. Devuelve el valor contrario de la
expresin

Operadores de Comparacin

Operador

Descripcin

<

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 comparacin 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 clusula 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

Funcin

Descripcin
Utilizada para calcular el promedio de los valores de un

AVG

campo determinado

COUNT

Utilizada para devolver el nmero de registros de la


seleccin
Utilizada para devolver la suma de todos los valores de un

SUM

campo determinado
Utilizada para devolver el valor ms alto de un campo

MAX

especificado
Utilizada para devolver el valor ms bajo de un campo

MIN

especificado

Consultas de Seleccin Simple


La consulta ms simple posible consiste en la seleccin de campos y registros de una
tabla. Se identifican los campos que se desean y una condicin que deben cumplir los
registros seleccionados. El resultado es una tabla, que consiste en un subconjunto de la
original.
Sintaxis bsica:

SELECT <lista de campos> FROM <tabla> WHERE <condicin>;

Esta instruccin recupera ciertos campos de los registros de una tabla que cumplen una
condicin. La clusula WHERE es opcional. Si se omite, se seleccionan todos los
registros (se supone que la condicin 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 comodn (*) para
identificar la lista completa.
Sintaxis:

SELECT * FROM <tabla> WHERE <condicin>;

Tambin, se pueden especificar varios campos identificndolos por sus nombres y


separndolos por comas (,).
Sintaxis:

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


<condicin>;

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

Consulta

SQL

Seleccionar los alumnos mayores de

SELECT *

25 aos

FROM Alumnos
WHERE Edad>=25;

Seleccionar los apellidos y nombre de


los

que

han

aprobado

los

dos

parciales

SELECT AP, AM, Nombre


FROM Alumnos
WHERE

(Parcial1>=6)

AND

(Parcial2>=6);
Generar un listado con los nombres y
apellidos

de los

calificaciones

alumnos

y sus

SELECT Nombre, AP, AM, Parcial1,


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 clusula 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 *

aos, suponiendo que la tabla alumnos

FROM Alumnos

est

IN C:\colegio\registro.mdb

en

otra

BD

que

se

llama

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 <expresin> AS <nombre campo> para cada
columna como si se tratara de un campo ms de la tabla.
Sintaxis:

SELECT <lista de campos>, <expresin> AS <nombre campo> FROM


<tabla> WHERE <condicin>;
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 prcticas

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 matrcula

AM AS NombreCompleto, Matricula
FROM Alumnos;

Expresiones
Las expresiones en SQL son semejantes a las utilizadas en la mayora de los lenguajes,
entre las principales se encuentran:

Operador

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

IS NULL

blanco. Ejemplo: Alumnos cuya edad se desconoce:


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 comparacin
de cadenas utilizando caracteres comodines:
? = Un carcter cualquiera

LIKE

* = Cualquier combinacin de caracteres


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, etctera) cuando estos
incluyen espacios. Ejemplo: Suponga una tabla llamada

[]

Alumnos Nuevos:
SELECT * FROM [Alumnos Nuevos];

Ordenacin 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


<condicin> 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 clusula
DESC, que puede ser incluida tras el nombre del campo por el que se ordena de forma
descendente. De la misma forma, la clusula ASC ordena los datos pero de forma
ascendente, aunque no es necesario especificarla, ya que es la opcin por omisin.
Ejemplos:

Consulta
Obtener

SQL
un

listado

ordenado por apellidos

de

alumnos

SELECT *
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 segn 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,
mximo, mnimo, cuenta, etctera.
Para este tipo de consultas se proporcionan los siguientes operadores, conocidos tambin
como funciones de agregado.

Operador
COUNT
(<campo>)

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

SUM (<campo>)

AVG (<campo>)

MAX (<campo>)

Base de Datos

Suma del conjunto de valores contenidos en el campo


especificado. Los registros con valor nulo no se cuentan
Media aritmtica del conjunto de valores contenidos en el
campo especificado. Los registros con valor nulo no se cuentan
Valor mximo del conjunto de valores contenido en el campo
especificado. Los registros con valor nulo no se cuentan

46

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Valor mnimo 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 <condicin>;

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

Consulta

SQL

Obtener la calificacin media

SELECT AVG (Parcial1) AS MediaP1

para el primer parcial

FROM Alumnos;

Obtener la mxima y mnima


calificacin media de los dos
parciales
Obtener la mxima calificacin
del primer parcial de entre los
alumnos que no tengan cero en
las practicas

SELECT

MAX

(Parcial1

Parcial2)/2

AS

MedMax,
MIN (Parcial1 + Parcial2)/2 AS MEdMin
FROM Alumnos;
SELECT MAX (Parcial1) AS MaxP1
FROM Alumnos
WHERE Practicas <> 0;

Obtener el nmero 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 clusula 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 <condicin> GROUP BY <lista de campos>;

De esta forma, para cada valor distinto de la <lista de campos> suministrada, se calcula la
funcin de agregado correspondiente, slo con el conjunto de registros con dicho valor en
los campos (los registros que no cumplan la condicin WHERE no se toman en cuenta).
Ejemplos:

Consulta

SQL

Obtener el nmero de alumnos que hay

SELECT

con el mismo nombre (sin apellido) para

Cuantos

cada

FROM Alumnos

nombre

diferente

(cuntos

Nombre,

COUNT

Juanes, Pedros, ...hay?)

GROUP BY Nombre;

Obtener el nmero de personas que han

SELECT

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

ORDER BY COUNT (*) DESC;

nmero

de

alumnos

de

forma

INT

(Parcial1)

AS

(*)

AS

Nota,

descendente

El agrupamiento de filas impone limitaciones obvias sobre los campos que pueden ser
seleccionados, de manera que slo puedan obtenerse campos como resultado de una
funcin de agregado o la combinacin de campos que aparezcan en la clusula 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 sera
incorrecta:

SELECT Nombre FROM Alumnos GROUP BY AP;

La razn de que sea incorrecta es trivial: Qu nombre (de los varios posibles) se
seleccionara para cada grupo de AP?. Se debe tener en cuenta que para cada grupo
generado con GROUP BY, slo se muestra una fila como resultado de la consulta.
Filtrado de Registros de Salida
En estas consultas puede aparecer una condicin 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 clusula WHERE no permite descartar registros utilizando
como condicin el resultado de la funcin de agregado.
Por ejemplo, supngase la siguiente consulta: seleccionar los nombres de alumnos para
los que haya ms de dos alumnos con el mismo nombre (3 Pedros, 4 Juanes,..).
Intuitivamente se podra 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 clusula WHERE no puede contener


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

SELECT

<agregado>

AS

<nombre>

FROM

<tabla>

WHERE <condicin> GROUP BY <lista de campos>


HAVING <condicin de agregado>;

Base de Datos

49

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Para el ejemplo anterior, la instruccin SQL apropiada sera:


Ejemplo:

SELECT

Nombre,

COUNT

(*)

FROM

Alumnos

GROUP BY Nombre HAVING COUNT (*)>2;

En otras palabras, la clusula WHERE selecciona los registros que intervienen para
calcular las funciones de agregado; mientras que la clusula HAVING, selecciona los
registros que se muestran teniendo en cuenta los resultados de las funciones de
agregado.
En todos los casos, la clusula ORDER BY puede ser incluida. Evidentemente esta
clusula afectar nicamente el orden en que se muestran los registros resultado, y no el
clculo de las funciones de agregado. Los campos por los cuales puede efectuarse la
ordenacin slo pueden ser aquellos susceptibles de ser mostrados; es decir, que los
campos admisibles en la clusula ORDER BY son los mismos que se encuentran en la
clusula SELECT: funciones de agregado y la combinacin de campos que aparezcan en
GROUP BY.
El formato de una instruccin de seleccin SQL con todas las opciones vistas hasta ahora
es la siguiente:
Sintaxis:

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


GROUP BY <lista de campos> HAVING <condicin de agregado>
ORDER BY <lista de campos>;

Base de Datos

50

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Consultas Sobre Mltiples Tablas


Hasta el momento todas las consultas se basan en seleccionar registros y campos sobre
los datos almacenados en una nica tabla. SQL tambin permite obtener resultados a
travs de la combinacin de mltiples tablas, la forma de hacerlo es mediante un enlace o
unin (Join) de varias tablas a travs 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 relacin se establece habitualmente entre uno o varios
campos de la tabla y la llave principal de otra tabla, y la mayora de las veces guarda
relacin directa con las polticas de integridad referencial definidas.
Producto Cartesiano
El origen de las consultas basadas en mltiples tablas es la operacin 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.
Supnganse las tablas siguientes: Almacenes, registra los distintos almacenes de la
empresa; Existencias, almacena el stock de cada tipo de pieza en cada almacn; Piezas,
almacena informacin sobre cada tipo de pieza.

Almacenes

Existencias

ID

Ciudad

Almacn

Tipo

Cantidad

Tipo

Nombre

Ensenada

100

Circuitera

Mexicali

30

TRC

Tijuana

200

Altavoz

Rosarito

50

Carcasa

10

200

100

Base de Datos

Piezas

51

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

El producto cartesiano de las tablas almacenes, existencias sera la siguiente tabla:

Almacenes.ID

Almacenes.Ciudad

Existencias.

Existencias.Tipo

Almacn

Existencias.
Cantidad

Ensenada

100

Ensenada

30

Ensenada

200

Ensenada

50

Ensenada

10

Ensenada

200

Ensenada

100

Mexicali

100

Mexicali

30

Mexicali

200

Mexicali

50

Mexicali

10

Mexicali

200

Mexicali

100

Tijuana

100

Tijuana

30

Tijuana

200

Tijuana

50

Tijuana

10

Tijuana

200

Tijuana

100

Rosarito

100

Rosarito

30

Rosarito

200

Rosarito

50

Base de Datos

52

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Rosarito

10

Rosarito

200

Rosarito

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 clusula FROM.
Sintaxis:

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

La lista de campos vlidos 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 instruccin 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 relacin existente entre los campos:
Almacenes

Existencias

Piezas

Almacn

Tipo

ID

Base de Datos

53

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Ciudad

Tipo

Nombre

Cantidad

Existencias.Almacn contiene un identificador del almacn al que se refieren las


existencias (requiere integridad referencial de algn 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).
Adems se puede intuir la siguiente informacin:

Almacenes.ID es la clave principal de Almacenes

Piezas.Tipo es la clave principal de Piezas

(Exitencias.Almacn, Exitencias.Tipo) es la clave principal de Existencias

Exitencias.Almacn es una clave externa de Existencias sobre Almacenes

Exitencias.Tipo es una clave externa de Existencias sobre Piezas

Las llaves externas permiten enlazar la informacin relacionada entre diferentes tablas. Es
decir, si se desea relacionar las existencias en un almacn 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.Almacn.
Ejemplo:

SELECT

Almacenes.Ciudad,

FROM

Existencias.Tipo,

Existencias.Cantidad

Almacenes,

Existencias

WHERE Almacenes.ID = Existencias.Almacn;

Esta consulta proporcionara la siguiente tabla:

Almacenes.Ciudad

Existencias.Tipo

Existencias.Cantidad

Ensenada

100

Base de Datos

54

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Ensenada

30

Mexicali

50

Tijuana

200

Rosarito

10

Rosarito

200

Rosarito

100

Tijuana

200

De la misma forma se podran enlazar las tres tablas mediante la siguiente consulta:
Ejemplo:

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


FROM Almacenes, Existencias, Piezas
WHERE (Almacenes.ID = Existencias.Almacn)
AND(Existencias.Tipo = Piezas.Tipo);

El resultado de tal consulta es la siguiente tabla:

Almacenes.Ciudad

Piezas.Nombre

Existencias.Cantidad

Ensenada

Circuitera

100

Ensenada

TRC

30

Tijuana

Carcasa

200

Mexicali

Circuitera

50

Rosarito

Circuitera

10

Rosarito

TRC

200

Rosarito

Altavoz

100

Base de Datos

55

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Uniones - Joins
La operacin de unin- Join, es un mecanismo ms adecuado para enlazar tablas.
La operacin de unin bsicamente obtiene el mismo resultado que un producto
cartesiano filtrado, para que slo se muestren los registros en los que coincida la llave
externa (condicin de join). La diferencia con el producto cartesiano es que se va a
emplear una clusula especfica para definir la operacin, en lugar de la genrica
WHERE, lo que permitir al SGBD (Sistema Gestor de Base de Datos) identificar el tipo
de operacin 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 unin equiparable al producto cartesiano filtrado como:

SELECT <lista de campos>


FROM

<tabla1>,

<tabla2>

WHERE

<tabla1>.<campo1>=<tabla2>.<campo2>;

En general, para cualquier nmero de tablas la unin se realiza anidando las uniones. La
sintaxis para tres tablas sera 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 Insercin
Las consultas de insercin permiten aadir registros a una tabla, para este tipo de
consultas se requiere:
1.

Una tabla a la que aadir datos.

2.

Una consulta de la que obtener los datos que se aaden; o bien, una lista de los
valores a insertar.
El formato SQL de una consulta de insercin de datos utilizando una consulta de
seleccin 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 seleccin 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 aadan a la tabla destino.
Los campos no especificados sern llenados con los valores predeterminados, a menos
que no se tengan ninguno, en ste caso quedarn vacos.
La parte de la consulta de seleccin puede contener todas las opciones vistas al
momento: funciones de agregado, ordenamiento por registros, condiciones de filtrado,
etctera.
La siguiente sintaxis, se utiliza para aadir 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

Supngase una tabla Personas en la

INSERT

que se almacena informacin 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;

INTO

Personas

(nombre,

personas de la Universidad. Aadir a


esta tabla todos los alumnos de la tabla
Alumnos
Supngase una tabla Historia en la que

INSERT INTO Historia (ao, numero)

se

SELECT Year (Date()) AS esteao,

almacena

informacin

sobre

el

nmero de alumnos matriculados cada

COUNT (*) AS Total FROM Alumnos;

ao. Esta tabla tiene los campos: ao


(tipo fecha) y nmero (entero largo).
Aadir a esta tabla el nmero de
alumnos actual con la fecha de este ao
Aadir

al

alumno

Francisco

Prez

INSERT INTO Alumnos (Nombre, AP,

Sols, con matrcula 3/18965 a la lista

AM, Matricula) VALUES (Francisco,

de alumnos

Perez, Solis, 3/18965);

Consultas de Actualizacin
Las consultas de actualizacin 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 condicin.

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

Ejemplos:

Consulta

SQL

Aprobar el primer parcial que tenga una

UPDATE Alumnos SET Parcial1=6

calificacin entre 4.5 y 5.9

WHERE

(Parcial1<=5)

AND

(Parcial2>=6);
Poner un 1 en las prcticas a todos los

UPDATE Alumnos SET Practicas=1

alumnos que tengan 0 de calificacin en

WHERE

prcticas y tenga los dos parciales

(Parcial2>=6)

aprobados con una calificacin 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),

(Parcial1>=6)

AND

Practicas = INT (Practicas);


Poner un 0 en prcticas al alumno con

UPDATE Alumnos SET Practicas = 0

matrcula 3/01621

WHERE Matricula=3/01621;

Olvidar la matrcula 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 clusula 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

Descripcin

ALL

Devuelve todos los campos de la tabla

TOP

Devuelve un determinado nmero de registros de la


tabla

DISTINCT

Omite los registros cuyos campos seleccionados


coincidan totalmente

DISTINCTROW

Omite los registros duplicados basndose en la


totalidad del registro y no slo en los campos
seleccionados

ALL
Si no se incluye ninguno de los predicados se asume ALL, por omisin. El motor de BD
selecciona todos los registros que cumplen las condiciones de la instruccin 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 ms rpido
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 nmero de registros que entran entre el principio o el final de un rango
determinado por una clusula ORDER BY. Suponga que se desean recuperar los
nombres de los 25 primeros estudiantes con una calificacin mayor a 7 en el parcial 1. La
consulta sera:

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 clusula 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 calificacin
nmero 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 clusula ORDER BY. Suponga que en
lugar de los 25 primeros estudiantes con una calificacin 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 instruccin 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 Lpez en el campo AP, la
siguiente instruccin SQL devolvera un nico registro:
Ejemplo:

SELECT DISTINCT AP FROM Alumnos;

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


indicados en la clusula 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 slo
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 clusula SELECT:
Ejemplo:

SELECT DISTINCTROW AP FROM Alumnos;

Si la tabla empleada contiene dos registros: Antonio Lpez y Martha Lpez, el ejemplo del
predicado DISTINCT devuelve un nico registro con el valor Lpez en el campo AP, ya
que busca no duplicados en dicho campo. Este ltimo ejemplo devuelve dos registros con
el valor Lpez 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 condicin. Para este tipo de
consulta se tiene:
Sintaxis:

DELETE [<tabla>. *] FROM <tabla> WHERE <condicin>;

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 actualizacin, cambiando el valor de los campos a nulo. Si no
se especifica ninguna condicin, se eliminan todos los registros. No se elimina la tabla,
ya que la estructura sigue existiendo, aunque no contenga ningn registro.

Base de Datos

62

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Ejemplos:

Consulta
Eliminar

SQL
los

alumnos

que

hayan

aprobado todo

DELETE

FROM

Alumnos

WHERE

(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 tambin 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 parntesis. Se pueden anidar tantas consultas como sean
necesarias.

Las clusulas 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 comparacin.

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 mltiples registros como resultado.

ALL. Se seleccionan en la consulta principal slo los registros que verifiquen la


comparacin con todos los registros seleccionados en la subconsulta.

ANY. Se seleccionan en la consulta principal slo los registros que verifiquen


la comparacin con cualquiera de los registros seleccionados en la subconsulta.

SOME. Es idntico a ANY.


El nombre de un campo + IN. En este caso, la subconsulta puede proporcionar
mltiples registros como resultados, y se seleccionan en la consulta principal los registros
para los que el valor del campo aparezca tambin 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 clusula EXIST. El resultado de la consulta puede proporcionar mltiples registros.


La condicin evaluada es que en la subconsulta se recupere algn registro (EXISTS) o no
se recupere ningn registro (NOT EXISTS).
Ejemplos:

Consulta
Seleccionar

SQL
los

alumnos

cuya

SELECT * FROM Alumnos

calificacin 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 calificacin en

WHERE Edad>= ( SELECT Edad

prcticas (suponiendo que slo hay uno

FROM Alumnos WHERE Practicas = (

con la mxima calificacin)

SELECT Max (Practicas) AS MaxPract


FROM Alumnos));

Seleccionar los alumnos cuyo nombre

SELECT * FROM Alumnos

tambin lo tengan profesores

WHERE Nombre IN (SELECT Nombre


FROM Maestros);

Indicar

cuantos

Base de Datos

alumnos

tienen

la

64

SELECT COUNT(*) AS Numero FROM

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

calificacin del primer parcial mayor que

Alumnos WHERE Parcial1> ( SELECT

la mxima calificacin del segundo

MAX

parcial de entre los alumnos que en las

WHERE Practicas <1);

(Parcial2)

FROM

Alumnos

prcticas 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 clusula AS.
Supngase 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 razn 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 podra contener a la tabla Alumnos.
CREACIN Y ADMINISTRACIN DE TABLAS
Creacin de Tablas Nuevas
La sintaxis para la creacin de una tabla nueva es la siguiente:

CREATE TABLE <tabla> (


<campo1> <tipo> (<tamao>) <ndice1>,
<campo2> <tipo> (<tamao>)
<ndice2>,..,<ndice mlticampo>, ..);

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.

Tamao. Es el tamao del campo y slo se aplica a los campos de tipo texto.

ndice1, ndice2. Es una clusula CONSTRAINT que define el tipo de ndice a crear.
Esta clusula es opcional.

ndice Multicampos. Es una clusula CONSTRAINT que define el tipo de ndice


multicampos a crear. Un ndice mlticampo es aquel que est indexado por el contenido
de varios campos. Esta clusula 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 ms
llamado Fecha_nacimiento de tipo Fecha/Hora. Tambin 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.
Clusula CONSTRAINT
Se utiliza la clusula CONSTRAINT en las instrucciones ALTER TABLE y CREATE
TABLE para crear o eliminar ndices. Existen dos sintaxis para esta clusula, 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 mltiples:

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 estn utilizando las instrucciones
ALTER TABLE o CREATE TABLE, la clusula CONSTRAINT debe aparecer
inmediatamente despus de la especificacin del campo indexado.
Si se desea crear un ndice con mltiples campos cuando se estn utilizando las
instrucciones ALTER TABLE O CREATE TABLE, la clusula CONSTRAINT debe
aparecer afuera de la clusula de creacin de tabla.
Creacin 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. Prohbe 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 categora de llave principal, el cada tabla slo 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

Descripcin
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

PRIMARY KEY

especificados. Todos los campos de la llave principal deben


ser nicos y no nulos, cada tabla slo 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 ms de un campo, se debe utilizar

FOREIGN KEY

una definicin de ndice de mltiples campos, listando todos


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

Modificacin del Diseo de una Tabla


Es posible modificar el diseo 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> [<tamao>][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 aadir o eliminar.

Tipo. Es el tipo del campo que se va a aadir.

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.

Operacin

Descripcin
Se utiliza para aadir un nuevo campo a la tabla, indicando el

ADD COLUMN

nombre, el tipo de campo y opcionalmente el tamao (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 continuacin de la palabra reservada

CONSTRAINT

CONSTRAINT

Ejemplos:

Consulta
Agregar

SQL
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

tabla Empleados

CONSTRAINT IndicePrimario;

Agrega un ndice primario de nombre

ALTER

IndicePrimario sobre el campo ID de la

CONSTRAINT

tabla Empleados.

KEY (ID);

TABLE

Empleados

TABLE

DROP

Empleados

IndicePrimario

ADD

PRIMARY

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

Empleados.

En

este

de

la

ejmplo

tabla
no

es

ALTER TABLE Pedidos


ADD CONSTRAINT RelacionPedidos

necesario indicar el campo junto al

FOREIGN KEY (ID_Empleado)

nombre de la tabla en la clusula

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

Nombre,Apellidos y Fecha_Nacimiento

UNIQUE

de la tabla Empleados.

Nombre,Apellidos,Fecha_Nacimiento);

Elimina el ndice multicampo de nombre

ALTER

IndiceGeneral en la tabla Empleados

CONSTRAINT IndiceGeneral;

CONSTRAINT

TABLE

IndiceGeneral

Empleados

DROP

CREACIN DE VISTAS
El lenguaje SQL tambin pone a disposicin 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 estn 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, aadir, modificar o eliminar datos sobre la
presentacin del resultado de una consulta, crear formularios e informes sobre vistas,
etctera.
Sin embargo, existe una limitacin: determinadas operaciones no se permiten sobre
determinadas consultas empleadas como vistas.
La instruccin 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 <expresin
tabla>. Tpicamente, <expresin tabla> es una instruccin 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 <expresin tabla>
sean resultado de un clculo (por ejemplo, COUNT (<campo>) y por ello no tengan un
nombre explcito. 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.
Tambin se pueden crear vistas haciendo una consulta sobre varias tablas, introduciendo
diferentes condiciones o haciendo que el resultado se ordene segn una columna
concreta de la vista.
CREACIN DE TRIGGERS (DISPARADORES)
Los triggers (disparadores) son procedimientos que se ejecutan cuando se produce un
suceso de BD determinado en una tabla especfica. 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 instruccin. Se activan una vez por cada instruccin 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
(despus). Entre los sucesos de disparo se encuentran las operaciones INSERT, DELETE
o UPDATE.
Los disparadores de instruccin son tiles si el cdigo del disparador no depende de los
datos afectados. Por ejemplo, se puede crear un disparador de instruccin BEFORE
INSERT en una tabla, para pedir que se efecte una operacin de insercin en dicha
tabla, excepto en determinados perodos de tiempo. Los disparadores de fila son tiles si
la accin del disparador depende de los datos afectados por la transaccin, 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

<INSERT|DELETE|UPDATE>

ON

trigger>
<nombre

<BEFORE|AFTER>

relacin>

FOR

EACH

<ROW|STATEMENT> EXECUTE PROCEDURE <nombre procedimiento>


(<argumentos de la funcin>);

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 funcin debe ser llamada antes (BEFORE) o


despus (AFTER) del evento.

El siguiente elemento del comando determina en que evento o eventos ser llamada
la funcin. Es posible especificar mltiples eventos utilizando el operador OR.

El nombre de la relacin determinar la tabla afectada por el evento.

La instruccin FOR EACH determina si el trigger se ejecutar para cada fila afectada,
o bien, antes o despus de que la secuencia se halla completado.

El nombre del procedimiento es la funcin llamada.

Los argumentos son pasados a la funcin en la estructura CurrentTriggerData. El


propsito de pasar los argumentos a la funcin es permitir a triggers diferentes con
requisitos similares llamar a la misma funcin.
El disparador presentado se activa despus de haber insertado una fila en la tabla
Alumnos. Puesto que se ejecutar despus de que la fila haya sido insertada, los datos de
la misma ya habrn sido validados. A continuacin, 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.
CREACIN 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 lgica de las aplicaciones que se emplean con ms
frecuencia. Cuando se ejecuta el procedimiento, sus instrucciones se ejecutan como una
unidad. Los procedimientos no devuelven ningn valor al programa que los llama. Los
procedimientos permiten que la aplicacin que los invoca pueda proveer parmetros de
entrada. Los procedimientos permiten tambin, combinar la flexibilidad y facilidad del SQL
con la funcionalidad procedural de un lenguaje de programacin estructurado.
Por ejemplo, el siguiente cdigo 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 nmero de cuenta y un monto de
dinero acreditado a la cuenta especfica.
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 evaluacin Nro 02


Planteamiento de problema
La compaa xxx necesita automatizar sus procesos para el eficiente manejo de
la informacin dentro del ramo de las autopartes.
Los procesos a efectuarse dentro de la empresa son:
1. Captura de los datos de los clientes
2. Facturacin
3. Cobranza
4. Corte de caja
Entre otros que se necesitaran debido a los procesos anteriores.
Los datos necesarios para la facturacin de los clientes seran:

Nombre completo

Direccin

Fecha en que se est llevando acabo la compra

Telfono

RUC

La factura necesitar contener los datos anteriores y adems los siguientes:

Numero de factura

Detalle de la compra:
o

Clave del articulo

Descripcin

Cantidad

Monto

Desgloce de igv

Monto total

Para obtener automticamente en la forma de la factura deber contener un


catalogo de artculos 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 haba comprado en esta empresa debern obtenerse los datos del catlogo 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

Você também pode gostar