Sei sulla pagina 1di 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 Matricula Nombre AP AM Edad Parcial1 Parcial2 Practicas

Descripcin Matrcula del alumno Nombre del alumno Apellido paterno Apellido materno Edad Calificacin obtenida en el primer parcial Calificacin obtenida en el segundo parcial 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 (space) ABC ! * \

Significado Despliega un espacio 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 0 9 # L ? A a & C .,:;-/

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 (000)000-0000 (000)AAA-AAAA LLLL000000AAA

Ejemplo (206) 555-0248 (206) 555-TELE 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 AP AM Edad

Cadena (40) Cadena (25) Cadena (25) Numrico byte Numrico simple Numrico simple Numrico simple

Nombre completo Apellido Paterno Apellido Materno Edad Calificacin primer parcial Calificacin segundo parcial Calificacin obtenida en las prcticas

requerido requerido requerido >018 AND <=65 1 decimal; predeterminado 0; >=0 AND <=10 1 decimal; predeterminado 0; >=0 AND <=10 1 decimal; predeterminado 0; >=0 AND <=2

Parcial1

Parcial2

Practicas

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 1 1 Nombre Anglica Anglica Empresa ABC ABC Direccion Km. 106 Tij-Eda Km. 106 Tij-Eda Email abc@abc.com ange@abc.com

Base de Datos

33

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

2 2

Vctor Vctor

XYZ XYZ

Punta Banda 32 Punta Banda 32

xyz@uni.home.com 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 1 2 Nombre Anglica Victor empresa ABC XYZ direccion_empresa Km. 106 Tij-Eda Punta Banda 32

Base de Datos

34

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Emails EID 1 2 3 4 relID 1 1 2 2 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 ID 1 2 Nombre Angelica Victor relEmpresaID 1 2

Base de Datos

35

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Empresas empID 1 2 Empresa ABC XYZ Direccion_empresa Km. 106 Tij-Eda Punta Banda 32

Emails EID 1 2 3 4 relID 1 1 2 2 Email abc@abc.com ange@abc.com xyz@uni.home.com 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 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 CREATE DROP ALTER Descripcin Utilizado para crear nuevas tablas, campos e ndices Empleado para eliminar tablas e ndices Utilizado para modificar las tablas agregando campos o cambiando la definicin de los campos

Base de Datos

38

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

COMANDOS DML Comando SELECT 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

INSERT

UPDATE

DELETE

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

Clusula FROM

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

WHERE

GROUP BY

HAVING

ORDER BY

Base de Datos

39

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Operadores Lgicos Operador AND 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

OR

NOT

Operadores de Comparacin

Operador < > <> <= >= = BETWEEN LIKE IN

Descripcin Menor que Mayor que Distinto de Menor Igual que Mayor Igual que Igual que Utilizado para especificar un intervalo de valores Utilizado en la comparacin de un modelo 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 AVG

Descripcin Utilizada para calcular el promedio de los valores de un campo determinado Utilizada para devolver el nmero de registros de la seleccin Utilizada para devolver la suma de todos los valores de un campo determinado Utilizada para devolver el valor ms alto de un campo especificado Utilizada para devolver el valor ms bajo de un campo especificado

COUNT

SUM

MAX

MIN

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 Seleccionar los alumnos mayores de 25 aos

SQL SELECT * FROM Alumnos WHERE Edad>=25;

Seleccionar los apellidos y nombre de los que han aprobado los dos SELECT AP, AM, Nombre FROM Alumnos WHERE (Parcial2>=6); Generar un listado con los nombres y apellidos de los alumnos y sus SELECT Nombre, AP, AM, Parcial1, Parcial2, Practicas FROM Alumnos; calificaciones (Parcial1>=6) AND parciales

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 Seleccionar los alumnos mayores de 25 aos, suponiendo que la tabla alumnos est en otra BD que se llama C:\colegio\registro.mdb

SQL SELECT * FROM Alumnos IN 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 Obtener los apellidos junto a la nota media, suponiendo que la media de los parciales es el 80% y el resto se obtiene con las prcticas

SQL SELECT AP, AM, ((Parcial1 + Parcial2) / 2) * 0.8 + Practicas AS Media FROM Alumnos;

Base de Datos

43

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Obtener los nombres completos de los alumnos junto a su matrcula

SELECT Nombre & " " & AP & " " & 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 * = 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:

LIKE

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 un listado de alumnos

SQL SELECT * FROM Alumnos ORDER BY AP, AM, Nombre;

ordenado por apellidos

Base de Datos

45

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Obtener los alumnos con el primer parcial aprobado, comenzando por las mejores notas

SELECT * FROM Alumnos WHERE Parcial1 >=6 ORDER BY Parcial1 DESC;

Obtener los apellidos y las notas de los parciales de los alumnos que han sacado mejor nota en el primer parcial que en el segundo, ordenados segn la diferencia entre ambas notas (las mayores diferencias primero). En caso de empate ordenar por apellidos de forma ascendente.

SELECT AP, AM, Parcial1, Parcial2 FROM Alumnos WHERE Parcial1> Parcial2 ORDER BY (Parcial1-Parcial2) DESC, AP, AM;

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

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

AVG (<campo>)

MAX (<campo>)

Base de Datos

46

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

MIN (<campo>)

Valor mnimo del conjunto de valores contenido en el 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 para el primer parcial

SELECT AVG (Parcial1) AS MediaP1 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 Obtener el nmero de alumnos que han aprobado el primer parcial

SELECT MedMax,

MAX

(Parcial1

Parcial2)/2

AS

MIN (Parcial1 + Parcial2)/2 AS MEdMin FROM Alumnos; SELECT MAX (Parcial1) AS MaxP1 FROM Alumnos WHERE Practicas <> 0; SELECT COUNT (*) AS Numero FROM Alumnos 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 Obtener el nmero de alumnos que hay con el mismo nombre (sin apellido) para cada nombre diferente (cuntos Juanes, Pedros, ...hay?) Obtener el nmero de personas que han obtenido 0, 1, 2,..10 en el primer parcial (despreciando la parte decimal de las calificaciones). Ordenar el resultado por el nmero de alumnos de forma descendente

SQL SELECT Cuantos FROM Alumnos GROUP BY Nombre; SELECT INT (Parcial1) AS Nota, Nombre, COUNT (*) AS

COUNT (*) AS Cuantos FROM Alumnos GROUP BY INT (Parcial1) ORDER BY COUNT (*) DESC;

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 ID E M T R Ciudad Ensenada Mexicali Tijuana Rosarito

Existencias Almacn E E T M R R R Tipo 1 2 4 1 1 2 3 Cantidad 100 30 200 50 10 200 100

Piezas Tipo 1 2 3 4 Nombre Circuitera TRC Altavoz Carcasa

Base de Datos

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

Existencias.Tipo

Existencias. Cantidad

E E E E E E E M M M M M M M T T T T T T T R R R R

Ensenada Ensenada Ensenada Ensenada Ensenada Ensenada Ensenada Mexicali Mexicali Mexicali Mexicali Mexicali Mexicali Mexicali Tijuana Tijuana Tijuana Tijuana Tijuana Tijuana Tijuana Rosarito Rosarito Rosarito Rosarito

E E T M R R R E E T M R R R E E T M R R R E E T M

1 2 4 1 1 2 3 1 2 4 1 1 2 3 1 2 4 1 1 2 3 1 2 4 1

100 30 200 50 10 200 100 100 30 200 50 10 200 100 100 30 200 50 10 200 100 100 30 200 50

Base de Datos

52

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

R R R

Rosarito Rosarito Rosarito

R R R

1 2 3

10 200 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 Almacn ID Piezas Tipo

Base de Datos

53

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Ciudad

Tipo Cantidad

Nombre

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 FROM

Almacenes.Ciudad,

Existencias.Tipo,

Existencias.Cantidad Existencias

Almacenes,

WHERE Almacenes.ID = Existencias.Almacn;

Esta consulta proporcionara la siguiente tabla:

Almacenes.Ciudad Ensenada

Existencias.Tipo 1

Existencias.Cantidad 100

Base de Datos

54

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

Ensenada Mexicali Tijuana Rosarito Rosarito Rosarito Tijuana

2 1 4 1 2 3 4

30 50 200 10 200 100 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 Ensenada Ensenada Tijuana Mexicali Rosarito Rosarito Rosarito

Piezas.Nombre Circuitera TRC Carcasa Circuitera Circuitera TRC Altavoz

Existencias.Cantidad 100 30 200 50 10 200 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. 2. Una tabla a la que aadir datos. 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 Supngase una tabla Personas en la que se almacena informacin sobre el nombre, apellidos y cargo (en campos nombre, apellidos, cargo) de todas las personas de la Universidad. Aadir a esta tabla todos los alumnos de la tabla Alumnos Supngase una tabla Historia en la que se almacena informacin sobre el nmero de alumnos matriculados cada 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, AM, Matricula) VALUES (Francisco, Perez, Solis, 3/18965); INSERT INTO Historia (ao, numero) SELECT Year (Date()) AS esteao, COUNT (*) AS Total FROM Alumnos; SQL INSERT INTO Personas (nombre,

apellidos, cargo) SELECT Nombre, AP & & AM AS ApellidosA, Alumno AS CargoA FROM Alumnos;

Sols, con matrcula 3/18965 a la lista de alumnos

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 Aprobar el primer parcial que tenga una calificacin entre 4.5 y 5.9

SQL UPDATE Alumnos SET Parcial1=6 WHERE (Parcial2>=6); (Parcial1<=5) AND

Poner un 1 en las prcticas a todos los alumnos que tengan 0 de calificacin en prcticas y tenga los dos parciales aprobados con una calificacin media entre ambos mayor que 7 Redondear las calificaciones de los alumnos quitando los decimales

UPDATE Alumnos SET Practicas=1 WHERE (Parcial2>=6) AND ((Parcial1+Parcial2)/2 >7) AND (Practicas =0); UPDATE Alumnos SET Parcial1= INT (Parcial1), Parcial2= INT (Parcial2), Practicas = INT (Practicas); (Parcial1>=6) AND

Poner un 0 en prcticas al alumno con matrcula 3/01621 Olvidar la matrcula de los alumnos que se han presentado al segundo parcial

UPDATE Alumnos SET Practicas = 0 WHERE Matricula=3/01621; UPDATE Alumnos 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 ALL TOP

Descripcin Devuelve todos los campos de la tabla 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 los alumnos que hayan

SQL DELETE FROM Alumnos WHERE

aprobado todo

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

Eliminar a los alumnos cuyo apellido se desconozca total o parcialmente Eliminar a todos los alumnos

DELETE FROM Alumnos WHERE (AP IS NULL) OR (AM IS NULL); 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 los alumnos cuya

SQL SELECT * FROM Alumnos WHERE Parcial1>= (SELECT AVG(Parcial1) FROM Alumnos); SELECT * FROM Alumnos WHERE Edad>= ( SELECT Edad FROM Alumnos WHERE Practicas = ( SELECT Max (Practicas) AS MaxPract FROM Alumnos));

calificacin en el primer parcial sea mayor o igual que la media de todos los alumnos en ese parcial Seleccionar a los alumnos mayores que el alumno con mejor calificacin en prcticas (suponiendo que slo hay uno con la mxima calificacin)

Seleccionar los alumnos cuyo nombre tambin lo tengan profesores

SELECT * FROM Alumnos 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

calificacin del primer parcial mayor que la mxima calificacin del segundo parcial de entre los alumnos que en las prcticas no han aprobado

Alumnos WHERE Parcial1> ( SELECT MAX (Parcial2) FROM Alumnos WHERE Practicas <1);

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

FOREIGN KEY

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 CONSTRAINT

Se utiliza para agregar un ndice de multicampos o de un nico campo

Base de Datos

70

Ing Juan Daniel Cortez Soto

UNIVERSIDAD JOSE CARLOS MARITEGUI

DROP COLUMN

Se utiliza para borrar un campo. Se especifica nicamente el nombre del campo Se utiliza para eliminar un ndice. Se especifica nicamente el nombre del ndice a continuacin de la palabra reservada CONSTRAINT

DROP CONSTRAINT

Ejemplos:

Consulta Agregar un campo Salario de tipo

SQL ALTER TABLE Empleados ADD COLUMN Salario CURRENCY; ALTER TABLE Empleados DROP COLUMN Salario; ALTER TABLE Empleados ADD COLUMN ID INTEGER CONSTRAINT IndicePrimario PRIMARY KEY; ALTER TABLE Empleados DROP

Moneda a la tabla Empleados Elimina el campo Salario de la tabla Empleados Agrega una columna ID de tipo entero a la tabla Empleados y los marca como el ndice primario de la tabla. Elimina el ndice IndicePrimario de la tabla Empleados Agrega un ndice primario de nombre IndicePrimario sobre el campo ID de la tabla Empleados. 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 En este de la tabla no es

CONSTRAINT IndicePrimario; ALTER KEY (ID); TABLE Empleados ADD

CONSTRAINT

IndicePrimario

PRIMARY

ALTER TABLE Pedidos ADD CONSTRAINT RelacionPedidos FOREIGN KEY (ID_Empleado) REFERENCES Empleados (ID);

Empleados.

ejmplo

necesario indicar el campo junto al nombre de la tabla en la clusula 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 Agrega un ndice multicampo de nombre IndiceGeneral formado por los campos Nombre,Apellidos y Fecha_Nacimiento de la tabla Empleados. Elimina el ndice multicampo de nombre IndiceGeneral en la tabla Empleados

CONSTRAINT RelacionPedidos; ALTER TABLE Empleados ADD UNIQUE Nombre,Apellidos,Fecha_Nacimiento); ALTER TABLE Empleados DROP CONSTRAINT IndiceGeneral

CONSTRAINT IndiceGeneral;

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 ON trigger> <nombre <BEFORE|AFTER> FOR EACH

<INSERT|DELETE|UPDATE> (<argumentos de la funcin>);

relacin>

<ROW|STATEMENT> EXECUTE PROCEDURE <nombre procedimiento>

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 o o o o 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

Potrebbero piacerti anche