Está en la página 1de 248

Base de Datos I

Cdigo de Curso: TWB22B


Versin 5.0

Gua del Estudiante

Libro 1: Base de Datos I

IBM IT Education Services


Worldwide Certified Material
Informacin Sobre la Publicacin

Esta publicacin ha sido producida usando Microsoft Word 2000 y Microsoft PowerPoint
2000 para Windows.

Marcas Registradas

IBM es una marca registrada por International Business Machines Corporation.

Otras compaas, productos, y nombre de servicios pueden ser marcas registradas o


marcas de servicios de otros.

Trademarks of International Business Machines Corporation

DB2

Marcas Registradas de otras Compaas

Windows Microsoft Corporation

Edicin Octubre 2007

La informacin contenida en este documento no ha sido sometida a ninguna prueba


formal de IBM y es distribuida bsicamente como es" sin ninguna garanta ya sea
expresa o implcita. El uso de esta informacin o la implementacin de cualquiera de
estas tcnicas es responsabilidad del comprador y depender de la habilidad de ste
para su evaluacin e integracin en el ambiente operacional del comprador. A pesar de
que cada tema ha sido revisado por IBM para su exactitud en una situacin especfica,
no hay garanta de que obtener el mismo resultado o uno similar a ste en otra
situacin. Los compradores que intenten adaptar estas tcnicas a sus propios
ambientes lo hacen bajo su propio riesgo.

Copyright International Business Machines Corporation, 2007. All rights reserved.


Este documento no puede ser reproducido en su totalidad o en parte sin el previo
permiso escrito de IBM.

Instrucciones Especiales para la Impresin de este Curso:

No elimine pginas en blanco que puedan aparecer al final de cada unidad entre
unidades. Estas pginas fueron insertadas intencionalmente.

.
Gua del Estudiante Base de Datos I

Contenido
Descripcin del Curso........................................................................................5
Descripcin de Unidades ...................................................................................7
Volumen 1: Fundamentos de RDBMS .............................................................11
Unidad 1: Introduccin al RDBMS...................................................................13
Objetivos de Aprendizaje 13
1. Historia de la Base de Datos 14
2. Qu es una Base de Datos? 15
3. Qu es un DBMS? 16
4. DBMS y la Independencia de Datos 16
5. Modelos de Datos 17
6. RDBMS 21
7. Ventajas de DBMS 23
Resumen 24
Unidad 1: Examen de Autoevaluacin 25
Respuestas a la Unidad 1: Examen de Autoevaluacin 27
Unidad 2: Diagrama Entidad Relacin ............................................................29
Objetivos de Aprendizaje 29
1. Diseo de Base de Datos 30
2. Pasos para el Diseo de Base de Datos 30
3. Proceso de Diseo de Base de Datos 31
4. El Modelo Conceptual 32
5. Notaciones 34
6. Atributos 39
7. Claves 40
8. Otras Notaciones ER 42
9. Grado de una Relacin 43
10. Construir un Modelo ER 44
11. Transformacin del Diseo Conceptual a Diseo Lgico 45
Resumen 49
Unidad 2: Examen de Autoevaluacin 50
Respuestas a la Unidad 2: Examen de Autoevaluacin 52
Unidad 3: Normalizacin de la Base de Datos ...............................................53
Objetivos de Aprendizaje 53
i
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

1. Normalizacin 54
2. Necesidad de Normalizar 56
3. Formas Normales 56
Resumen 64
Unidad 3: Examen de Autoevaluacin 65
Respuestas a la Unidad 3: Examen de Autoevaluacin 67
Unidad 4: Lab. de Diseo de Base de Datos ..................................................69
Objetivos de Aprendizaje 69
Ejercicio de Laboratorio 70
Unidad 5: Lab. de Modelado de Base de Datos.............................................71
Objetivos de Aprendizaje 71
1. Introduccin a Azzurri Clay 72
2. Inicio de Sesin en Azzurri Clay 72
3. Creacin de Tablas 81
4. Creacin de ndices en las Tablas 86
5. Creacin de Claves nicas 88
6. Creacin de Claves Forneas 91
7. Ingeniera en Reversa de la Base de Datos 94
8. Generacin de Scripts SQL 99
Resumen 102
Volumen 2: Lenguaje de Consulta Estructurado .........................................103
Unidad 1 Lenguaje de Consulta Estructurado - Fundamentos...............105
Objetivos de Aprendizaje 105
1. Introduccin 106
2. Tabla de Datos 109
3. DDL 110
4. DCL 111
5. DML 112
6. Agregar Datos 112
7. Eliminar Datos 113
8. Actualizar Datos 113
9. DQL La Sentencia SELECT 113
10. Seleccin Condicional 114
11. Funciones Agregadas 116

ii
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

12. Condiciones Compuestas y Operadores Lgicos 117


13. Alias de los Nombres de Columnas 121
14. La Clusula ORDER BY 122
15. Manejo de Valores NULOS (Null) 122
16. La Clusula DISTINCT 123
Resumen 124
Unidad 1: Examen de Autoevaluacin 125
Respuestas a la Unidad 1: Examen de Autoevaluacin 127
Unidad 2: Lab. de Fundamentos de SQL ......................................................129
Objetivos de Aprendizaje 129
Ejercicios de Laboratorio 130
Unidad 3: SQL Avanzado ...............................................................................137
Objetivos de Aprendizaje 137
1. Introduccin 138
2. Clave Primaria 138
3. Clave Fornea 138
4. Relacin Padre-Hijo 139
5. La Condicin para el JOIN 139
6. Extender una Consulta Simple a un JOIN 146
7. La Clusula GROUP BY 147
8. La Clusula HAVING 149
9. Escribir Subconsultas 150
10. Operacin de Unin 152
Resumen 153
Unidad 3: Examen de Autoevaluacin 154
Respuestas a la Unidad 3: Examen de Autoevaluacin 156
Unidad 4: Laboratorio de SQL Avanzado .....................................................157
Objetivos de Aprendizaje 157
Ejercicios de Laboratorio 158
Volumen 3: Fundamentos de MySQL............................................................163
Unidad 1: Fundamentos de MySQL...............................................................165
Objetivos de Aprendizaje 165
1. Introduccin 166

iii
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

2. Licencia GPL 166


3. Historia de MySQL 167
4. Hitos Importantes en la Evaluacin de MySQL 167
5. Caractersticas principales de MySQL 169
6. Porque seleccionar a MySQL 170
7. Deficiencias del MySQL 172
8. Motor de Almacenamiento de MySQL 172
9. Arquitectura de Hilos de MySQL 176
10. Seguridad en MySQL 177
11. Sistema de Privilegios de Acceso en MySQL 178
12. Clientes MySQL 179
Resumen 194
Unidad 1: Examen de Autoevaluacin 195
Respuestas a Unidad 1: Examen de Autoevaluacin 197
Unidad 2: Ejecucin de Sentencias SQL con MySQL..................................199
Objetivos de Aprendizaje 199
1. Introduccin al SQL 200
2. Ejecucin de Sentencias SQL con el Programa mysql 200
3. Tipos de Datos en MySQL 203
4. Sentencias DDL 207
5. Sentencias DML 213
6. Sentencias DQL 215
7. Consultas Multitablas 223
8. Sub-consultas 227
9. Usuarios y Privilegios 227
10. Respaldo y Restauracin de Base de Datos con el Cliente MySQL 231
11. Ejecucin de Sentencias SQL con el MySQL Query Browser 232
Resumen 237
Unidad 2: Examen de Autoevaluacin 238
Respuestas a Unidad 2: Examen de Autoevaluacin 240
Unidad 3: Lab. de Ejecucin de Sentencias SQL sobre MySQL.................241
Objetivos de Aprendizaje 241
Ejercicios de Laboratorio 242

iv
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Descripcin del Curso


Nombre del Curso
Base de Datos I.
Duracin
La duracin del curso es de 48 horas.
Propsito
El propsito de este curso es introducir al estudiante a los conceptos de los Sistemas
Administradores de Bases de Datos Relacionales (RDMS) y al Lenguaje de Consulta
Estructurado (SQL). El curso proporciona una visin general del diseo de bases de
datos y sus ventajas. El curso discute los modelos conceptuales de bases de datos y las
relaciones recursivas y exclusivas pertenecientes al diseo de base de datos. Este
curso tambin proporcionara una explicacin de los conceptos de normalizacin y forma
normal en las bases de datos relacionales.

La segunda parte trata SQL en detalle. Ofrece una visin general de las tablas de datos,
funciones agregadas y la relacin padre-hijo en SQL. Los estudiantes tambin
obtendrn una introduccin a SQL Avanzado.

La tercera parte del curso explica los fundamentos de MySQL. En esta unidad se
presenta a los estudiantes las capacidades, historia, caractersticas, motores de
almacenamiento y arquitectura de hilos de MySQL. Se muestra cmo es implementada
la seguridad en MySQL y las interfaces proporcionadas a los programadores, se
describe la licencia GPL. Complementando con una sesin de ejercicios para ejecutar
diferentes sentencias SQL.

La cuarta parte se refiere a los fundamentos de PostgreSQL. Esta unidad lista las
capacidades, historia, caractersticas, niveles de jerarqua, arquitectura, funcionamiento
y catlogos del sistema de PostgreSQL. Tambin se muestra cmo es implementada la
seguridad en PostgreSQL, sistema de privilegios, describir copyleft y licencia BSD. Se
establecen las similitudes y diferencias entre PostgreSQL y MySQL, complementando
con una sesin de ejercicios para ejecutar diferentes sentencias SQL.

La quinta parte especifica los fundamentos de DB2. Los estudiantes sern capaces de
entender cmo se crean y administran los objetos de la bases de datos. El curso
tambin explica conceptos tales como: diccionario de base de datos, acceso y
seguridad de base de datos. Adicionalmente, proporciona varios ejercicios de
laboratorio para mejorar las habilidades prcticas de los estudiantes en la
administracin de base de datos.

Libro 1: Base de Datos I Descripcin del Curso 5

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Audiencia
Estudiantes, Profesionales y gente de Negocios.
Prerequisitos
TWB15S.
Objetivos
Despus de completar este curso, Ud. ser capaz de:
Discutir los conceptos de RDBMS.
Entender el proceso de diseo de base de datos y el modelo conceptual.
Definir normalizacin y entender la necesidad de la normalizacin.
Discutir SQL y las tablas de datos.
Familiarizarse con SQL avanzado y sus conceptos, tales como, claves primarias
y forneas.
Entender los fundamentos de DB2 y sus capacidades.
Aprender a crear y administrar objetos de bases de datos.
Discutir los tipos de datos y las definiciones de columnas.
Aprender acerca del acceso a la base de datos y conceptos de seguridad.
Agenda
Cada unidad en este curso es de dos horas de duracin.

Descripcin del Curso Libro 1: Base de Datos I 6

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Descripcin de Unidades
Volumen 1: Fundamentos de RDBMS
Unidad 1: Introduccin al RDBMS

Esta unidad proporciona los fundamentos de RDBMS. Comienza con una discusin
simple acerca de bases de datos, sistemas administradores de bases de datos y el
modelo de datos. Por otra parte, son discutidos los conceptos fundamentales de
RDBMS, administracin de transacciones y la necesidad de propiedades ACID.

Unidad 2: Diagrama Entidad Relacin (ER)

El diseo conceptual de bases de datos, en aplicaciones de bases de datos, se hace a


travs de diagramas ER. Esta unidad discute conceptos de diseo de bases de datos,
los pasos del diseo de base de datos, entidades y sus relaciones. Esta unidad
introduce los diagramas ER y sus notaciones. Tambin se discuten las guas para el
diseo conceptual.

Unidad 3: Normalizacin de la Base de Datos

Esta unidad proporciona una base cuidadosa para el entendimiento de la normalizacin


en bases de datos. La unidad discute la normalizacin, la necesidad e importancia de la
normalizacin en bases de datos, el proceso de normalizacin y las diferentes clases de
formas normales.

Unidad 4: Laboratorio de Diseo de Base de Datos

Esta unidad permite revisar y aplicar los fundamentos conceptuales proporcionados en


las Unidades 1, 2 y 3, a fin de identificar las diferentes entidades en un sistema y las
relaciones entre estas entidades, dada la definicin del problema. Esta unidad permite
construir un diagrama ER para traducir el entendimiento conceptual en un diseo de
tablas, adems de realizar una operacin de normalizacin. El propsito principal, es
proporcionar un mejor entendimiento de la base de datos, al hacer un diseo completo
de tablas en forma de un diagrama.

Unidad 5: Laboratorio de Modelado de Base de Datos

En esta unidad se usa la herramienta Azzurri Clay para modelar base de datos. En ella,
se construye el Modelado de Base de Datos, haciendo uso de claves primarias,
forneas, ndices para representar las tablas que se usarn en el sistema a desarrollar,
segn un determinado dialecto SQL del manejador de Base de Datos a utilizar.
Adems, permite generar los scripts de las tablas modelada y aplicar ingeniera en
reversa de tablas existentes en otras bases de datos.

Libro 1: Base de Datos I Descripcin de Unidades 7

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Volumen 2: Lenguaje de Consulta Estructurado


Unidad 1 Lenguaje de Consulta Estructurado - Fundamentos

SQL es la espina dorsal de cualquier RDBMS moderno, en el desarrollo de aplicaciones


y el uso de una base de datos. Esta unidad trata con los fundamentos del lenguaje de
consulta estructurado, DDL, DML y DCL. De igual forma, est diseada para aprender a
escribir sentencias select simples y condicionales, adems de usar las funciones
agregadas. Los operados lgicos y el orden de precedencia tambin son discutidos.

Unidad 2: Laboratorio de Fundamentos sobre SQL

Esta unidad est diseada para identificar la herramienta de interfaz de usuario


apropiada para escribir consultas y obtener datos de la base de datos. Proporciona la
oportunidad de practicar la escritura de sentencias SELECT SQL simples para capturar
datos de la base de datos.

Unidad 3: SQL Avanzado

Esta unidad va ms all de los fundamentos de SQL, adicionalmente, se estudian


ciertas caractersticas avanzadas de SQL. Los temas cubiertos incluyen diferentes
operaciones JOIN, el uso de la clusula GROUP BY y la clusula HAVING, adems de
cmo escribir sub-consultas.

Unidad 4: Laboratorio de SQL Avanzado

Esta unidad bosqueja el trasfondo conceptual establecido en las Unidades 1 y 3 (as


como la familiaridad con SQL a travs de Unidad 3), permite hacer operaciones
aritmticas en las columnas de la clusula SELECT, usar funciones agregadas en
sentencias SQL, capturar registros de ms de una tabla y escribir subconsultas dentro
de consultas. Tambin permite practicar el uso de algunas operaciones crticas para
insertar, actualizar y eliminar registros en una tabla.
Volumen 3: Fundamentos de MySQL
Unidad 1: Fundamentos de MySQL

Esta unidad se basa en listar las capacidades, historia, caractersticas, motores de


almacenamiento y arquitectura de hilos de MySQL. Tambin se muestra cmo es
implementada la seguridad en MySQL y las interfaces proporcionadas a los
programadores. Por otra parte se describe la licencia GPL.

Unidad 2: Ejecucin de Sentencias SQL con MySQL

La unidad 2 proporciona informacin referente a cmo hacer las sentencias SQL con el
programa mysql, los tipos de datos usados en MySQL, manejo de usuarios y privilegios,
adems de respaldo y restauracin de base de datos con el cliente mysql.

Descripcin de Unidades Libro 1: Base de Datos I 8

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 3: Laboratorio de Ejecucin de Sentencias SQL sobre MySQL


El laboratorio consta de dos partes, en la primera se podr practicar la creacin de tabla
a travs del cliente mysql o el cliente MySQL Query Browser. La creacin de las tablas
se puede hacer por medio de un archivo txt o transcribiendo todas las instrucciones, al
igual que la carga de los registro, la cual puede hacerse tambin por un archivo txt o
realizando los insert uno por uno. La segunda parte consta de ejercicios a ser
ejecutados.

Volumen 4: Fundamentos de PostgreSQL


Unidad 1: Fundamentos de PostgreSQL

El contenido de esta unidad se basa en listar las capacidades, historia, caractersticas,


niveles de jerarqua, arquitectura, funcionamiento y catlogos del sistema de
PostgreSQL. Tambin, se muestra como es implementada la seguridad en PostgreSQL,
sistema de privilegios, describir copyleft y licencia BSD. Entre otros tpicos, se
establecen las similitudes y diferencias entre PostgreSQL y MySQL.

Unidad 2: Ejecucin de Sentencias SQL con PostgreSQL

En esta unidad se indica cmo hacer las sentencias SQL con el programa PostgreSQL,
conocer los tipos de datos usados en PostgreSQL, manejo de usuarios y privilegios,
respaldo y restauracin de base de datos con el cliente PostgreSQL.

Unidad 3: Laboratorio de Ejecucin de Sentencias SQL sobre PostgreSQL


El laboratorio consta de dos partes, en la primera se podr practicar la creacin de tabla
a travs del cliente mysql o el cliente MySQL Query Browser. La creacin de las tablas
se puede hacer por medio de un archivo txt o transcribiendo todas las instrucciones. La
carga de los registros puede hacerse por un archivo txt o haciendo los insert uno por
uno. La segunda parte consta de ejercicios a ser ejecutados.

Volumen 5: Fundamentos de DB2, Administracin, Seguridad y


Programacin en Base de Datos
Unidad 1: Fundamentos de DB2

Esta unidad expone las capacidades y las diferentes facetas de DB2. Proporciona una
visin general de la arquitectura de DB2 UDB. Se estudian las capacidades de DB2 y
los productos que lo acompaan (servidores y cliente DB2). El uso de herramientas DB2
para ayudar al administrador de base de datos e interfaces para programadores DB2.

Libro 1: Base de Datos I Descripcin de Unidades 9

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Unidad 2: Laboratorio de Herramientas de DB2 UDB

Esta unidad proporciona una presentacin prctica de la interfaz de usuario DB2. Ayuda
a trabajar con el centro de control, navegar a travs de objetos de base de datos y
ejecutar las herramientas desde el centro de control.

Unidad 3: Crear y Administrar Objetos de la Base de Datos

Aqu se cubre uno de los principales tpicos de creacin y administracin de objetos de


bases de datos. Adicionalmente, se explica cmo crear una tabla, crear una tabla con
restricciones y las cinco restricciones importantes en este contexto. La unidad
proporciona informacin sobre los tipos de datos, aadir y modificar columnas en una
tabla, eliminar y truncar las tablas, crear y eliminar las vistas, adems de tocar tpicos
acerca de sinnimos y fotos.

Unidad 4: Laboratorio de Objetos de la Base de datos

En esta unidad se desarrolla un laboratorio en el que se crea una tabla, una tabla con
restricciones y se aprende a aadir y modificar columnas en una tabla en forma
prctica. Se hace nfasis en tpicos como: eliminar y truncar una tabla, adems de
crear y eliminar una vista.

Unidad 5: Diccionario de Datos, Acceso y Seguridad de la Base de Datos

El uso y consulta de las vistas del catlogo del sistema son discutidos en esta unidad.
La unidad tambin ayuda a identificar autoridades bsicas de bases de datos y
privilegios. Se discute la administracin y control del acceso a bases de datos.

Unidad 6: Laboratorio de Diccionario de Datos

Esta unidad ayuda a identificar las vistas apropiadas del diccionario de datos, para los
diferentes objetos. Tambin permite ejecutar diferentes consultas contra vistas del
diccionario de datos.

Unidad 7: Programacin de Estructura, UDT y UDF

Aqu se establece el fundamento para entender los tipos de datos y funciones definidas
por el usuario. Se ensea a implementar los tipos de datos.

Unidad 8: Laboratorio de Programacin de Estructura, UDT y UDF

En esta unidad, se obtiene el entrenamiento prctico para declarar y escribir tipos de


datos definidos por el usuario.

Descripcin de Unidades Libro 1: Base de Datos I 10

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Volumen 1: Fundamentos de RDBMS

Libro 1: Base de Datos I Volumen 1: Fundamentos de RDBMS 11

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 1: Introduccin al RDBMS


Objetivos de Aprendizaje
Al final de esta unidad usted ser capaz de:
Definir qu es una base de datos.
Describir el DBMS.
Enumerar los diversos modelos de datos.
Describir el RDBMS.
Describir los fundamentos de la Administracin de Transacciones.
Explicar la necesidad de las caractersticas ACID de una transaccin.

Libro 1: Base de Datos I Unidad 1: Introduccin al RDBMS 13

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

1. Historia de la Base de Datos


En los inicios de la programacin, se manejaban grandes cantidades de datos,
especialmente en las aplicaciones comerciales y de negocios. Estos datos se
organizaban como archivos de datos en dispositivos de almacenamiento secundarios,
tales como discos y cintas.

Los archivos de datos se pueden ver como una coleccin de registros, y cada registro
tiene un conjunto de campos. Cada campo de los registros es de algn tipo de dato que
se define en el lenguaje de programacin que se est utilizando, por ejemplo C o
COBOL. Estos archivos de datos tambin se llaman archivos planos, pues pueden ser
representados en dos dimensiones.

Las relaciones en los archivos de datos deben ser manejadas por los programadores.
Dependiendo de la aplicacin, los archivos de datos se pueden organizar como archivos
secuenciales o archivos de acceso aleatorio.

Los archivos de datos se organizan dependiendo del dispositivo fsico que se utilice. Por
ejemplo, el mismo archivo de dato cuando est almacenado en una cinta magntica se
accede de diferente manera, que cuando se almacena en un disco. El mtodo para
acceder a registros de un archivo de datos almacenado en un disco difiere,
dependiendo de s la longitud de registro es fija o variable.

Por lo tanto, la definicin del archivo de datos y los mtodos para acceder a ellos
dependen de la naturaleza del dispositivo en el que se crean y utilizan. Esto presenta un
problema mayor cuando los programas se escriben para manipular datos en las
aplicaciones.

Qu sucede si una organizacin pretende migrar sus actuales dispositivos de


almacenamiento a la ltima tecnologa? Con toda probabilidad, todos los programas (es
decir, la lgica de las aplicaciones) debern ser modificados, con cambios en la
estructura de los archivos de datos y en su uso.

El almacenamiento en un archivo plano tiene las siguientes desventajas:


Concurrencia:
La concurrencia es un problema en los archivos planos, pues los datos pueden ser
accedidos y modificados solamente por una persona a la vez. La solucin a este
problema es tener una cola de las aplicaciones que intentan acceder al archivo o
tener ms de una copia del mismo archivo, que permitan a las diferentes
aplicaciones tener acceso a ellas. Sin embargo, la segunda solucin se aplica
solamente en el caso de acceso de slo lectura.
Integridad:
En un sistema de archivo plano, si ms de una aplicacin utiliza la misma
informacin, los datos pueden corromperse (perder informacin). La posibilidad de
corrupcin de datos es mayor cuando grandes cantidades de datos son
almacenadas en un sistema de archivo plano.

Unidad 1: Introduccin al RDBMS Libro 1: Base de Datos I 14

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Relacin entre Datos:


Es muy difcil establecer relaciones entre los datos en un archivo plano, pues no hay
una estructura predefinida para el mismo. Los datos solamente pueden ser
estructurados utilizando delimitadores entre ellos, lo que hace que relacionar los
datos sea una tarea difcil para los desarrolladores de aplicaciones.
Reutilizacin:
El archivo plano diseado para un sistema particular no se puede reutilizar en otro
sistema. El fuerte acoplamiento entre los datos y la aplicacin hace virtualmente
imposible integrar los mismos datos en otro sistema.
Seguridad:
Los datos son menos seguros cuando estn almacenados en un sistema de archivo
plano, dado que los archivos pueden ser accedidos por cualquier usuario o cualquier
otra aplicacin. La implementacin de un mecanismo de bloqueo de archivo es algo
difcil. Adems, la naturaleza de los datos que son ASCII puros, cuando estn
almacenados como archivo de texto, los hace vulnerables desde el punto de vista de
seguridad.
Los Sistemas de Administracin de Base de Datos Relacional (Relational Database
Management Systems - RDBMS) se ocupan de muchas de estas desventajas. Se
explicarn primero algunos trminos bsicos de base de datos, y luego se discutir
acerca del RDBMS en la siguiente seccin.

2. Qu es una Base de Datos?


Una base de datos es una coleccin organizada de datos relacionados. Hay tres
palabras claves en esta definicin. Estas son:
Organizado: La palabra organizado hace referencia a la manera en que los
datos deben ser almacenados. Solamente, si se organizan los datos, el usuario
podr localizarlos y recuperarlos eficientemente.
Coleccin: La coleccin hace referencia a un grupo de datos, y no tan slo a
uno en particular. Son generalmente datos que pertenecen a diversos tipos de
datos. Algunos de los elementos de datos pueden ser nmeros enteros, otros
nmeros reales, incluso otros pueden ser tipos de datos estructurados, tal como
los tipos de datos de fecha.
Inter-relacionado: La interrelacin entre los datos permite que una coleccin de
datos proporcione informacin razonable y coherente. La informacin y los datos
significan dos cosas distintas. Cuando los datos tienen sentido para un negocio
se convierten en informacin. Es decir, los datos procesados se denominan
informacin. Por ejemplo, un negocio puede tener datos de ventas. Cuando
estos datos se convierten en ventas regionales considerados por trimestre, se
transforman en informacin.
Una base de datos se utiliza para almacenar y recuperar datos. Fsicamente, los datos
se almacenan como archivos de datos en una computadora. Una coleccin de datos
computarizados, que constituyen una base de datos, son almacenados como un archivo
de datos en una computadora.

Libro 1: Base de Datos I Unidad 1: Introduccin al RDBMS 15

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Entonces de qu manera una base de datos es diferente a los archivos de datos


planos? La base de datos, en s misma, quizs agrega muy poco valor a los archivos
planos. Sin embargo, como Sistema de Administracin de Base de Datos - DBMS,
proporciona al creador de la base de datos y al usuario de aplicaciones ventajas de gran
alcance.

3. Qu es un DBMS?
Se requiere un sistema para manejar la base de datos. El manejo de una base de datos
implica no slo recuperar datos de la base de datos, sino tambin agregar, modificar y
eliminar informacin de la base de datos. Un conjunto de programas que ayudan a
realizar estas operaciones se denomina Sistema de Administracin de Base de Datos -
DBMS.

De la descripcin anterior, se puede definir el DBMS como un sistema que trabaja sobre
las bases de datos y ayuda a los usuarios a administrar la base de datos de acuerdo a
sus necesidades.

Los siguientes son algunos puntos importantes acerca del DBMS:

Un DBMS se puede entender simplemente como algo que provee al programador y al


usuario las funcionalidades para crear una base de datos, agregar elementos a la base
de datos, modificar su contenido, eliminar registros y ordenar los registros de la manera
deseada.

El DBMS proporciona al usuario comandos que le permiten realizar estas tareas, no


teniendo que realizar programacin de bajo nivel.

La independencia de datos est garantizada en el caso de DBMS.

A continuacin se discute la independencia de datos.

4. DBMS y la Independencia de Datos


El punto principal que distingue un archivo de datos de un DBMS, es la propiedad de
independencia de datos que proporciona el DBMS. Existen dos niveles de
independencia de datos:

Independencia de datos fsica: La propiedad de la independencia de datos fsica


implica la inmunidad de los programas de aplicacin (que utilizan la base de datos) a los
cambios en la organizacin fsica de la base de datos. Esto significa que una vez que
los programas se escriben para crear y utilizar la base de datos, ellos permanecen igual
an cuando la organizacin fsica de la base de datos haya cambiado. Esto es una
enorme ventaja para los desarrolladores e igualmente para los usuarios.

Independencia de datos lgica: La propiedad de independencia de datos lgica es la


capacidad de cambiar el esquema lgico de la base de datos, sin causar que las
aplicaciones se reescriban.

Unidad 1: Introduccin al RDBMS Libro 1: Base de Datos I 16

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Los siguientes son los diversos tipos de usuarios que utilizan los DBMS:

Programadores de Aplicaciones: Trabajan con el DBMS a travs de programas de


aplicaciones escritos por ellos en lenguajes de alto nivel.
Usuarios Sofisticados: Interactan con el DBMS a travs de las sentencias SQL.
Ellos no escriben programas de aplicacin.
Usuarios Especializados: Son los usuarios sofisticados que escriben aplicaciones
especializadas de base de datos que no vienen con las aplicaciones tradicionales de
procesamiento de datos.
Usuarios Ingenuos: Son los usuarios no sofisticados que interactan con el DBMS,
utilizando programas de aplicaciones escritos previamente.
Administradores de Base de Datos: Son los usuarios que manejan y administran
las actividades de la base de datos. Interactan con el DBMS a travs de las
diversas utilidades administrativas proporcionadas por el mismo DBMS.

5. Modelos de Datos
Un modelo de datos es la estructura subyacente de una base de datos.

En esta unidad, se estudian los modelos lgicos basados en registros.

5.1 Modelos Lgicos Basados en Registros

Los modelos lgicos basados en registros son llamados as porque la base de datos es
estructurada en torno a registros de formato fijo, con varios campos o atributos. Los
campos o atributos pueden ser de diferentes tipos de datos y cada campo es
usualmente de una longitud fija.

Los tres modelos de mayor aceptacin basados en registros son los siguientes:
Relacional.
De Red.
Jerrquico.
Se introduce el modelo jerrquico y de red, seguidamente se estudia en detalle el
modelo relacional.

5.2 El Modelo Relacional

En este modelo, se representan una o ms tablas que contienen los datos y las
relaciones entre los diferentes datos.

Las siguientes son las caractersticas de una tabla:


Una tabla es una coleccin de registros en una base de datos.
Una tabla tiene mltiples columnas.

Libro 1: Base de Datos I Unidad 1: Introduccin al RDBMS 17

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Cada columna tiene un nombre nico y contiene conjuntos de datos.


Cada conjunto de datos se denomina fila.
Un valor se obtiene por la interseccin de una fila y de una columna.
Sean las Tablas 1.1 y 1.2 acerca del Registro de Estudiantes y de Cdigos de
Disciplina presentadas a continuacin:

Nombre-
ID-Estudiante Hospedaje Cdigo-Disciplina
Estudiante
93PS274 James Ram Bhawan A1
97PS087 Alice Meera Bhawan A2
97PS086 Anitha Meera Bhawan A1
97PS085 Jose Meera Bhawan A2

Tabla 1.1: Tabla de RegistrosdeEstudiante

Cdigo-Disciplina Disciplina
A1 Ingeniera Qumica
A2 Ingeniera Civil

Tabla 1.2: Tabla de CodigosdeDisciplinas

La tabla RegistrosdeEstudiante contiene diversos detalles de un estudiante. Cada


columna en la tabla representa una propiedad / atributo del estudiante. Las Tablas 1.1 y
1.2 son tablas ejemplo de una base de datos relacional.

La segunda tabla contiene los nombres de las disciplinas para los diferentes cdigos de
disciplina. A partir de estas tablas, se sabe que el estudiante James tiene la
identificacin de estudiante 93PS274, vive en Ram Bhawan y pertenece a la disciplina
de Ingeniera Qumica.

El modelo relacional, que consiste de una coleccin de tablas que contienen los datos,
forma la base de lo que se conoce como Sistemas de Administracin de Base de Datos
Relacionales (Relational Database Management Systems - RDBMS). El modelo
relacional tambin tiene la ventaja del soporte de un modelo matemtico formal, que se
basa en el lgebra relacional y el clculo relacional.

El modelo relacional soporta formas eficientes de recuperacin y administracin de


datos. Las operaciones relacionales como: seleccionar (select), proyectar (view), unir
(join) y las operaciones de conjuntos como la unin y la interseccin, son la base sobre
la cual se construye el modelo relacional. Otra ventaja del modelo relacional es su
capacidad de hacer cumplir las restricciones de integridad de datos.

Unidad 1: Introduccin al RDBMS Libro 1: Base de Datos I 18

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

5.3 El Modelo de Red

En este modelo, los datos se representan mediante una coleccin de registros y las
relaciones entre los datos se representan por enlaces, que se pueden ver como
punteros. Los registros en la base de datos, se organizan en una coleccin de grafos
arbitrarios. La Figura 1.1 presenta el modelo de red.

Figura 1.1: Modelo de Red

Los conjuntos de registros en la Figura 1.1, utilizan la misma informacin presentada en


el modelo relacional para mostrar una base de datos de red de ejemplo.

Una base de datos de red es una coleccin de registros conectados a otros registros a
travs de enlaces. Este, fue uno de los primeros enfoques de bases de datos. Los
sistemas comerciales de administracin de base de datos que usaban el modelo de red
fueron populares en los aos 70 e incluso a inicios de los 80.

5.4 El Modelo Jerrquico

El modelo jerrquico es similar al modelo de red. Las siguientes son las caractersticas
de este modelo:
Los datos se representan por una coleccin de registros y las relaciones entre
los datos se representan por enlaces.
La nica diferencia entre este modelo y el modelo de red, es que en el modelo
jerrquico los archivos estn organizados como una coleccin de rboles, en vez
de una coleccin de grafos arbitrarios.
La Figura 1.2 es una representacin esquemtica del modelo jerrquico.

Libro 1: Base de Datos I Unidad 1: Introduccin al RDBMS 19

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 1.2: Modelo Jerrquico

Los conjuntos de registros en la Figura 1.2 muestran un ejemplo de una base de datos
jerrquica, utilizando la misma informacin dada en los modelos relacionales y de red.

El modelo jerrquico es importante, principalmente debido al IMS (Information


Management System) de IBM. El IMS es uno de los sistemas de base de datos de IBM
ms antiguo y ampliamente difundido.

5.5 Modelo Relacional vs. Otros Modelos

El modelo relacional es el modelo ms usado en los sistemas de procesamiento de


datos comerciales. Los otros modelos, es decir jerrquico y de red, estn
estrechamente ligados con la implantacin subyacente de la base de datos. Dado que el
modelo relacional proporciona la ventaja adicional de independencia de datos, es ms
popular.

El modelo relacional establece relaciones entre los registros segn los valores que
contienen, mientras que, en los modelos de red y los modelos jerrquicos, la relacin
entre los registros se mantiene a travs de punteros o enlaces. Por lo tanto, las
operaciones de datos en un modelo relacional son relativamente simples, comparadas
con las operaciones de datos en los modelos jerrquicos y de red.

Unidad 1: Introduccin al RDBMS Libro 1: Base de Datos I 20

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

6. RDBMS
Ahora se sabe qu es un DBMS. Un RDBMS es un DBMS basado en el modelo
relacional. Las siguientes son las funciones de un RDBMS:
Organizar los datos y las relaciones entre los datos en tablas que se componen
de columnas y filas.
Permitir la definicin de las estructuras de datos, de las operaciones de
almacenamiento y recuperacin, adems de las restricciones de integridad.
Utilizar las restricciones de integridad para mantener la integridad de los datos
almacenados en las bases de datos relacionales.
En las bases de datos relacionales, ciertos campos se pueden designar como claves, lo
que significa que las bsquedas por valores especficos de esos campos pueden utilizar
la indexacin (ordenar los registros de la tabla mediante las claves o ndices creados)
para acelerar la bsqueda. Los registros en diferentes tablas pueden ser enlazados si
tienen el mismo valor en un campo particular en cada tabla.

6.1 Proveedores de RDBMS


El mercado RDBMS est lleno de numerosos proveedores de RDBMS. Algunos de los
proveedores ms conocidos se listan en la Tabla 1.3 que se presenta a continuacin:
Proveedor Producto ltima Versin
IBM DB2 UDB 9.1
Oracle Corporation Oracle 10
MySQL AB MySQL 5.0.37
PostgreSQL PostgreSQL 8.2.4
Microsoft Microsoft SQLServer 2005
Tabla 1.3: Proveedores RDBMS

Algunos de estos productos estn disponibles tanto en ambiente Windows como en


ambiente UNIX. Los productos DB2, Oracle, PostgreSQL, SQLServer mencionados
arriba ya no son slo considerados como RDBMS; tambin son clasificados como
Sistemas de Administracin de Base de Datos Relacional de Objetos (ORDBMS).

A continuacin se presenta el concepto de administracin de transacciones.

6.2 Administracin de Transacciones

La administracin de transacciones es un concepto muy importante en cualquier


RDBMS.

Qu es una transaccin?

Es una coleccin de operaciones que realiza una nica unidad lgica de trabajo. Una
transaccin es una unidad de trabajo en la cual una serie de operaciones ocurren entre
las sentencias BEGIN TRANSACTION (COMIENZO DE TRANSACCIN) y END

Libro 1: Base de Datos I Unidad 1: Introduccin al RDBMS 21

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

TRANSACTION (FIN DE TRANSACCIN) de una aplicacin. Una transaccin es


atmica; es decir, se hace todo el trabajo o no se hace nada.

Partiendo del ejemplo de una transaccin de transferencia de fondos. Es una sola


unidad lgica de trabajo, en donde se carga de una cuenta A y se acredita a otra cuenta
B. Esta transaccin implica dos operaciones simples: un dbito y un crdito. La unidad
lgica de trabajo (la transferencia de fondos) no est completa si no se realizan ambas
operaciones. La transferencia de fondos debe suceder en su totalidad o no efecta
nada. Se tiene pues que, ambas operaciones ocurren o ni una ni la otra ocurre. Este
requerimiento de todo o nada se llama atomicidad.

La administracin de transacciones implica algunas caractersticas importantes


llamadas caractersticas ACID (Atomicity, Consistency, Isolation and Durability), ste es
un mnemotcnico para: Atomicidad, Consistencia, Aislamiento y Durabilidad. Estas
caractersticas se explican brevemente en la siguiente seccin:

Atomicidad: Las operaciones asociadas a una transaccin comparten


generalmente un objetivo comn y son interdependientes. Si se ejecuta solamente
un subconjunto de estas operaciones, el sistema podra comprometer el objetivo
global de la transaccin. La atomicidad elimina la posibilidad de procesar un
subconjunto de operaciones.

Consistencia: Una transaccin es una unidad de integridad porque preserva la


consistencia de datos, transformando un estado consistente de datos en otro estado
consistente.

La consistencia requiere que los datos comprometidos en una transaccin se


preserven semnticamente. Algunas de las responsabilidades de mantener
consistencia caen sobre el desarrollador de aplicaciones, que debe asegurarse de
que todas las restricciones de integridad se cumplan en la aplicacin.

Por ejemplo, al desarrollar una aplicacin que transfiere dinero de una cuenta a otra,
hay una operacin de dbito que ocurre en la cuenta fuente, y una operacin de
crdito que ocurre en la cuenta destino. La transaccin tiene los siguientes dos
pasos:
Paso 1: Debitar de la cuenta fuente.
Paso 2: Acreditar a la cuenta destino.
Si la transaccin falla despus del paso 1, una inconsistencia de datos ocurre
debido a que la cantidad es debitada de la cuenta fuente, pero no se acredita a la
cuenta destino. Para asegurarse de que se mantiene la consistencia de datos, el
DBMS cancela la operacin de dbito, y se ejecuta una restitucin (rollback) de la
transaccin para obtener el estado consistente inicial.

Aislamiento: Una transaccin es tambin una unidad aislada. La administracin de


transacciones permite que las transacciones concurrentes se comporten como si
cada una fuera la nica transaccin ejecutndose en el sistema. El aislamiento

Unidad 1: Introduccin al RDBMS Libro 1: Base de Datos I 22

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

requiere que cada transaccin parezca ser la nica transaccin que manipula la
base de datos, aunque otras transacciones pueden estar ejecutndose
concurrentemente.

Una transaccin nunca puede ver las etapas intermedias de otra transaccin.
Durabilidad: Una transaccin es tambin una unidad de recuperacin. Si una
transaccin tiene xito, el sistema garantiza que persistirn sus actualizaciones,
incluso si la computadora falla inmediatamente despus de una ejecucin
exitosa. En el ejemplo anterior, si falla la computadora inmediatamente despus
de una transferencia exitosa de fondos, los nuevos valores de las cuentas A y B
deben persistir. Este requisito de la persistencia se llama durabilidad.

7. Ventajas de DBMS
Una vez introducidos los fundamentos del DBMS, se enumeran sus ventajas:
La redundancia de datos puede ser minimizada. Los datos en un lugar, pueden ser
accedidos por muchas aplicaciones.
La integridad, la seguridad y la consistencia de los datos pueden ser aseguradas.
La integridad de datos es administrada por las restricciones de integridad. El
acceso de usuarios y la administracin de privilegios de usuarios proporciona la
seguridad de los datos. La administracin de transacciones proporciona la
consistencia de los datos.
El proceso de recuperacin de datos puede hacerse ms rpido mediante varios
mecanismos que mejoran el rendimiento.
Se tienen operaciones para la manipulacin de datos.
Los datos pueden ser distribuidos.
Los datos son fcilmente adaptables a los cambios de los modelos del negocio.

Libro 1: Base de Datos I Unidad 1: Introduccin al RDBMS 23

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de:

Definir qu es una base de datos.


Describir el DBMS.
Enumerar los diversos modelos de datos.
Describir el RDBMS.
Describir los fundamentos de la Administracin de Transacciones - Transaction
Management.
Explicar la necesidad de las caractersticas ACID de una transaccin.

Unidad 1: Introduccin al RDBMS Libro 1: Base de Datos I 24

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 1: Examen de Autoevaluacin


1) Una base de datos es una coleccin organizada de datos inter-relacionados.
a) Verdadero
b) Falso

2) Cules de los siguientes son los modelos basados en registros de mayor


aceptacin?
a) Jerrquico
b) De Red
c) Relacional
d) Ninguna de las anteriores

3) En el modelo jerrquico, la relacin entre los registros es a travs de enlaces.


a) Verdadero
b) Falso

4) Enumere las caractersticas ACID.

5) El modelo jerrquico es una coleccin de rboles.


a) Verdadero
b) Falso

6) El modelo de red es un modelo basado en _________.


a) Objetos
b) Registros
c) Campos
d) Ninguna de las anteriores

7) Un(a) ___________________ es una nica unidad lgica de trabajo.


a) Registro
b) Base de datos
c) Transaccin
d) Campo

Libro 1: Base de Datos I Unidad 1: Introduccin al RDBMS 25

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

8) _______________ es una forma de modelo de datos.


a) Un modelo lgico basado en objetos.
b) Un modelo lgico basados en registros.
c) Un modelo fsico.
d) Todas las anteriores.

9) En el modelo basado en registros, la base de datos se estructura alrededor de los


registros de formato variable de diversos tipos.
a) Verdadero
b) Falso

10) Una tabla es una coleccin de registros en una base de datos.


a) Verdadero
b) Falso

Unidad 1: Introduccin al RDBMS Libro 1: Base de Datos I 26

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Respuestas a la Unidad 1: Examen de Autoevaluacin


1) a
2) a, b y c
3) a
4) Atomicidad, Consistencia, Aislamiento (Isolation) y Durabilidad.
5) a
6) b
7) c
8) d
9) b
10) a

Libro 1: Base de Datos I Unidad 1: Introduccin al RDBMS 27

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 2: Diagrama Entidad Relacin


Objetivos de Aprendizaje
Al finalizar esta unidad, usted ser capaz de:

Explicar los conceptos del diseo de base de datos.


Enumerar los pasos para el diseo de base de datos.
Discutir las entidades y sus relaciones.
Describir los diagramas Entidad Relacin (ER) y sus notaciones.
Indicar las pautas para construir un modelo ER.
Transformar Diseo Conceptual a Diseo Lgico.

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 29

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

1. Diseo de Base de Datos


Una base de datos relacional almacena todos sus datos dentro de tablas. Todas las
operaciones sobre los datos se realizan sobre las propias tablas, que pueden producir
tablas adicionales para almacenar el resultado. Cmo se decide el nmero de tablas?
Qu datos se almacenan en una tabla en particular? Para contestar a estas preguntas,
debe formular el diseo del contenido de las tablas que pueden almacenar los datos. A
este proceso se le llama diseo de base de datos. En esta unidad y la siguiente se
introduce el proceso de diseo de bases de datos.

2. Pasos para el Diseo de Base de Datos


Los siguientes son los cuatro pasos esenciales del proceso del diseo de base de
datos:
Recoleccin y anlisis de requerimientos.
Diseo conceptual.
Diseo lgico.
Diseo fsico.
A continuacin se explican brevemente cada uno de estos pasos:

2.1 Recoleccin y Anlisis de Requerimientos

Antes de desarrollar una base de datos para cualquier sistema, es necesario interactuar
estrechamente con el sistema en particular o con los usuarios del sistema. Esto ayuda a
desarrollar una comprensin completa de los datos que deben ser almacenados en la
base de datos, y los procesos involucrados en la captura de esos datos. Los
requerimientos de datos deben ser obtenidos y documentados a travs de una serie de
reuniones y entrevistas con los usuarios del sistema. Esta documentacin servir como
entrada para el anlisis necesario que se requiere para una comprensin conceptual
completa del sistema.

2.2 Diseo Conceptual

El siguiente paso consiste en formar una descripcin concisa de los requerimientos de


datos usando un modelo de datos de alto nivel. Esta descripcin ser independiente de
los requerimientos de almacenamiento. Este paso implica identificar las entidades
involucradas en el sistema, y entender las relaciones entre estas entidades.

Las entidades y las relaciones se representan en forma de un diagrama, llamado el


Diagrama Entidad Relacin (ER). El diagrama ER se discute en detalle, ms adelante
en esta unidad.

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 30

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

2.3 Diseo Lgico

En la implementacin, la mayora de los sistemas de base de datos tienen un modelo de


datos. Cualquier tcnica adecuada de diseo conceptual especificar la
correspondencia (mapping) del modelo conceptual a una variedad de modelos de
implementacin.

La traduccin de entidades y relaciones a tablas y otros objetos de la base de datos se


hace en este nivel. Este proceso implica la normalizacin, adems de otras
consideraciones de diseo, y se explica en detalle en la Unidad 3 de este volumen.

2.4 Diseo Fsico

Algunos sistemas de base de datos permiten que el administrador de la base de datos


tome decisiones sobre el almacenamiento fsico. Estas decisiones se toman
generalmente considerando el rendimiento y la disponibilidad de los recursos de
hardware.

3. Proceso de Diseo de Base de Datos

La Figura 2.1 es una representacin esquemtica de los cuatro pasos discutidos


anteriormente.

Nota: A excepcin del paso 4 (diseo fsico), el resto de los pasos son actividades
independientes del DBMS.

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 31

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 2.1: Proceso de Diseo de Base de Datos

4. El Modelo Conceptual
Pertenece al dominio de la modelacin del nivel ms alto. Una de las maneras de crear
un modelo conceptual es usando el diagrama ER.

A continuacin se discute acerca de las entidades y sus relaciones:

4.1 Entidades y Relaciones


El mundo real consiste de un conjunto de objetos llamados entidades. Estos objetos no
existen aislados, es decir existen relaciones entre ellos.
Un diagrama ER es una forma de modelar esta informacin. Este modelo permite tender
un puente sobre la brecha que existe entre la representacin del mundo real, y la
manera como debe ser modelada en un sistema de computadora.

Las entidades representan agrupaciones de objetos del mundo real que son relevantes
al sistema de informacin. Una entidad representa una coleccin de los objetos (cosas)
del mundo real, los cuales se desean modelar y emplear para almacenar informacin.
Aqu los miembros individuales (instancias) tienen ciertas caractersticas, por lo que
cada objeto debe satisfacer cada una de las siguientes afirmaciones:

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 32

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Puede ser identificado individualmente.


Desempea un papel necesario en el sistema a ser desarrollado.
Puede ser descrito por uno o ms elementos de datos.
Las propiedades o atributos de una entidad que son de inters para los usuarios
determinan los elementos de datos que deben ser almacenados en la base de datos.

Por ejemplo, considere un tipo de entidad carro, el cual puede tener los siguientes
atributos:
Nro-Reg (nmero de registro del carro).
Modelo.
Capacidad del motor.
Color.
Los datos reales se pueden describir como los valores de los atributos de las entidades,
por ejemplo, el valor del tipo de atributo Nro-Reg, del tipo de entidad carro puede ser
4BZR6971.

Un atributo nico de una entidad se le denomina clave. Tambin se conoce como


identificador de la entidad, por ejemplo, el identificador de carro ser el Nro-Reg,
mientras que el identificador de una entidad llamada Estudiante puede ser el Nro-
Estudiante. La clave debe identificar nicamente a un registro.

A veces, se pueden utilizar dos o ms atributos juntos para formar la clave. Tales claves
se conocen como compuesto o claves compuestas.

Las entidades no existen aisladas, sino que se asocian a travs de relaciones.

Las asociaciones en los datos, tales como un cliente ha pedido ciertas mercancas se
llaman relaciones. La relacin, en este caso, es ha pedido.

4.2 Modelacin de Datos

El propsito principal de la identificacin de entidades es generar un diagrama que


muestre la naturaleza de las relaciones significativas que existen entre las entidades. Es
decir, el diagrama ser una representacin del mundo real y se denomina diagrama
Entidad-Relacin (ER).

El diagrama ER se utiliza por las siguientes razones:


Un modelo ER es una representacin grfica del sistema, adems es un modelo
de datos conceptual de alto nivel.
Un modelo ER tambin soporta la percepcin de los datos por parte del usuario
y es independiente de la plataforma particular del DBMS y del hardware.
Modelar un diagrama ER es una buena ayuda para disear bases de datos.

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 33

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

4.3 Componentes de un Diagrama ER

Los diagramas ER tienen dos componentes importantes, son estos:


Entidades.
Relaciones.
Existen diferentes metodologas para el diseo de sistemas, siendo el modelo entidad-
relacin el modelo conceptual ms utilizado para el diseo conceptual de bases de
datos. Fue introducido por Peter Chen en 1976. El modelo entidad-relacin est
formado por un conjunto de conceptos que permiten describir la realidad mediante un
conjunto de representaciones grficas y lingsticas.

En todos los modelos, el sistema se divide en tres partes:


Sus entidades componentes.
Los atributos o propiedades de estas entidades.
Las relaciones entre estas entidades.

5. Notaciones
Se discute a continuacin en detalle el concepto de entidades:

5.1 Entidades

Un tipo de objeto es una entidad, representada por una caja rectangular, como se
muestra en la Figura 2.2-a.

Figura 2.2-a: Notacin de Entidad

Los grupos del mismo tipo de objetos se denominan tipos de entidad o conjunto de
entidad.

Hay dos tipos de entidades:


Entidad fuerte.
Entidad dbil.
Un tipo de entidad dbil es dependiente de algn otro tipo de entidad para su existencia,
por ejemplo, Empleado es una entidad y Dependiente es tambin una entidad. En
este caso, Dependiente se refiere a los hijos del empleado y a la esposa. En las dos
entidades mencionadas Empleado pertenece al tipo de entidad fuerte y Dependiente
pertenece al tipo de entidad dbil. La entidad Dependiente no tiene ninguna

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 34

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

importancia en el sistema, a menos que se asocie a un empleado, y por lo tanto, se


considera un tipo de entidad dbil. La Figura 2.2-b y la Figura 2.2-c son notaciones para
los tipos de entidades fuertes y dbiles.

Figura 2.2-b: Entidad Empleado (Fuerte)

Figura 2.2-c: Entidad Dependiente (Dbil)

Las entidades dbiles se representan mediante rectngulos de doble lnea y las


entidades fuertes se representan mediante un rectngulo de una lnea.

5.2 Relaciones

Las entidades son conectadas con otras entidades por relaciones. Una relacin
representa un conjunto de conexiones entre los objetos.

En la notacin de Chen, la forma de diamante representa una relacin, como se


muestra en la Figura 2.3.

Figura 2.3: Notacin de Chen para la Relacin

Un tipo de relacin es una asociacin significativa entre los tipos de entidad. La Figura
2.4 muestra una relacin entre las dos entidades, Estudiantes y Examen.

Figura 2.4: Relacin entre dos Entidades

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 35

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

5.3 Cardinalidad

La cardinalidad especifica si una entidad est relacionada con una o ms instancias de


otra entidad en una misma relacin. La relacin entre dos entidades se puede clasificar
en tres categoras las cuales se explican mediante los siguientes ejemplos:
Relacin Uno-a-Uno (1:1)
Por ejemplo, en algunas sociedades, un hombre puede casarse solamente con una
mujer y una mujer puede casarse solamente con un hombre. La Figura 2.5
representa una relacin 1:1 entre las dos entidades Hombre y Mujer. Observe el uso
de las notaciones especficas en el diagrama. La Figura 2.5 muestra dos lneas
dirigidas (flechas) que empiezan con la relacin casa a las entidades Hombre y
Mujer. Una lnea dirigida hacia una entidad especifica una sola relacin. En el
ejemplo dado, ambas entidades tienen una lnea dirigida hacia ellas, lo que significa
que ambas entidades comparten una sola relacin.

Figura 2.5: Relacin 1:1

Relacin Uno-a-Muchos (1:M) o Relacin Muchos-a-Uno (M:1)


Por ejemplo, una madre puede dar a luz a muchos nios, pero un nio puede tener
solamente una madre biolgica. Madre e hijo son las entidades en el ejemplo
presentado. Observe la Figura 2.6. Una lnea dirigida (flecha) a la entidad Madre y
una lnea no dirigida (no es flecha) a la entidad Hijo especifican la relacin uno-a-
muchos (1:M) entre las entidades Madre e Hijo.

Figura 2.6: Relacin 1:M

Relacin Muchos-a-Muchos (M:N)


Ms de una persona puede ser autor de un libro. Un autor puede escribir muchos
libros. Las entidades Libro y Autor comparten una relacin muchos-a-muchos. La
Figura 2.7 muestra lneas no dirigidas (sin flecha) hacia las entidades Libro y Autor,
que especifican la relacin muchos-a-muchos entre las dos entidades.

Figura 2.7: Relacin M:N

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 36

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

5.4 Opcionalidad

Una relacin puede ser opcional o mandatoria. La opcionalidad puede ser diferente a
cada lado de la relacin.

Considere un ejemplo de relacin entre estudiante y curso. Un estudiante no puede


existir sin un curso, pero un curso puede existir antes de que los estudiantes se hayan
matriculado. De esta manera, en la relacin estudiante-curso, hay una necesidad de
descubrir qu entidad tiene participacin mandatoria y qu entidad tiene participacin
opcional. La Figura 2.8 representa un diagrama de opcionalidad.

Figura 2.8: Diagrama de Opcionalidad

En la Figura 2.8, la entidad Curso es mandatoria para que la relacin de estudiante-


curso exista. La seal que representa mandatoria | se coloca en el lado de la entidad
Curso. La entidad Estudiante es opcional en la relacin, pues el curso puede existir sin
un estudiante. De tal manera que la seal de opcional, un crculo vaco, se coloca en el
lado de la entidad Estudiante de la relacin.

5.5 Diagrama ER

A continuacin se presenta un sistema ejemplo. Se van a identificar las entidades del


sistema y las relaciones entre las entidades. Luego, se dibuja el diagrama ER para el
sistema ejemplo.

5.6 Sistema de Orden de Compra


El departamento de finanzas de una compaa tiene un sistema de rdenes de
compra para mantener los detalles de cualquier orden de compra enviada a sus
proveedores.
Una orden individual se enva slo a un proveedor. Un proveedor puede obtener
muchas otras rdenes de compra.
Una orden de compra proporcionar los detalles sobre los artculos que se han
pedido.
Algunos artculos pueden ser suministrados por muchos proveedores, en cuyo
caso, el sistema debe realizar el seguimiento a los proveedores que suministran
los diversos artculos; por lo que s un proveedor no cuenta con dicha
mercanca, la orden puede ser enviada a una fuente alternativa.
Los siguientes son las entidades del sistema descrito:
Proveedor.
Orden de Compra.

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 37

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Artculo.
Las Figuras 2.9, 2.10 y 2.11 son representaciones esquemticas de las relaciones entre
las entidades.

Figura 2.9: Relacin (1:M) Proveedor:Orden de Compra

Figura 2.10: Relacin (M:N) Proveedor:Artculo

Figura 2.11: Relacin (M:N) Orden de Compra: Artculo


Un ejemplo de diagrama ER para el sistema anterior se muestra en la Figura 2.12.

Figura 2.12: Diagrama ER de un Sistema de Orden de Compra

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 38

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

6. Atributos
Todos los datos referentes a una entidad estn contenidos en sus atributos. Un atributo
es la propiedad de la entidad, cuyo valor tiene que ser almacenado en la base de datos.
Cada instancia de una entidad tendr el mismo conjunto de atributos, pero pueden
contener valores diferentes.

Los atributos pueden ser simples, como fecha de nacimiento o compuestos, como
nombre, conteniendo el primer y segundo nombre. Pueden ser de valor nico (cada
persona tiene solamente una fecha de nacimiento) o multivaluados, como las
calificaciones. La Figura 2.13 es la notacin usada para representar atributos.

Figura 2.13: Notacin de Atributos


La Figura 2.14 muestra cmo los atributos de una entidad se muestran en un diagrama
ER.

Figura 2.14: Notacin de Entidad y Atributos

Los tipos de entidad pueden tener una gran cantidad de atributos. Si todos los atributos
se muestran en un diagrama ER, el diagrama se vuelve confuso. Por lo tanto, muchos
atributos a menudo se dejan de lado por motivo de simplicidad.

Es recomendable mostrar los atributos solamente si agregan informacin importante al


diagrama ER o clarifican un punto.

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 39

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

7. Claves
Una clave es un elemento de los datos que identifica de manera nica las ocurrencias
individuales de un tipo de entidad, por ejemplo, el nmero de empleado o la
identificacin de un estudiante.

Una clave candidata es un candidato potencial a convertirse en una clave primaria y se


puede utilizar como identificador alternativo. Un tipo de entidad puede tener una o ms
posibles claves candidatas. El identificador seleccionado se conoce como clave
primaria.

Si los atributos se muestran en el diagrama ER, el nombre de cada atributo de la clave


primaria se muestra subrayado.

A continuacin se presenta otro ejemplo:

Los datos requeridos por HLX Products Ltd, para una base de datos que registre todos
los detalles de los empleados, departamentos y los proyectos de la compaa se
enumeran a continuacin:

La compaa est organizada en departamentos. Cada departamento tiene un


nombre y un nmero. Un departamento est situado solamente en una ubicacin.

Un departamento controla un nmero de proyectos, cada uno de los cuales tiene un


nombre y un nmero. Los detalles del empleado incluyen nmero de seguro social,
direccin, sueldo, sexo y fecha de nacimiento.

Un empleado pertenece a un departamento, pero puede trabajar en varios


proyectos. Un empleado puede trabajar en un proyecto controlado por un
departamento diferente al que l pertenece. Para propsitos del seguro, se requiere
tambin los detalles de los dependientes del empleado. Los detalles requeridos son
nombre, sexo, fecha de nacimiento y relacin de dependencia con el empleado.

La Figura 2.16 es el diagrama ER para este problema.

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 40

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 2.16: Diagrama ER

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 41

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

8. Otras Notaciones ER
La Tabla 2.1 muestra las notaciones que se usaron en esta unidad y tambin otras
notaciones que se usan comnmente para construir el diagrama ER.

Tabla 2.1: Diferentes Notaciones Usadas

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 42

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

9. Grado de una Relacin


Una relacin puede involucrar una o ms entidades. El nmero de entidades que
participan en una relacin se conoce como el grado de la relacin.

9.1 Relacin Unaria

Si el nmero de entidades que participan en una relacin es uno, entonces la relacin


se llama una relacin unaria. La relacin del empleado-jefe es un ejemplo de una
relacin unaria, porque Empleado y Jefe estn en el mismo tipo de entidad. El Jefe
supervisa al Empleado. Esta relacin se muestra en la Figura 2.17.

Figura 2.17: Relacin Unaria

La Figura 2.17 se debe leer como Jefe supervisa a Empleado. Jefe a Empleado es una
relacin uno-a-muchos. El jefe es un empleado, por lo tanto, la relacin est conectada
una vez ms con la entidad Empleado.

9.2 Relacin Binaria

Si hay solamente dos entidades involucradas en una relacin, es un tipo de relacin


binaria. Todos los ejemplos estudiados anteriormente son de relaciones binarias.

9.3 Relacin N-aria

En unos casos, dos o ms entidades estn involucradas en una relacin. Las relaciones
que involucran ms de dos entidades se denominan relaciones N-arias. Si todas las
entidades involucradas en una relacin no se muestran en el diagrama, cierta
informacin se puede perder o estar mal representada. Esto se llama una trampa de
conexin (connection trap).

No hay lmite en el nmero de entidades que participan en una relacin, cuando


participan tres entidades en una relacin se denomina relacin ternaria.

Sea un ejemplo de la compaa HLX Products, para el cual hay un nuevo requerimiento.
La compaa desea registrar el nmero total de horas de computadora que cada
empleado utiliza por computadora en cada proyecto. Vea la Figura 2.18.

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 43

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 2.18: Relacin Ternaria o Relacin N-aria

10. Construir un Modelo ER


Los siguientes son los pasos necesarios para construir el modelo ER:

Paso 1: Identificar las entidades.

Lea la especificacin de requerimientos cuidadosamente y enumere todos los tipos de


entidad potenciales. Estos son los objetos de inters en el sistema. Es mejor comenzar
con una gran cantidad de entidades y descartar las entidades redundantes ms
adelante, si es necesario.

Paso 2: Eliminar las entidades duplicadas.

Asegrese de que dos entidades sean realmente dos tipos de entidad separadas.
Recuerde nunca incluir al propio sistema como tipo de entidad. Por ejemplo, cuando
modela un sistema de una oficina, los tipos de entidades pueden ser los empleados, los
puestos de trabajo y otros. No debe haber un tipo de entidad oficina, porque la oficina
es el sistema.

Paso 3: Enumerar los atributos de cada entidad.

Verificar si los tipos de entidad son realmente necesarios o si son slo atributos de otro
tipo de entidad. Por ejemplo, Es nmero-telefnico una entidad o es slo un atributo
nmero-telefnico de una entidad llamada Empleado? Si son atributos de otra entidad,
entonces elimnelo de la lista de entidades.

Paso 4: Marcar las claves primarias.

Paso 5: Definir las relaciones.

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 44

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Paso 6: Examinar cada tipo de entidad para ver cmo se relaciona con otras entidades.

Paso 7: Describir la cardinalidad de las relaciones.

Paso 8: Eliminar las relaciones redundantes.

Modelar un diagrama ER es un proceso iterativo, as que implicar tener que dibujar


varias versiones y refinar cada una hasta que se evolucione un producto final. No hay
respuesta correcta a un problema, pero algunas soluciones son obviamente mejores
que otras.

11. Transformacin del Diseo Conceptual a Diseo


Lgico

11.1 Tabla

La tabla es un objeto de Base de Datos utilizado para almacenar datos. Las tablas estn
conformadas en columnas y filas.
Cada columna de la tabla representa un atributo o campo.
Las filas representan los registros de las tablas.

NombreCol1 NombreCol2 NombreCol3


Fila 1
Fila 2

Tabla 2.2: Definicin de Filas y Columnas

11.2 Clave Primaria

Una columna se define como clave primaria, si esa columna identifica unvocamente a
cada uno de los registros de la tabla, dicha columna no puede tener un valor NULL. La
restriccin Clave Primaria asegura que no existirn valores duplicados en esa columna.
Si el usuario trata de agregar un registro, cuyo valor en la columna de clave primaria es
idntico al de otro registro en la tabla, el registro no ser insertado.

11.3 Clave Fornea

Una columna cuyos valores dependen de los valores de otra tabla se llama clave
fornea. Sin embargo, una columna se llama clave fornea solamente si hace referencia
a la columna de clave primaria de otra tabla. Las claves forneas son la base para
relacionar tablas.

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 45

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

11.4 Transformacin del Diseo Conceptual a Diseo Lgico segn la


relacin que presentan

Relacin 1:1

Uno a Uno (1:1): Una instancia de la entidad Carro se relaciona con una nica
instancia de la entidad CertificadodeCirculacion y viceversa.

Ejemplo de Relacin 1:1

IdCertifica FechaEmision
Modelo Serial

Carro Certificadode
Color tiene
Circulacion

Placa Marca
Tipo Idpropietario
Ao

Figura 2.19: Diagrama Entidad Relacin, Carro...CertificadodeCirculacion

Clave
fornea

Tabla Carro
Serial Modelo Color Placa Ao Marca IdCertificado

Tabla CertificadodeCirculacion
Clave IdCertificado IdPropietario Tipo FechaEmisin
Primaria

Clave
Primaria

Figura 2.20: Representacin en Tablas del Modelo Entidad Relacin

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 46

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Relacin 1:M o M:1

Uno a muchos (1:M o M:1): Una instancia de la entidad Carro se relaciona con
muchas instancias de la entidad Puerta y una instancia de Puerta slo puede estar
relacionada con una instancia de Carro.

Ejemplo de Relacin 1:M

Modelo Serial IdPuerta

Carro
Color tiene Puerta

Placa Marca
Tipo Color
Ao

Figura 2.21: Diagrama Entidad Relacin, Carro...Puerta

Tabla Carro
Serial Modelo Color Placa Ao Marca

Clave
Clave Fornea
Primaria

Clave Tabla Puerta


Primaria IdPuerta Tipo Color Serial

Figura 2.22: Representacin en Tablas del Modelo Entidad Relacin

Relacin M:N

Muchos a Muchos (M:N): Una instancia de la entidad Autor est relacionada con
muchas instancias de la entidad Libro y viceversa.

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 47

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Ejemplo de Relacin M:N

Titulo Idlibro Idautor FechaNac


cant_pagina

Libro tiene Autor

Genero Editorial Direccion


Ao Nombre Apellido

Figura 2.23: Diagrama Entidad Relacin, Libro...Autor


Tabla Cliente
Idautor Nombre Apellido Direccion FechaNac

Clave
Primaria

Tabla Libro
Clave
Primaria Idlibro Titulo cant_paginas Genero Ao Editorial

Tabla Relacin

Clave Primaria Tabla Autor-Libro


Compuesta Idautor Idlibro

Figura 2.24: Representacin en Tablas del Modelo Entidad Relacin

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 48

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de:

Explicar los conceptos del diseo de base de datos.


Enumerar los pasos del diseo de base de datos.
Discutir las entidades y sus relaciones.
Describir los diagramas ER y sus notaciones.
Indicar las pautas para construir un modelo ER.
Transformar Diseo Conceptual a Diseo Lgico.

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 49

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Unidad 2: Examen de Autoevaluacin


1) El diagrama ER es parte del diseo fsico.
a) Verdadero
b) Falso

2) El diseo conceptual es una actividad especfica del DBMS.


a) Verdadero
b) Falso

3) Un ______________ representa las entidades en un diagrama ER.


a) Cuadrado
b) Rectngulo
c) Crculo
d) Flecha

4) Un ____________ representa una relacin en la notacin Chen.


a) Rectngulo
b) Cuadrado
c) Diamante
d) Crculo

5) Cules de las siguientes son grados de una relacin?


a) Unario
b) Binario
c) N-ario
d) Ninguna de las anteriores

6) Las ocurrencias individuales de un tipo de entidad se identifican de forma nica por


una clave.
a) Verdadero
b) Falso

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 50

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

7) Si hay dos tipos de entidad implicados, es un tipo de relacin ______.


a) Decimal
b) Binaria
c) Byte
d) Bit

8) Todos los datos relacionados a una entidad se guardan en sus _______.


a) Atributos
b) tipos de Entidad
c) Tipos de dato
d) Ninguna de las anteriores

9) La normalizacin es parte del diseo lgico.


a) Verdadero
b) Falso

10) La recoleccin y anlisis de requerimientos son el segundo paso en el diseo de


base de datos.
a) Verdadero
b) Falso

Libro 1: Base de Datos I Unidad 2: Diagrama Entidad Relacin 51

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Respuestas a la Unidad 2: Examen de Autoevaluacin


1) b
2) b
3) b
4) c
5) a, b y c
6) a
7) b
8) a
9) a
10) b

Unidad 2: Diagrama Entidad Relacin Libro 1: Base de Datos I 52

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 3: Normalizacin de la Base de


Datos
Objetivos de Aprendizaje
Al finalizar esta unidad, usted ser capaz de:

Explicar qu es la normalizacin.
Describir la importancia de la normalizacin en la base de datos.
Apreciar la necesidad de la normalizacin en la base de datos.
Discutir las diferentes formas normales.

Libro 1: Base de Datos I Unidad 3: Normalizacin de la Base de Datos 53

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

1. Normalizacin
En los modelos de bases de datos relacionales, la normalizacin es el proceso de
organizar los datos para reducir al mnimo la duplicacin. La normalizacin
generalmente implica el proceso de dividir una base de datos en dos o ms tablas y de
definir las relaciones entre ellas.

La normalizacin se refiere al proceso de crear una estructura de base de datos


relacional eficiente, confiable, flexible y apropiada para almacenar informacin. Este
proceso de organizar los datos en tablas y de definir relaciones entre ellas, se denomina
normalizacin. La estructura relacional en este contexto se refiere a la manera en que
las tablas se relacionan una a otra.

El objetivo de la normalizacin es aislar los datos, de forma tal que la adicin,


eliminacin o la modificacin del valor a un campo se pueda hacer sobre una sola tabla
y luego sta se propague al resto de la base de datos a travs de las relaciones
definidas.

Se va a entender la normalizacin con algunos ejemplos:

Asuma que se debe almacenar la informacin de los estudiantes y los cursos que ellos
han tomado. Se sabe, que los datos estn almacenados en forma de tablas en el
RDBMS. La informacin se puede organizar segn se muestra en la Tabla 3.1.

Tabla Estudiante
ID Nombre Ubicacin ID
Curso
Estudiante Estudiante Domicilio Curso
Joseph Sistema de Administracin de Base
S101 New York CS201
Daniel de Datos
Anlisis y Diseo Orientado a
S102 Jerry Jones San Jos CS202
Objetos
Joseph Anlisis y Diseo Orientado a
S101 New York CS202
Daniel Objetos
S103 Carl Baker Washington CS203 Ingeniera de Software
Tabla 3.1: Datos de la Tabla Estudiante

La Tabla 3.1 lista los estudiantes, la ubicacin de sus domicilios y los cursos en que se
han matriculado. Hay un requerimiento del negocio que solicita cambiar el nombre del
curso de Anlisis y Diseo Orientado a Objetos a Anlisis Orientado a Objetos.

Cmo puede ser incorporado este cambio?

El primer paso es identificar todas las ocurrencias de ese nombre de curso y despus
reemplazarlo por el nombre dado.

Considere otra situacin. Si un estudiante cambia la ubicacin de su domicilio, se debe


identificar todas las ocurrencias del estudiante y cambiar la ubicacin en todas partes.

Unidad 3: Normalizacin de la Base de Datos Libro 1: Base de Datos I 54

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

La duplicacin se hubiese podido evitar si se divide la tabla Estudiante en dos tablas


diferentes y despus se enlaza con una tabla relacin.

Observe las Tablas 3.2, 3.3 y 3.4.

Tabla Estudiante
IDEstudiante NombreEstudiante UbicacionCasa
S101 Joseph Daniel New York
S102 Jerry Jones San Jose
S103 Carl Baker Washington
Tabla 3.2: Datos de la Tabla Estudiante

Tabla Curso
IDCurso Curso
CS201 Sistema de Administracin de Base de Datos
CS202 Anlisis y Diseo Orientado a Objetos
CS203 Ingeniera de Software
Tabla 3.3: Datos de la Tabla Curso

Tabla EstudianteCurso
IDEstudiante IDCurso
S101 CS201
S101 CS202
S102 CS202
S103 CS203
Tabla 3.4: Datos de la Tabla EstudianteCurso

La tabla EstudianteCurso es una tabla / relacin que enlaza la tabla Estudiante a la


tabla Curso. Ahora, si se desea cambiar el nombre de un curso o la ubicacin del
domicilio de un estudiante, se deben cambiar los datos en un solo lugar. De esta
manera se evita la duplicacin.

Esto fue slo una introduccin a la normalizacin, las siguientes secciones profundizan
este tema.

1.1 Descomposicin sin Prdida de Informacin (Loss-Less Joins)

En el ejemplo anterior, se dividi la Tabla 3.1 en tres tablas. Los datos deben ser
analizados cuidadosamente antes de que se puedan dividir las tablas. La tabla debe
dividirse de tal manera que si las tablas (resultantes) se unieran de nuevo (joined), se
obtiene la tabla original. No debe haber prdida de datos despus de la normalizacin.
Esta unin se denomina Descomposicin sin Prdida Loss Less Join.

Libro 1: Base de Datos I Unidad 3: Normalizacin de la Base de Datos 55

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Ahora, se explicar porqu se debe normalizar.

2. Necesidad de Normalizar
Existen varias ventajas para normalizar y algunas de ellas se listan a continuacin:

2.1 Flexibilidad

La normalizacin permite a la estructura de datos ser muy flexible y soportar diversas


maneras de ver los datos. En el ejemplo anterior, la tabla EstudianteCurso permite que
se identifiquen a los estudiantes matriculados en un curso en particular o los cursos
matriculados por un estudiante.

2.2 Integridad de Datos

La integridad de datos es una caracterstica importante del RDBMS. La integridad de los


datos no debe ser alterada en ningn instante. Las operaciones de modificacin como la
eliminacin, insercin y la actualizacin no deben alterar la integridad de los datos, que
dara como resultado una anomala en la modificacin.

En el ejemplo anterior, se vio que para cambiar el nombre del curso, se cambiaron los
datos en dos lugares. Si se cambian los datos en un lugar y se dejan los datos en el otro
lugar sin cambiar, entonces la integridad de los datos se altera, lo que se denomina
anomala en la modificacin. La integridad de los datos es asegurada a travs de la
normalizacin.

2.3 Eficiencia

La normalizacin elimina los datos redundantes, para ahorrar espacio y para hacer el
proceso de recuperacin de datos ms eficiente.

3. Formas Normales
Las formas normales son una serie de pasos lgicos en el proceso de la normalizacin.

Los siguientes son los diversos tipos de formas normales:


Primera Forma Normal (1NF).
Segunda Forma Normal (2NF).
Tercera Forma Normal (3NF).
Cuarta Forma Normal (4NF).
3.1 1NF

La relacin entre las tablas se dice que est en 1NF si satisface las siguientes
condiciones:

Unidad 3: Normalizacin de la Base de Datos Libro 1: Base de Datos I 56

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Los campos de variables repetidas o grupos de variables repetidas deben ser


eliminados.
Todas las filas contienen el mismo nmero de campos.
Sea el ejemplo en la Tabla 3.5.
Id Fecha Orden Cliente Email Grado Puntos Nombre Cant Precio
Orden Cliente Credito Item Reque Unitario
1 11/30/1998 Joe Smith Joe@ewr.com A 1 Martillo 5 $25
1 11/30/1998 Joe Smith Joe@ewr.com A 1 Sierra 10 $30
1 11/30/1998 Joe Smith Joe@ewr.com A 1 Clavos 15 $40
2 12/3/1998 Sam Sam@ter.com B 4 Sierra 20 $30
2 12/3/1998 Sam Sam@ter.com B 4 Clavos 25 $40

Tabla 3.5: Tabla Orden con Grupos Repetidos

La Tabla 3.5 almacena los siguientes detalles:


Cada orden que se realiza, es identificada por un IdOrden.
La fecha de la orden (FechaOrden).
Los detalles del cliente que ha pedido los artculos (Cliente, EmailCliente).
A cada cliente, dependiendo de su historia de crdito, se le asigna
PuntosCredito. De acuerdo con PuntosCredito, se califica a un cliente. Por
ejemplo, los clientes con los PuntosCredito de 1, 2 y 3 estn en el Grado A.
Los clientes con PuntosCredito de 4, 5 y 6 estn en el Grado B. La tabla
almacena PuntosCredito y Grado del cliente.
Los artculos pedidos (NombreItem).
La cantidad pedida por cada artculo (CantReque).
El precio unitario del artculo (PrecioUnitario).
Segn la definicin de 1NF, los campos de variables repetidas y los grupos de variables
repetidas deben ser eliminados.

Qu es un grupo de variables repetidas?

En la Tabla 3.5 Orden, los detalles del cliente se repiten por cada artculo que fue
pedido. Por ejemplo, el cliente Joe Smith ha pedido martillo, clavo y sierra. Los detalles
de este cliente se han repetido en la tabla tres veces, ya que ha pedido tres artculos.
Esta clase de repeticin en grupos de valores se llama grupo de variables repetidas. La
tabla anterior no est en 1NF, pues viola la condicin de repeticin de grupo.

Observe las desventajas de una tabla no normalizada. En la tabla anterior, si se cambia


la direccin de correo electrnico (e-mail) del cliente Joe Smith, se debe cambiar en tres
lugares. As pues, si el cliente ha hecho tres rdenes y en cada orden ha pedido cinco

Libro 1: Base de Datos I Unidad 3: Normalizacin de la Base de Datos 57

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

artculos, entonces se debe cambiar su direccin de correo electrnico (e-mail) en 15


filas.

El precio unitario de los artculos tambin se repite para cada orden, si el artculo se
incluye en varias rdenes.

Se aplica la 1NF en la tabla anterior sobre rdenes. Cuando se aplica la normalizacin,


dar lugar a dos tablas, la Tabla 3.6 con clave primaria IdOrden y la Tabla 3.7 con clave
primaria IdOrden y NombreItem (Clave Compuesta).
IdOrden FechaOrden Cliente EmailCliente Grado Puntos
Credito
1 11/30/1998 Joe Smith joe@iewr.com A 1
2 12/3/1998 Sam sam@ter.com B 4

Tabla 3.6: Tabla Orden en 1NF


IdOrden NombreItem Cant Precio
Reque Unitario
1 Martillo 5 $25
1 Sierra 10 $30
1 Clavos 15 $40
2 Sierra 20 $30
2 Clavos 25 $40

Tabla 3.7: Tabla ArticuloOrden

La Tabla 3.6 y la Tabla 3.7 estn en 1NF pues no hay grupos repetitivos.

3.2 2NF

Un diseo relacional se dice que est en segunda forma normal (2NF) si, y slo si, est
en 1NF y cada columna que no est en la clave primaria es dependiente totalmente de
la clave primaria.

La 2NF slo se aplica a las Tablas que tienen claves primarias compuestas (por dos o
ms columnas). Si una Tabla est en 1NF y su clave primaria es simple (tiene una sola
columna), entonces tambin est en 2NF.

Para pasar una Tabla en 1NF a 2NF hay que eliminar las dependencias parciales de la
clave primaria. Para ello, se eliminan las columnas que no dependen completamente de
la clave compuesta y se colocan en una nueva tabla con una copia de su determinante
(las columnas de la clave primaria de las que dependen).

La Tabla 3.6 est en 2NF, ya que la tabla tiene clave primaria simple, en este caso la
tabla permanece igual, el siguiente paso es verificar la 3NF.

Unidad 3: Normalizacin de la Base de Datos Libro 1: Base de Datos I 58

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Considere la Tabla 3.7 que enumera los artculos pedidos en cada orden. La columna
clave en esta tabla es una clave compuesta por IdOrden y NombreItem. IdOrden y
NombreItem, en combinacin, identifican cada fila en la Tabla 3.7. Las otras columnas
(CantReque y PrecioUnitario) son columnas no-clave.

La columna cantidad requerida (CantReque) es totalmente dependiente de la clave


compuesta por IdOrder y NombreItem. Sin embargo, la columna del precio
(PrecioUnitario) no es totalmente dependiente de la clave compuesta, es dependiente
de la columna NombreItem, aunque se mantiene en la tabla DetalleOrden una columna
PrecioUnitarioVenta de Item, para asegurar tener el precio de venta del producto en ese
momento, en el caso de que en un futuro aumenten los precios del tem. Para hacer que
la Tabla 3.7 cumpla con 2NF, se divide en dos tablas, las tablas DetalleOrden e Item.
Vea las Tablas 3.8 y 3.9.

DetalleOrden
Precio
Cant
IdOrden IdItem Unitario
Reque
Venta
1 1 5 $25
1 2 10 $30
1 3 15 $40
2 2 20 $30
2 3 25 $40

Tabla 3.8: Tabla DetalleOrden en 2NF

Item
IdItem Nombre Precio
Item Unitario
1 Martillo $25
2 Sierra $30
3 Clavos $40

Tabla 3.9: Tabla Item

Se agrega la columna IdItem la cual ser el identificador de cada Item en la Tabla 3.9.
La columna de PrecioUnitario es una caracterstica de un artculo, y por lo tanto, se
incluye en la tabla Item, se mantiene una columna PrecioUnitarioVenta en la Tabla 3.8
para garantizar informacin histrica de venta de un Item. La Tabla 3.8 tiene como
clave primaria IdOrden e IdItem (Clave Compuesta) y la Tabla 3.9 tiene como clave
primaria IdItem.

Libro 1: Base de Datos I Unidad 3: Normalizacin de la Base de Datos 59

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

3.3 3NF

Para que un diseo relacional est en 3NF, tiene que estar en 2NF y cada columna no-
clave tiene que ser mutuamente excluyente e independiente. No debe tener ninguna
dependencia transitiva.

Dependencia Transitiva:

Tome un ejemplo para entender la dependencia transitiva. Asuma que se tienen tres
columnas A, B y C en una tabla, donde A es la columna clave. La dependencia se
puede especificar como A---> B, C. En esta relacin, si B depende de A y C depende de
B, entonces C tambin depende de A.

Esta clase de dependencia se denomina dependencia transitiva. Si hay una


dependencia transitiva, entonces se elimina separando la tabla, en la Tabla 1 que
contiene las columnas A y B, y la Tabla 2 que contiene las columnas B y C.

La Tabla 3.6 est en 2NF, pero no en 3NF. La columna clave de la tabla Orden (Tabla
3.6) es IdOrden. Segn 3NF, todas las columnas no-clave tienen que ser mutuamente
independientes. Las columnas no-clave PuntosCredito y Grado no son mutuamente
independientes, as como las columnas cliente y emailCliente no son mutuamente
independientes.

Cada Grado se basa en PuntosCredito. A los clientes que tienen PuntosCredito 1, 2 y 3


se les asigna el Grado A. Los clientes que tienen PuntosCredito 4, 5 y 6 se les asigna el
Grado B. Cuando se aplica 3NF en la Tabla 3.6, da lugar a tres tablas ms: la tabla
Cliente Tabla 3.10, la tabla PuntosCredito Tabla 3.11 y la Tabla 3.12 Orden.

Cliente
IdCliente Cliente EmailCliente Puntos
Credito
1 Joe Smith joe@iewr.com 1
2 Sam sam@ter.com 4

Tabla 3.10: Tabla Cliente en 3NF

Unidad 3: Normalizacin de la Base de Datos Libro 1: Base de Datos I 60

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

PuntosCredito
Puntos Grado
Credito
1 A
2 A
3 A
4 B
5 B
6 B
7 C
8 C
9 C

Tabla 3.11: PuntosCredito en 3NF

Tabla Orden
IdOrden FechaOrden IdCliente
1 11/30/1998 1
2 12/3/1998 2

Tabla 3.12: Tabla Orden en 3NF

La tabla 3.10 Cliente contiene la informacin del cliente. A cada cliente se le asigna
un IdCliente, que es la columna clave en la tabla. Este IdCliente se utiliza en la
tabla Orden para cada orden. Vea la Tabla 3.12
La Tabla 3.11 PuntosCredito la columna clave en esta tabla es PuntosCredito
para cada uno de los puntos se asigna un grado de descuento.
Las Tablas 3.10, 3.11 y 3.12 ahora estn en 3NF. Las Tablas 3.8 y 3.9 estn en 3NF.

3.4 4NF

Para que un diseo relacional est en 4NF, tiene que estar en 3NF y la tabla no debe
contener dos o ms columnas independientes multivaluadas.

A continuacin otro ejemplo.

Considere una tabla que debe almacenar los nombres de diversas personas, los pases
visitados por ellos y los premios que han recibido. Las columnas de la tabla se muestran
en la Tabla 3.14.

Libro 1: Base de Datos I Unidad 3: Normalizacin de la Base de Datos 61

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Persona PaisesVisitados PremiosRecibidos

Tabla 3.14: Tabla que Contiene dos columnas Independientes Multi-Valuadas


En la tabla anterior ambas columnas son multivaluadas. Una persona puede visitar ms
de un pas y puede obtener ms de un premio. Si se almacena esta informacin en una
sola tabla, dara lugar a la Tabla 3.15.

Persona PaisesVisitados PremiosRecibidos


Scott Germany
Scott France
Scott Grammy
Scott Oscar
Scott Premio Noble
Tabla 3.15: Tabla que Contiene Valores en slo una de las Columnas

Los campos en blanco en la Tabla 3.15 conducen a ambigedades. Una entrada en


blanco en la columna PaisesVisitados podra significar que la persona no ha
visitado ningn pas, o que el campo no es aplicable a la persona, o los datos son
desconocidos, o como en este caso, los datos se pueden encontrar en otro registro.

Sin embargo, las dos columnas son independientes, pues no se relacionan una con
otra. Visitar pases y recibir premios son dos entidades diferentes, por lo tanto, son
independientes una de la otra. Ambas columnas son multivaluadas porque una persona
puede visitar ms de un pas y puede recibir ms de un premio. Aqu, se presentan dos
relaciones de muchos-a-muchos, una entre Persona y PaisesVisitados y la otra entre
Persona y PremiosRecibidos.

En la 4NF, estas dos relaciones no se deben representar en una sola tabla como se
present en la Tabla 3.15. En lugar de ello, se deben representar en dos tablas, como
las Tablas 3.16 y 3.17.

PaisesVisitados
Persona PaisesVisitados
Scott Alemania
Scott Francia

Tabla 3.16: 4NF Datos de la Tabla PaisesVisitados

Unidad 3: Normalizacin de la Base de Datos Libro 1: Base de Datos I 62

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

PremiosRecibidos

Persona PremiosRecibidos

Scott Grammy
Scott Oscar
Scott Premio Nobel

Tabla 3.17: 4NF Datos de la Tabla PremiosRecibidos

Las Tablas 3.16 y 3.17 estn en 4NF. No contienen dos o ms columnas


independientes multivaluadas.

3.5 Conclusin

El proceso de diseo de datos no es simple, tiene muchas complejidades que estn


ms all del alcance de esta unidad.

Para comenzar, un conjunto inicial de elementos de datos y registros tienen que ser
desarrollados y clasificados como candidatos a la normalizacin. Luego, los factores
que afectan la normalizacin tienen que ser evaluados. Algunos de ellos se enumeran a
continuacin:
Datos con un slo valor contra multivaluados.
Dependencia completa de la clave.
Hechos independientes contra hechos dependientes.
La presencia de restricciones mutuas.
La presencia de representaciones no nicas o no singulares.
Finalmente, la conveniencia de la normalizacin tiene que ser evaluada, en trminos de
impacto en el rendimiento de las aplicaciones en el proceso de recuperacin de datos.

Libro 1: Base de Datos I Unidad 3: Normalizacin de la Base de Datos 63

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de:

Explicar qu es la normalizacin.
Describir la importancia de la normalizacin en la base de datos.
Apreciar la necesidad de la normalizacin en la base de datos.
Discutir las diferentes formas normales.

Unidad 3: Normalizacin de la Base de Datos Libro 1: Base de Datos I 64

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 3: Examen de Autoevaluacin


1) La normalizacin es el proceso de organizar datos para minimizar la duplicacin.
a) Verdadero
b) Falso

2) 1NF no permite repetir campos en columnas.


a) Verdadero
b) Falso

3) Un diseo relacional est en 2NF si y solo si est en _________.


a) 1NF
b) 3NF
c) 4NF
d) Todas las anteriores

4) En cul de las formas siguientes se verifica que cada columna no clave es


completamente dependiente de la clave primaria en su totalidad?
a) 1NF
b) 2NF
c) 3NF
d) 4NF

5) En cul de las formas siguientes se verifica que cada columna no clave es


mutuamente independiente?
a) 1NF
b) 2NF
c) 3NF
d) 4NF

6) En cul de las formas siguientes se verifica que la tabla no contiene dos o ms


columnas independientes multivaluadas?
a) 1NF
b) 2NF
c) 3NF
d) 4NF

Libro 1: Base de Datos I Unidad 3: Normalizacin de la Base de Datos 65

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

7) La normalizacin se refiere al proceso de crear una estructura relacional eficiente,


confiable, flexible y apropiada para almacenar informacin.
a) Verdadero
b) Falso

8) La normalizacin es parte del proceso de diseo ____________.


a) Lgico
b) Fsico
c) De almacenamiento
d) Salida

9) Cul es el proceso de dividir una base de datos en dos o ms tablas y de definir


relaciones entre ellas?
a) Diseo
b) Normalizacin
c) Almacenamiento
d) Medida

10) La integridad de los datos se asegura en el proceso de normalizacin.


a) Verdadero
b) Falso

Unidad 3: Normalizacin de la Base de Datos Libro 1: Base de Datos I 66

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Respuestas a la Unidad 3: Examen de Autoevaluacin


1) a
2) a
3) a
4) b
5) c
6) d
7) a
8) a
9) b
10) a

Libro 1: Base de Datos I Unidad 3: Normalizacin de la Base de Datos 67

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 4: Lab. de Diseo de Base de


Datos
Objetivos de Aprendizaje
Al final de esta unidad usted ser capaz de:
Identificar las diversas entidades y las relaciones entre ellas en un sistema.
Construir un diagrama ER.
Traducir la comprensin conceptual a un diseo de tablas.
Realizar las operaciones de normalizacin.
Comprender el diseo de una tabla en la forma de un diagrama.

Libro 1: Base de Datos I Unidad 4: Lab. de Diseo de Base de Datos 69

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Ejercicio de Laboratorio
Definicin del Problema: INFORME DE GASTOS.
1) Jones y David hacen un viaje oficial a Cincinnati. Incurren en gastos por su estada
de siete das en Cincinnati. Cada uno enva un informe de gastos por el viaje. Un
INFORME DE GASTO tiene uno o ms gastos enumerados como ITEMS. Jones
incurri en los siguientes gastos:
Gastos de alojamiento.
Taxi desde el aeropuerto.
Taxi al aeropuerto.
Almuerzo.
Cena.
Su informe de gastos tendr cinco tems de Gastos.
Cada GASTO pertenece a una Categora.
El dinero gastado en comida pertenece a la categora de alimento, el dinero
gastado en taxi pertenece a la categora de transporte y el dinero gastado en
alojamiento pertenece a la categora de alojamiento.
Cada CATEGORA DE GASTO tiene un lmite.
El dinero gastado en la categora de alimento no puede exceder de $1000, el
dinero gastado en transporte no puede exceder de $ 3000 y el dinero gastado en
alojamiento no puede exceder a $ 2500.
Cada EMPLEADO tiene un LMITE de gasto bajo cada CATEGORA DE
GASTO.
Aunque cada categora de gasto tiene un lmite, no todos los empleados son
asignados bajo el mismo lmite mximo de una categora dada. Cada empleado
tiene un lmite de gasto bajo cada categora de gasto, que vara de empleado a
empleado. Bajo la categora de Alimento, David tiene un lmite de gasto de $500,
mientras que Jones tiene un lmite de $1000. El lmite mximo bajo de esta
categora es $1000. El estado de un INFORME DE GASTOS puede ser: en
espera de aprobacin, aprobada o denegada.
Cuando David enva su informe de gastos, ste ingresa a la base de datos. En este
punto, el estado del informe est en espera de aprobacin'. El encargado revisa el
informe y lo cambia al estado de aprobado ' o denegado'.

Para la definicin del problema anterior realice las siguientes tareas:


Identifique en el sistema las diversas entidades y las relaciones entre ellas.
Identifique los atributos para cada una de las entidades y seale cules son
claves.
Construya un diagrama ER.

Unidad 4: Lab. de Diseo de Base de Datos Libro 1: Base de Datos I 70

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 5: Lab. de Modelado de Base de


Datos
Objetivos de Aprendizaje
Al finalizar esta unidad, usted ser capaz de:
Utilizar la herramienta Azzurri Clay.
Conocer los procedimientos para crear tablas, ndices, claves nicas y claves
forneas.
Aplicar ingeniera en reversa de una base de datos ya existente.
Generar scripts SQL de un modelo de base de datos.

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 71

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

1. Introduccin a Azzurri Clay


Azzurri Clay, es una herramienta modeladora de Base de Datos que corre como un
Plug-in en Eclipse. Tiene las siguientes propiedades:
Proporcionar una interfaz grfica para modelar base de datos.
Permite aplicar ingeniera en reversa de base de datos existentes.
Generar sentencias SQL en el lenguaje apropiado para crear Base de Datos.

2. Inicio de Sesin en Azzurri Clay


Para ingresar a Azzurri Clay hay que iniciar sesin en Eclipse 3.0 como lo muestra la
Figura 5.1.

Figura 5.1: Inicio de Sesin en Eclipse 3.1

Luego de iniciar sesin en eclipse aparece la pantalla que muestra la Figura 5.2.

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 72

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 5.2: Directorio de Trabajo (Workspace Launcher)

Si se tiene una carpeta para guardar los trabajos haga clic en para
ubicarla. Si no existe un espacio de trabajo, puede crear uno mediante los siguientes
pasos:

Haga clic en . Una vez seleccionado aparece la pantalla mostrada en la


Figura 5.3.

Figura 5.3: Nuevo Directorio de Trabajo

Seleccione el directorio donde desea almacenar los archivos, haciendo clic en los
directorios que muestra la Figura 5.4.

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 73

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 5.4: Seleccin del Directorio

Para crear una nueva carpeta escriba el nombre de la misma en el espacio sealado en
la Figura 5.5.

Figura 5.5: Asignando un Nombre a la Nueva Carpeta

Una vez seleccionado el nuevo directorio haga clic en y aparecer en la


pantalla una ventana que indica la ubicacin del directorio en el que est trabajando, tal
como lo muestra la Figura 5.6.

Figura 5.6: Seleccin del Directorio de Trabajo (Workspace Directory)

Una vez creada la carpeta, haga clic en .

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 74

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Una vez seleccionado el directorio a trabajar, aparece la pantalla de bienvenida a


Eclipse 3.0, tal como se observa en la Figura 5.7. Para iniciar la sesin en este entorno,

haga clic en y aparecer la ventana principal mostrada en la Figura 5.8.

Figura 5.7: Ventana para Comenzar a Trabajar en Eclipse

Figura 5.8: Ventana Principal de Eclipse

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 75

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Para comenzar a trabajar, se debe tener creado un proyecto. Seleccinelo al momento


de empezar a crear los diagramas, si no se tiene un proyecto creado, debe crearlo
siguiendo los pasos a continuacin:
Seleccione FileNewProject (ArchivoNuevoProyecto), como se observa en la
Figura 5.9 (a) o haga clic derecho con el ratn sobre el rea de trabajo y seleccione
NewProject (NuevoProyecto), tal como lo muestra la Figura 5. 9 (b).

Figura 5.9 (a): Creacin de un Nuevo Proyecto

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 76

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 5.9 (b): Creacin de un Nuevo Proyecto

Seguidamente, aparecer una ventana donde se debe seleccionar la opcin Java


Project (Proyecto Java) como lo muestra la Figura 5.10. Haga clic en para
seguir al siguiente paso.

Figura 5.10: Seleccin de la opcin Java Project

Asigne un nombre al proyecto en la caja de texto Project Name (Nombre del Proyecto).
En Project Layout (Capa del Proyecto), seleccione Create separate source and output

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 77

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

folders (Crear fuentes y carpetas por separado) como se muestra en la Figura 5.11.

Luego, haga clic en para aceptar o rechazar la confirmacin de la


perspectiva java, esto lo muestra la Figura 5.12.

Figura 5.11: Asignar un Nombre al Proyecto

Figura 5.12: Confirmacin o Rechazo de Perspectiva Java

Una vez que se tiene un proyecto para trabajar, se puede iniciar la sesin en Azzurri
Clay, como lo muestra la Figura 5.13.

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 78

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 5.13: Iniciar Sesin de Azzurri Clay

Ubquese en la carpeta Src (Fuente) y con el botn derecho del ratn haga clic en
NewOther (NuevoOtros). Seguidamente, aparecer la ventana mostrada en la
Figura 5.13. Seleccione la opcin Azzurri Clay Database Design Diagram (Diagrama de

Diseo de Base de Datos Azzurri Clay) y haga clic en como se muestra en


la Figura 5.14.

Figura 5.14: Seleccin del Diagrama de Diseo de Base de Datos Azzurri Clay

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 79

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Seleccione un directorio donde trabajar, un nombre para el diagrama y el SQL Dialect

(Dialecto SQL) que se va a utilizar, luego haga clic en . Dichas


caractersticas se pueden seleccionar en la ventana que se observa en la Figura 5.15.

Figura 5.15 Seleccin de los parmetros necesarios para crear un Diagrama en Azzurri
Clay

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 80

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 5.16: Pantalla Principal de Clay

Azzurri Clay proporciona una barra de herramienta con la que es posible agregar tablas,
hacer referencias forneas y seleccionar elementos en el diagrama que se est
realizando, observe la Figura 5.17.

Referencias de Clave
Agregar Tabla
Figura 5.17: Barra de Herramienta del Diagrama

3. Creacin de Tablas
Para agregar una tabla basta con hacer clic en Add Table (Agregar Tabla) y dibujar la
tabla en el Espacio de Trabajo, al hacer esto, se podr ver la ventana mostrada en la
Figura 5.18.

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 81

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 5.18: Pantalla con una Tabla Insertada

Haciendo clic derecho sobre la tabla aparece el siguiente submen.

Figura 5.19: Submen del Elemento Tabla

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 82

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Opcin Descripcin

Undo Deshacer la ltima accin.


Redo Rehacer la ltima accin.
Copy Table TABLE_1 Copiar la tabla seleccionada (TABLE_1).
Paste Copy of Table TABLE_1 Pegar la copia de la tabla seleccionada (TABLE_1)
Permite cambiar el dialecto de SQL que se est
Edit Database Model
usando en el diagrama actual.
Edit Schemas Lista los Schema que se pueden usar.
Edit Table Edita la configuracin de la tabla seleccionada.
Edita la configuracin de las columnas de la tabla
Edit Table Columns
seleccionada.
Edit Table Indexes Permite crear ndices en la tabla seleccionada.
Edit Table Unique Keys Permite crear claves nicas en la tabla seleccionada.
Delete Borrar la tabla seleccionada.
Resize Table_1 to Default Size Ajustar el tamao del marco de la tabla al contenido.
Iniciar proceso de Ingeniera en Reversa de una base
Reverse Engineer Database
de datos existente.
Generate SQL (CREATE
Generar los Script de la tabla seleccionada.
TABLE) Script
Save Guarda el Diagrama que se est diseando.

Cuadro 5.1: Opciones del Submen del Elemento Tabla

A cada tabla creada se le debe asignar un nombre en el espacio de Name (Nombre) en


la pestaa Table (Tabla), tal como se observa en la Figura 5.20.

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 83

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 5.20: Editor de Tablas - Datos de la Tabla

En la pestaa Columns (Columnas) se debe colocar toda la informacin referente a las


columnas (Name, Data Type, Primary Key). El Cuadro 5.2 muestra las opciones para
configurar los campos de la tabla que se est creando. Ver Figura 5.21.

Opcin Descripcin
Add New Agrega una nueva columna.
Insert New Agrega una nueva columna y la inserta por encima de la columna
seleccionada.
Delete Elimina la columna que esta seleccionada en ese momento.
Description Abre una ventana para documentar las caractersticas de la columna.
Name Espacio para colocar el nombre de la columna.
Alias Espacio para asignar otro nombre a la tabla que no afecta la generacin de
los scripts, ya que en los scripts aparecer con el asignado en Name.
Remarks Espacio para agregar un comentario de la columna que puede estar
contenido en el scripts de la tabla que la contiene.
Data Type Despliega una lista de tipos de datos para la columna que soporta el dialecto
SQL seleccionado para el modelo.
Precision Indica el tamao de los valores a contener en la columna.
Scale Indica la parte fraccional que pueden tener los valores a contener en la
columna.
Primary Key Se activa cuando la columna seleccionada es la clave primaria.
Mandatory Se activa cuando la columna debe ser not null. Cuando se selecciona una
columna como Primary Key, se activa automticamente la opcin
Mandatory.
Auto-Increment Se usa cuando el dialecto SQL soporta el uso de la opcin de auto-
incremento.
Default Valor que se le quiera dar por defecto a una columna.
Cuadro 5.2: Opciones para configurar los campos de la tabla

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 84

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 5.21: Editor de Tablas Datos de las Columnas

Para comprender mejor la creacin de tablas, se pueden crear dos tablas la Tabla
Empleado y la Tabla Dependiente_emp que almacena datos de las personas que
dependen del empleado con los siguientes campos:

Empleado idemp entero

nombre carcter

fechaing fecha

Dependiente_emp iddepemp entero

nombre carcter

relacion carcter

El atributo relacion es el parentesco que existe con el empleado, por ejemplo: hijo,
padre, madre y esposa.

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 85

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

4. Creacin de ndices en las Tablas

Al hacer clic en la opcin Edit Table Indexes (Editar Tablas ndices), se despliega la
ventana mostrada en la Figura 5.22. Seleccione Index List para crear un nuevo
ndice en la tabla, observe la Figura 5.23. Luego, haga clic en Column List para
seleccionar la columna que ser ndice, ver Figura 5.24. Con esto, ya se ha creado el

nuevo ndice, haga clic en para que se complete la creacin. Observe la Figura
5.25 y 5.26.

Figura 5.22: Seleccionar Opcin Edit Table Indexes (Editar Tablas ndices)

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 86

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 5.23: Ventana para Crear ndices

Figura 5.24: Creacin de un Nuevo ndice

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 87

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 5.25: Seleccin de una Columna que ser ndice

Figura 5.26: ndice Creado

5. Creacin de Claves nicas


Al hacer clic en la opcin Edit Table Unique Keys (Editar Claves nicas de la Tabla) se
despliega la ventana mostrada en la Figura 5.27. Aqu, seleccione Unique Key
List (Lista de Clave nica) para crear una nueva clave nica en la tabla;
observe la Figura 5.28. Luego, haga clic en Key Column List (Lista de
Columna Clave) para seleccionar la columna que ser nica, ver Figura 5.29 Con esto,

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 88

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

ya se ha creado la nueva clave nica, tal como se puede observar en la Figura 5.30.

Haga clic en para que se complete la creacin.

Figura 5.27: Seleccin de la Opcin Edit Table Unique Keys

Figura 5.28: Ventana para Crear Clave nica

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 89

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 5.29: Creacin de una Nueva Clave nica

Figura 5.30: Seleccin de una Columna que ser Clave nica

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 90

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 5.31: Clave nica Creada

6. Creacin de Claves Forneas


Luego de haber creado las tablas, agregue una Clave Fornea haciendo referencia de
la tabla Empleado en la tabla Dependiente_emp. Para realizar esto, haga clic en
Foreign Key Reference (Referencia de Clave Fornea) y dibuje la relacin
desde la tabla en la que se va hacer la referencia (Dependiente_emp) hasta la tabla a la
que hace referencia (Empleado). Posteriormente, se crea de manera automtica el
campo idemp (Clave Primaria de Empleado) en la tabla Dependiente_emp, campo por
el cual va a estar referenciada la tabla Empleado, tal como lo muestra la Figura 5.32.

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 91

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 5.32: Tablas Creadas

Figura 5.33 Referencia de Clave Fornea

Para ver las propiedades de la Clave Fornea creada, haga clic sobre la relacin y con
el botn derecho despliegue el submen de opciones que pueden efectuarse sobre la
relacin. Para editar las propiedades seleccione la opcin Edit Foreign Key (Editar
Clave Fornea), seguidamente aparecer la ventana mostrada en la Figura 5.34. En la
ventana desplegada se puede configurar la clave fornea recin creada, observe la
Figura 5.35.

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 92

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 5.34: Submen de Claves Forneas

Figura 5.35: Ventana para Configurar la Clave Fornea

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 93

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

7. Ingeniera en Reversa de la Base de Datos


Para trabajar con la Ingeniera en Reversa, haga clic derecho sobre el rea de trabajo,
de esta manera se despliega un submen del cual se debe seleccionar la opcin de
Reverse Engineer Database (Ingeniera en Reversa de la Base de Datos), observe la
Figura 5.36.

Figura 5.36: Submen para Seleccionar Reverse Engineer Database

Una vez activada esta opcin, se despliega una ventana para hacer la conexin al
manejador de base de datos a utilizar, tal como se muestra en la Figura 5.37.

Figura 5.37: Establecer Conexin con un Tipo de Manejador de Base de Dato

En esta ventana se tienen dos opciones: Crear nuevas conexiones o usar una existente.
Si hay que crear la conexin haga clic en la opcin y aparecer una ventana

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 94

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

para editar la conexin como la mostrada por la Figura 5.38. Para establecer dicha
conexin hay que definir los parmetros que muestra el Cuadro 5.3, haga clic

en .

Figura 5.38: Editar Conexin

Parmetro Descripcin

Connection Type Seleccionar un tipo de conexin de las desplegadas.


Alias Nombre para identificar la conexin.
URL La ruta en donde se encuentra la Base de Dato a utilizar.
User Nombre de Usuario.
Password Password del Usuario.
JDBC Driver Especificacin del Driver a utilizar segn tipo de conexin.
Driver Location Ruta donde se encuentran los driver instalados.
Cuadro 5.3: Parmetros para Configurar las Conexiones

Una vez creada la conexin haga clic en para especificar el esquema bajo el
cual se va a trabajar, observe las Figuras 5.39 y 5.40. Como el Driver que se est
utilizando es el de MySQL aperece un resumen mostrando informacin de la conexin,
puede observarse en el URL el esquema o base de datos al cual se conectar
(jdbc:mysql://localhost/mysql)

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 95

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 5.39: Seleccin del Esquema de Trabajo

Figura 5.40: Esquema de Trabajo

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 96

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Haga clic en para seleccionar las tablas a utilizar en el diagrama, tal como
se observa en las Figuras 5.41 y 5.42. Una vez seleccionadas las tablas, haga clic en

y aparecer insertada en el rea del diagrama la(s) tabla(s) seleccionadas


anteriormente, observe la Figura 5.43.

Figura 5.41: Seleccin de Tablas para hacer Ingeniera en Reversa

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 97

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 5.42: Tabla a ser Insertada en el Diagrama

Figura 5.43: Tabla USER_INFO Insertada en el Diagrama

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 98

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

8. Generacin de Scripts SQL


Se pueden generar los Scripts SQL de todo el modelo de base de datos (al no tener
seleccionado un elemento en el diagrama al hacer clic derecho) o solo de un elemento
determinado del modelo de base de datos (al tener seleccionado el elemento una tabla
al hacer clic derecho).

Cuando se hace clic derecho sobre el rea deseada (rea de Trabajo o Tabla) se
despliega un submen, donde se debe seleccionar la opcin Generate SQL (CREATE
TABLE) Scripts (Generar Scripts SQL), ver Figura 5.44. Tambin se puede seleccionar
la opcin por Men Clay Generate SQL (CREATE TABLE) Scripts, como lo muestra
la Figura 5.45.

Figura 5.44: Submen para Generar los Scripts SQL

Figura 5.45: Opcin de la Barra de Men

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 99

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Luego de seleccionar la opcin antes mencionada, aparece una ventana donde se


requiere asignar un nombre al script SQL a generar. Para ello, ubquese en la caja de
texto File Name e introduzca un nombre, observe la Figura 5.46.

Figura 5.46: Tabla Nombre del Archivo que contendr las Sentencias SQL

Seguidamente, haga clic en aparecer una ventana para especificar que DDL
(Data Definition Language) de la(s) tabla(s) del diagrama se van a generar, opciones
especiales, si es el caso, y el smbolo de terminacin de las sentencias SQL, ver Figura
5.47.

Unidad 5: Lab. de Modelado de Base de Datos Libro 1: Base de Datos I 100

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 5.47: Especificaciones para Generar las Sentencias SQL

Una vez seleccionadas las opciones, haga clic en , inmediatamente aparecer


una nueva pestaa en el rea de trabajo que contendr las sentencias SQL como
aparece en la Figura 5.48.

Figura 5.48: Sentencias SQL Generadas

Libro 1: Base de Datos I Unidad 5: Lab. de Modelado de Base de Datos 101

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de:

Utilizar la herramienta Azzurri Clay.


Conocer los procedimientos para crear tablas, ndices, claves nicas y claves
forneas.
Aplicar ingeniera en reversa de una base de datos ya existente.
Generar scripts SQL de un modelo de base de datos.

Unidad 1:Programacin en C Los Primeros Pasos Volumen 1: Fundamentos de C 102

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos en parte
o en su totalidad sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Volumen 2: Lenguaje de Consulta


Estructurado

Libro 1: Base de Datos I Volumen 2: Lenguaje de Consulta Estructurado 103

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Unidad 1 Lenguaje de Consulta


Estructurado - Fundamentos
Objetivos de Aprendizaje
Al finalizar esta unidad, usted ser capaz de:

Explicar qu es SQL.
Explicar qu son DDL, DML y DCL.
Escribir una sentencia SELECT simple y una sentencia SELECT condicional.
Hacer uso de las funciones agregadas.
Listar los operadores lgicos y el orden de precedencia.
Discutir sobre los operadores usados en las sentencias SELECT.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 105

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

1. Introduccin
En el Volumen 1, se discuti acerca del diseo de datos y el almacenamiento de datos
en tablas. A continuacin, se explica cmo se insertan, modifican y eliminan datos de
una tabla, as como, visualizar los datos de una tabla. En otras palabras, en esta unidad
aprender a conectarse con una base de datos.

El lenguaje usado para comunicarse con una base de datos se llama Lenguaje de
Consulta Estructurado (Structured Query Language SQL), el cual se ha consolidado
como el lenguaje estndar de las bases de datos relacionales. Es un lenguaje muy fcil
de usar y parece tan simple como el ingls.

SQL es un lenguaje estandarizado que sirve para definir y manipular los datos de una
base de datos relacional. De acuerdo con el modelo relacional de datos, la base de
datos se crea como un conjunto de tablas y las relaciones se representan mediante
valores en las tablas.

IBM originalmente desarroll SQL a comienzos de los setenta, llamado inicialmente


Sequel, cambi despus su nombre a SQL. En 1986, el American National Standard
Institute (ANSI) y el International Standards Organization (ISO), present un estndar
para SQL llamado SQL-86. Desde entonces, ha ido evolucionado a medida que se han
desarrollado nuevas versiones. En 1992 el ANSI / ISO present el estndar SQL-92.
Actualmente, est vigente el SQL-99 (SQL3) que es soportado por muchos RDBMS.

Cada RDBMS viene con una herramienta de uso interactivo que permite al usuario
ingresar sentencias SQL y pasarlas a la base de datos para su ejecucin. Estas
sentencias, tcnicamente llamadas consultas (queries), ayudan a crear, acceder y dar
mantenimiento a los distintos objetos de la base de datos.

La Tabla 1.1 muestra las herramientas de ejecucin de SQL disponibles en el MySQL


para ejecutar sentencias SQL.
Herramientas de Ejecucin
de SQL
Query Browser
Lnea de Comandos

Tabla 1.1: Las Herramientas de Ejecucin de SQL

A continuacin se presenta una pequea descripcin del uso tanto de la Lnea de


Comandos como del query browser de MySQL.
Usando la instalacin del MySQL disponible en el sistema, realice las siguientes tareas:

Inicie la consola (Konsole) e ingrese el siguiente comando mysql -h localhost -u


mysqladmin -p. Posteriormente, ingrese el password mysqladmin. Tambin en el men
de inicio puede iniciar la aplicacin MySQL Query Browser.

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 106
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Ejecute los comandos que le facilita la aplicacin (\h y \c, ). Si se encuentra utilizando el
MySQL Query Browser puede navegar a travs de los diferentes objetos de la base de
datos en el rbol de objetos ubicados del lado derecho de la pantalla.

Conctese a la base de datos test, con cualquiera de los siguientes comandos, seguido
por la tecla Enter:

\u test o use test

Para conectarse a la base de datos en el Query Browser, slo tiene que seleccionarla
en el rbol que aparece del lado derecho de la pantalla.

Ingrese las sentencias necesarias (CREATE, INSERT, UPDATE, DELETE o DROP) y


luego presione la tecla Enter. Recuerde que cuando se trabaja bajo Lnea de Comandos
las sentencias deben finalizar con el carcter (;).

Si trabaja en el Query Browser, primero debe ubicarse en el rea de procesamiento de


mandatos.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 107

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

rea de Procesamiento de Mandatos

Figura 2.1: rea de Procesamiento de Mandatos

Luego ingrese la sentencia y presione las teclas Control + Enter o haga clic sobre el
botn Execute.

Figura 2.2: Botn Execute

Los ejemplos de ste y los siguientes volmenes han sido probados tanto en el Query
Browser como en Lnea de Comandos de MySQL. Hay una mnima diferencia entre
Lnea de Comandos y Query Browser. En Lnea de Comandos se espera que las
consultas finalicen con un carcter de terminacin (;), pero esto no es necesario cuando
se trabaja en Query Browser.

Antes de estudiar los comandos SQL y presentar algunos ejemplos, se discuten las
distintas partes del SQL.

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 108
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

El SQL tiene las siguientes partes:


Lenguaje de Definicin de Datos (Data Definition Language - DDL): El DDL
del SQL proporciona comandos para definir los objetos de la base de datos. Una
tabla, por ejemplo, es un objeto de la base de datos. Otros objetos de la base de
datos incluyen vistas, ndices y procedimientos almacenados.
Lenguaje de Manipulacin de Datos (Data Manipulation Language - DML):
El DML del SQL proporciona comandos para insertar, eliminar y modificar
registros en la(s) tabla(s).
Lenguaje de Control de Datos (Data Control Language - DCL): Mientras que
el DDL y el DML se refieren a la manipulacin de datos dentro de la base de
datos, el DCL del SQL proporciona comandos para manejar y controlar datos.
Ayuda al administrador a controlar la seguridad y los accesos a los datos, es
decir, ayuda a mantener, administrar y a realizar un control ordenado sobre los
datos.
Lenguaje de Consulta de Datos (Data Query Language - DQL): El DQL del
SQL proporciona comandos para recuperar datos desde tablas. La sentencia
SELECT es un comando DQL. Se aprender acerca del comando SELECT ms
adelante en esta unidad.
A continuacin se estudian las tablas de datos.

2. Tabla de Datos
Esencialmente el objeto de mayor importancia en la base datos es la tabla, la cual es
utilizada para almacenar datos.
Dentro de una tabla, los datos se almacenan en la forma de filas y columnas.
Cada fila representa a un registro y cada columna se denomina un atributo, el
cual representa a un campo.
Un campo es una caracterstica o una propiedad de los datos que son
representados.
Las caractersticas de una tabla se ilustran en la Tabla 1.2.

NombreCol NombreCol NombreCol


Fila 1
Fila 2
Tabla 1.2: Tabla de un RDBMS

La tabla DireccionDeEmpleado mostrada en la Tabla 1.3 es un ejemplo de una tabla de


un RDBMS. Esta tabla relaciona la direccin, nombre y nmero del Seguro Social (NSS)
de una persona.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 109

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

Tabla DireccionDeEmpleado
NSS Nombre Apellido Direccion Ciudad Estado
512687458 Mike Dennis 83 First Street Dayton Ohio
758420012 Susan Ikelar 842 Vine Ave. Cincinnati Ohio
102254896 Rob Heimann 33 Elm St. Tarrytown New York
876512563 Sarah Connors 440 U.S. 110 Ann Arbor Michigan

Tabla 1.3: La Tabla DireccionDeEmpleado

A continuacin se discute sobre el DDL.

3. DDL
Los siguientes son algunos de los comandos SQL en esta categora:
CREATE
ALTER
DROP
3.1 El Comando CREATE

El comando CREATE se usa para crear objetos de la base de datos. Tablas, vistas e
ndices son algunos ejemplos de objetos de la base de datos. La sentencia CREATE se
usa para describir la estructura de un objeto de la base de datos.

Sintaxis para crear una Tabla:


CREATE TABLE nombre_de_la_tabla (
nombre_de_la_columna1 tipo_de_dato,
nombre_de_la_columna2 tipo_de_dato,
...
nombre_de_la_columnan tipo_de_dato
);
Por ejemplo, considere la tabla juguetes de la base de datos que se crea como
sigue:
CREATE TABLE juguetes (
id_comprador INTEGER NOT NULL,
producto VARCHAR(40) NOT NULL,
precio DOUBLE
);
La sentencia anterior, cuando es ejecutada en una herramienta de SQL, crea una tabla
con el nombre juguetes. La sentencia tambin incluye algunos nombres de columnas,
Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos
Lenguaje de Consulta Estructurado 110
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

sus respectivos tipos de datos y las restricciones de tipo NOT NULL de las columnas.
Se presentan los tipos de datos soportados por MySQL ms adelante.

Hay una palabra clave NOT NULL en la sentencia CREATE anterior. La palabra NOT
NULL significa que la columna debe tener un valor en cada fila. NULL indica ningn valor
o un valor no aplicable y es un concepto importante en cualquier RDBMS.

A continuacin se presenta un ejemplo para entender el concepto de NULL. Considere a


un estudiante que no asisti a una prueba, y por lo tanto, no obtuvo ninguna nota para
esa prueba. Si le pregunta por su nota en esa prueba, qu respuesta dara?.
Definitivamente no puede decir cero, ya que no obtuvo la nota cero!. Una respuesta
posible podra ser sin nota, indicando ningn valor o un valor no aplicable.

3.2 El Comando ALTER

El comando ALTER se usa para modificar la estructura de objetos de la base de datos.


Este comando se usa por ejemplo para agregar una nueva columna a una Tabla. El
siguiente ejemplo muestra cmo las columnas pueden ser agregadas a una tabla.
ALTER TABLE juguetes
ADD COLUMN id_vendedor integer;
Cuando la sentencia SQL anterior es ejecutada, una nueva columna llamada
id_vendedor de tipo de dato numrico se agrega a la tabla juguetes.

3.3 El Comando DROP

El comando DROP se usa para eliminar objetos de la base de datos. Por ejemplo:
DROP TABLE juguetes;
DROP VIEW vista_juguetes;
DROP INDEX indice_juguetes;
Los comandos SQL anteriores eliminan los siguientes objetos de la base de datos: la
tabla juguetes, la vista vista_juguetes y el ndice indice_juguetes.

4. DCL
El Lenguaje de Control de Datos (DCL) es el lenguaje que se usa para controlar el
acceso de datos. Muchos sistemas tienen grandes volmenes de datos, que usan
muchos usuarios. En tales situaciones, es importante el monitoreo y el control del
acceso a los datos para garantizar la seguridad de los datos y prevenir el acceso ilegal
a los mismos.

Los siguientes son algunos de los comandos SQL en esta categora:

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 111

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

GRANT
REVOKE
Ejemplos de estos comandos se presentan ms adelante.

5. DML
El DML se usa para la manipulacin de los datos: agregar, eliminar y actualizar los
valores.

Algunos de los comandos SQL en esta categora se listan a continuacin:


INSERT: Se usa para agregar valores en la tabla.
DELETE : Se usa para eliminar valores de la tabla.
UPDATE: Se usa para actualizar o cambiar los valores presentes en la tabla.

6. Agregar Datos
Como se mencion anteriormente, el comando INSERT se usa para agregar datos a
una tabla. La sintaxis de este comando es como sigue:
INSERT into nombre_de_la_tabla (columna1,columna2 )
VALUES (valor1, valor2);
El siguiente comando inserta una fila en una tabla:
INSERT INTO juguetes (id_comprador, producto, precio,
id_vendedor) VALUES (21, 'Barbie', 200.00, 01);
La tabla juguetes contiene cuatro columnas: id_comprador, producto, precio
y id_vendedor. La sentencia anterior contiene una lista de columnas ordenadas y
una lista de valores ordenados para las columnas.

A continuacin se muestra otra forma de escribir la sentencia INSERT:


INSERT INTO juguetes VALUES (21, 'Barbie', 200.00, 01);
Esta sentencia no incluye los nombres de las columnas. Si los nombres de las columnas
no se listan en una sentencia INSERT, entonces la clusula VALUES debe contener los
valores para todas las columnas en el mismo orden en el que estn listadas las
columnas en la tabla.

El orden en el cual las columnas son creadas en una tabla es dependiente del orden en
que fueron colocadas las columnas en la sentencia CREATE, cuando la tabla fue creada.

La siguiente es otra variacin de la sentencia INSERT:


INSERT INTO juguetes (id_comprador, producto, id_vendedor)
VALUES (02, 'Barbie',22);

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 112
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

La sentencia anterior no incluye todas las columnas de la tabla. La columna precio no


est presente as que la tabla tendr un valor NULL en la columna precio. El orden de
las columnas en la sentencia INSERT anterior ha sido cambiado. Sin embargo, el orden
de las columnas no importa si los nombres de las columnas se mencionan
explcitamente y se enumeran los valores de las columnas correspondientes.

7. Eliminar Datos
La fila que fue insertada en la seccin anterior puede ser ahora eliminada de la base de
datos usando el comando DELETE. La sintaxis del comando DELETE es como sigue:
DELETE FROM nombre_de_la_tabla WHERE Condicin;
En el comando DELETE, la condicin WHERE es opcional. Si la condicin no es
especificada, todas las filas son eliminadas. De otra forma, slo las filas que satisfacen
la condicin sern eliminadas. Considere la siguiente sentencia:
DELETE FROM juguetes WHERE producto = 'Barbie';
En este caso, no solo la ltima fila que se haba agregado ser eliminada sino tambin
todas las filas que contienen el valor 'Barbie' en producto. Para eliminar solo la ltima
fila agregada, se usar la siguiente instruccin:
DELETE FROM juguetes
WHERE producto = 'Barbie' AND id_comprador = 02 AND
id_vendedor = 22;

8. Actualizar Datos
A continuacin, se actualiza el precio a los productos Silla de la tabla juguetes.

La sintaxis del comando UPDATE es:


UPDATE nombre_de_la_tabla SET Col1=valor1, Col2=valor2
WHERE Condicin;
Se puede hacer esto con la siguiente instruccin:
UPDATE juguetes SET precio = 500.00 WHERE producto =
'Silla';
Esto coloca el precio de todas las sillas a 500.00.

9. DQL La Sentencia SELECT


La sentencia SELECT se usa para recuperar datos de las tablas. La sentencia SELECT
puede ser: Un simple SELECT o uno condicional. En una sentencia SELECT condicional,
los datos recuperados se basan en una condicin dada.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 113

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

Seleccionar Datos de todas las Columnas de la Tabla


La sintaxis bsica de la sentencia SELECT es como sigue:
SELECT * FROM nombre_de_la_tabla;
La sentencia anterior se usa para obtener todas las columnas de la tabla. El *
denota todas las columnas.
Seleccionar Datos de Ciertas Columnas de la Tabla
Lo siguiente es la sintaxis para obtener ciertas columnas especficas de la tabla:
SELECT nombrecol1, nombrecol2, , nombrecoln FROM
nombre_de_la_tabla;
Tabla DireccionDeEmpleado
Nombre Apellido Direccin Ciudad Estado
Mike Dennis 83 First Street Dayton Ohio
Susan Ikelar 842 Vine Ave. Cincinnati Ohio
Rob Heimann 33 Elm St. Tarrytown New York
Sarah Connors 440 U.S. 110 Ann Arbor Michigan

Tabla 1.4: Datos de la Tabla DireccionDeEmpleado

La Tabla 1.4 contiene datos sobre los empleados de una compaa.

Para obtener las columnas Nombre, Ciudad y Estado listadas en la Tabla 1.4, se puede
ejecutar la siguiente sentencia SQL:
SELECT nombre, ciudad, estado FROM direcciondeempleado;
Se muestra la capacidad de SQL para escoger los valores de ciertas columnas que son
requeridas por el usuario.

10. Seleccin Condicional


La sentencia SELECT proporciona todos los registros de la tabla. Si se requiere slo
aquellos registros en la tabla que satisfacen una condicin especfica, entonces se usa
la sentencia SELECT condicional con la clusula WHERE.

10.1 La Clusula WHERE

Lo siguiente es la sintaxis de la clusula WHERE:


SELECT * FROM nombre_de_la_tabla WHERE NOMBRE_COL = VALOR;
La clusula WHERE se usa para especificar que slo ciertas filas de la tabla deben
mostrarse. sta se usa junto a los operadores relacionales tales como mayor que,
menor que o igual a. Se aprender ms sobre los operadores relacionales ms
adelante.

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 114
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

10.2 Operadores Relacionales tiles

Hay seis operadores relacionales en SQL, como se muestra en la Tabla 1.5.


= Igual
<> o != Diferente
< Menor que
> Mayor que
<= Menor o igual a
>= Mayor o igual a
Tabla 1.5: Operadores Relacionales

Considere un ejemplo sobre el uso de operadores relacionales y la clusula WHERE.


Observe la Tabla 1.6, la cual contiene el detalle de los salarios y las posiciones de los
empleados de una organizacin.
EstadisticasDeEmpleados
IdNoEmpleado Salario Beneficios Posicion
010 75000 15000 Gerente
105 65000 15000 Gerente
152 60000 15000 Gerente
215 60000 12500 Gerente
244 50000 12000 Personal
300 45000 10000 Personal
335 40000 10000 Personal
400 32000 7500 Principiante
441 28000 7500 Principiante

Tabla 1.6: Tabla de Datos EstadisticasDeEmpleados


Para ver los idnoempleado de aquellos empleados que tienen un salario de $50,000
o ms, se puede ejecutar la siguiente sentencia SQL:
SELECT idnoempleado FROM estadisticasdeempleados WHERE
salario >= 50000;
Note que se usa el signo >= (mayor o igual a). Esto es porque se quiere ver la lista de
aquellos empleados cuyos salarios son mayores o iguales a $50,000, listados todos
juntos. El resultado del comando anterior ser:
IDNOEMPLEADO
------------
010
105
152
215
244
La descripcin WHERE salario >= 50000, se conoce como una condicin, es decir,
una operacin la cual al evaluarse da verdadero o falso. Las condiciones se pueden
usar tambin para columnas de texto. Observe la siguiente sentencia:

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 115

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

SELECT idnoempleado FROM estadisticasdeempleados WHERE


posicion = 'Gerente';
Esta sentencia muestra los idnoempleado de todos los registros que cumplen con
posicion= 'Gerente'. Cualquier texto que aparezca en la sentencia debe estar
encerrado entre comillas simples ('). Note que el valor Gerente en la clusula WHERE
es sensible a las maysculas y minsculas (case sensitive) y por lo tanto, debe ser
comparado en la forma como est almacenado en la tabla.

11. Funciones Agregadas


Las funciones agregadas, tambin conocidas como funciones de grupo, se usan en
sentencias SQL para trabajar sobre conjuntos o grupos especficos de filas.

A continuacin se presentan las cinco funciones agregadas ms importantes:


SUM
AVG
MAX
MIN
COUNT
A continuacin algunos ejemplos que ilustran el uso de las funciones agregadas en una
sentencia SQL.

La Funcin SUM
SELECT SUM(salario) FROM estadisticasdeempleados;
La consulta anterior retorna el salario total de todos los empleados de la tabla. El
resultado de la consulta es:
1___
455000

La Funcin AVG
SELECT AVG(salario) FROM estadisticasdeempleados;
La consulta retorna el salario promedio de los empleados listados en la tabla. El
resultado es:
1___
50555

La Funcin MIN
SELECT MIN(beneficios) FROM estadisticasdeempleados WHERE
posicion = 'Gerente';

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 116
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

La funcin MIN toma el nombre de la columna e identifica el valor mnimo disponible en


esa columna para las filas que satisfacen una condicin, si es dada. En la consulta
anterior, la clusula WHERE limita las filas a los empleados que son 'Gerente'. La
funcin MIN identifica el mnimo beneficio ganado por un Gerente. La consulta anterior
retorna el siguiente resultado:
1__
12500

La Funcin COUNT
SELECT COUNT(*) FROM estadisticasdeempleados
WHERE posicion = 'Personal';
La consulta cuenta el nmero de empleados que pertenecen a la posicin
'Personal'. En el ejemplo anterior, la funcin COUNT toma * como el nombre de una
columna. El * denota todas las columnas en la tabla. En este caso, se refiere a las filas
en la tabla que satisfacen la condicin dada.

El * se puede usar slo con la funcin COUNT y no con otras funciones agregadas.
Otras funciones agregadas toman los nombres de las columnas o expresiones como
entrada.

La consulta anterior retorna el siguiente resultado:


1
3
La funcin count slo contabiliza los registros donde la columna seleccionada tenga
valores distintos a null.

La Funcin MAX

La funcin MAX() retorna el mximo valor para una columna dada, entre el conjunto de
filas seleccionadas. Observe la siguiente sentencia.
SELECT MAX(SALARIO) FROM estadisticasdeempleados;
Esta consulta retorna el salario mximo ganado por un empleado listado en la tabla:
1__
75000

12. Condiciones Compuestas y Operadores Lgicos


El Operador AND

El operador AND une dos o ms condiciones y muestra todas las filas que satisfacen
todas las condiciones en la clusula WHERE. Por ejemplo, para mostrar todos los

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 117

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

empleados cuya posicin sea Personal y cuyo salario es mayor a $40,000, se puede
escribir la siguiente consulta:
SELECT idnoempleado FROM estadisticasdeempleados
WHERE salario > 40000 AND posicion = 'Personal';

El Operador OR

El operador OR une dos o ms condiciones. Muestra todas las filas que satisfacen al
menos una condicin en la clusula WHERE. Para mostrar todos los empleados que
ganan un salario menor que $40,000 que obtienen beneficios menores que $10,000,
se puede escribir la siguiente consulta:
SELECT idnoempleado FROM estadisticasdeempleados
WHERE salario < 40000 OR beneficios < 10000;

Combinar los Operadores AND y OR

Es posible combinar los operadores AND y OR en una sola sentencia. Por ejemplo, para
listar todos los Gerente que ganan un salario mayor que $60,000 o que obtienen
beneficios mayores que $12,000, se puede escribir la siguiente consulta:
SELECT idnoempleado FROM estadisticasdeempleados
WHERE posicion = 'Gerente' AND salario > 60000 OR
beneficios > 12000;
La sentencia SQL anterior usa los operadores AND y OR. El orden de precedencia es
importante en este caso. En este caso, el operador AND precede al operador OR por lo
que las condiciones con el operador AND se evalan primero y luego se evalan las
condiciones con el operador OR.

El orden en el cual la sentencia SQL anterior se ejecuta es el siguiente:


posicion = 'Gerente' AND salario > 60000 = X
X OR beneficios > 12000
Paso 1: Limita las filas a las personas que son gerente y ganan un salario mayor que
$60,000.
Paso 2: Limita las filas a las personas del Paso 1 o las personas que tienen beneficios
mayor que $12,000.
La sentencia SQL anterior puede ser tambin escrita de la siguiente forma:
SELECT idnoempleado FROM estadisticasdeempleados
WHERE (posicion = 'Gerente' AND salario > 60000) OR
beneficios > 12000;
Las condiciones que estn entre parntesis se evalan primero. Estos sobreescriben
cualquier orden de precedencia.

Ahora observe la siguiente consulta y descubra lo que hace:

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 118
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

SELECT idnoempleado FROM estadisticasdeempleados


WHERE posicion = 'Gerente' AND (salario > 60000 OR
beneficios > 12000);
Como se mencion anteriormente, las condiciones entre parntesis se evalan primero,
y luego las otras condiciones. Los pasos involucrados en la evaluacin de la consulta
anterior son los siguientes:
salario > 60000 OR beneficios > 12000 = X
WHERE posicion = 'Gerente' AND X
Paso 1: Identifique las filas de las personas que ganan un salario mayor que $60,000 o
beneficios mayores que $12,000.

Paso 2: Identifique las personas que son gerente y que satisfacen el Paso 1.

El Operador IN

El operador IN se usa para realizar comparaciones con una lista de valores. Por
ejemplo, observe la siguiente consulta:
SELECT idnoempleado FROM estadisticasdeempleados
WHERE posicion='Gerente' OR posicion= 'Personal';
La consulta lista todos los empleados que son gerente o del personal. La consulta se
puede escribir usando un operador IN.
SELECT idnoempleado FROM estadisticasdeempleados
WHERE posicion IN ('Gerente', 'Personal');
En la consulta anterior, mencionan las posiciones de los empleados en los que se est
interesado como un conjunto de valores que tienen que ser comparados. Los valores
estn separados por comas y encerrados entre parntesis despus del operador IN.

El operador IN verifica si la condicin satisface alguno de los valores que estn entre
parntesis.

El Operador BETWEEN

El operador BETWEEN se usa para comprobar si cierto valor est dentro de un rango
dado.

Por ejemplo, asuma que se est interesado en encontrar a todos los empleados que
ganan salarios dentro un rango de [$30,000 a $50,000]. Cmo se escribe esta
consulta?
Rango del salario [30000 a 50000]
SELECT idnoempleado FROM estadisticasdeempleados
WHERE salario >= 30000 AND salario <= 50000;
La consulta anterior se puede escribir tambin usando el operador BETWEEN.
Lenguaje de Consulta Estructurado
Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 119

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

SELECT idnoempleado FROM estadisticasdeempleados


WHERE salario BETWEEN 30000 AND 50000;
El operador BETWEEN incluye los valores de $30000 y $50000.

El Operador NOT

En el ejemplo anterior, si se est interesado en listar todos los empleados que no ganan
un salario de $30,000 a $50,000, se puede escribir la siguiente consulta:
SELECT idnoempleado FROM estadisticasdeempleados
WHERE salario NOT BETWEEN 30000 AND 50000;
La siguiente consulta lista todos los empleados que no son gerente.
SELECT idnoempleado FROM estadisticasdeempleados
WHERE posicion NOT IN ('Gerente');
El operador NOT es un operador unario (evala una condicin, invirtiendo su valor),
mientras que los operadores AND y OR evalan dos condiciones.

Orden de Precedencia para los Operadores Lgicos

El orden de precedencia para los operadores lgicos se muestra a continuacin. El


operador NOT tiene mayor precedencia que los operadores AND y OR.
NOT
AND
OR
El Operador LIKE

El operador LIKE se usa para verificar patrones dentro de cadenas de caracteres,


compararlos y mostrar los resultados.

Por ejemplo, suponga que se quieren listar todos los empleados cuyos apellidos
comienzan con S. Se puede escribir la siguiente consulta:
SELECT nombre, apellido FROM direcciondeempleado WHERE
apellido LIKE 'S%';
El signo de porcentaje (%) se usa para representar cero o ms caracteres. En el
ejemplo anterior, S% especifica cualquier nombre que comience con S, seguido de
cero o ms caracteres. Para listar aquellas personas cuyos apellidos terminen en S, se
usa %S, que especifica cualquier nombre que termine con S, precedido de cero o ms
caracteres.

Para encontrar personas cuyos apellidos contengan S, se escribe %S%. Esto


especifica cualquier nombre que contenga S precedido o seguido de cero o ms
caracteres.

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 120
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Asuma que alguien est interesado en listar los empleados que tienen una S como la
tercera letra en sus apellidos. En ese caso, se usa __S%. El _ indica un carcter no
conocido.

En el ejemplo anterior, los dos caracteres no conocidos estn seguidos por una S, y
luego estn seguidos de cero o ms caracteres (%).

El Operador de Concatenacin

El operador de concatenacin se usa para combinar dos cadenas de caracteres o dos


campos (del tipo cadena de caracteres). El operador se denota por CONCAT().

Si se quiere saber el nombre completo de un empleado, se debe concatenar el nombre


y el apellido del empleado.

Se puede usar la siguiente consulta para esto:


SELECT CONCAT (nombre,.,apellido) FROM
direcciondeempleado;

1
-------------------------------
Mike.Dennis
Susan.Ikelar
Rob.Heimann
Sarah.Connors
En la consulta anterior, entre los valores de las columnas, se ha concatenado un signo
punto que separa el nombre y el apellido.

13. Alias de los Nombres de Columnas


A los nombres de las columnas se les puede asignar un alias. Por ejemplo, en la
consulta de concatenacin anterior, el nombre de la columna es extrao. Si la consulta
se escribe de la siguiente manera, el nombre de la columna se visualizar mucho mejor.
SELECT CONCAT (nombre,.,apellido) AS Nombre Completo
FROM direcciondeempleado;

Nombre Completo
-------------------------------
Mike.Dennis
Susan.Ikelar
Rob.Heimann
Sarah.Connors
Lenguaje de Consulta Estructurado
Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 121

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

El nuevo nombre, en este caso, se denomina un alias. La consulta anterior puede ser
escrita tambin sin la palabra AS.
SELECT CONCAT (nombre,.,apellido) Nombre Completo
FROM direcciondeempleado;

14. La Clusula ORDER BY


La clusula ORDER BY se usa para dar formato a la salida basndose en un campo y
en un cierto orden, el cual puede ser descendente o ascendente. Por defecto, la
clusula ORDER BY lista los datos de la columna en orden ascendente.
SELECT * FROM estadisticasdeempleados ORDER BY salario;
La consulta anterior lista los empleados en el orden ascendente de los valores de la
columna salario, ya que no se utiliz la palabra ASC ni la palabra DESC.
SELECT * FROM estadisticasdeempleados ORDER BY salario
ASC;
La consulta anterior lista los empleados en el orden ascendente de los valores de la
columna salario. El empleado que tenga el salario ms bajo ocupar el primer
registro en el resultado.
SELECT * FROM estadisticasdeempleados ORDER BY salario
DESC;
La consulta anterior lista los empleados en el orden descendente de los valores de la
columna salario. El empleado que tenga el salario ms alto ocupar el primer registro
en el resultado.

La clusula ORDER BY se puede usar para mltiples columnas, tal como se muestra a
continuacin:
SELECT * FROM estadisticasdeempleados
ORDER BY posicion ASC, salario DESC;
La consulta anterior lista los empleados en orden ascendente de la posicin de trabajo.
Dentro de una posicin, los empleados se listan en orden descendente de la columna
salario.

15. Manejo de Valores NULOS (Null)


Null se usa bsicamente cuando el campo escogido no tiene un valor conocido
vlido.
Null evala a s mismo en cualquier expresin 4 + NULL * 2 = NULL,
Cuando en una definicin se indica que un campo es NOT NULL, implica que el
campo debe tener un valor vlido.
El valor NULL no puede ser chequeado usando una ecuacin aritmtica con el
signo =. Slo puede ser chequeado usando el operador IS.
Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos
Lenguaje de Consulta Estructurado 122
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Observe la siguiente consulta.


SELECT * FROM estadisticasdeempleados WHERE beneficios IS
NULL;

La consulta muestra todos los empleados que no tienen monto alguno por beneficios.
Estos registros de los empleados no tienen ningn valor en la columna beneficios.
SELECT * FROM estadisticasdeempleados WHERE beneficios IS
NOT NULL;
La consulta anterior muestra todos los empleados a quienes se le ha asignado un
monto por beneficios.

16. La Clusula DISTINCT


Si se necesita encontrar una lista nica de posiciones disponibles en la tabla
estadisticasdeempleados, se puede ejecutar la siguiente consulta:
SELECT DISTINCT posicion FROM estadisticasdeempleados;
posicion
----------
Gerente
Personal
Principiante
Esta consulta no muestra los valores ms de una vez, independientemente de que
estn duplicados en la tabla. La clusula distinct lista filas nicas.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 123

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de:

Explicar qu es SQL.
Discutir sobre DDL, DML y DCL.
Escribir una sentencia Select simple y una sentencia SELECT condicional.
Explicar el uso de las funciones agregadas.
Listar los operadores lgicos y el orden de precedencia.
Discutir sobre los operadores usados en las sentencias SELECT.

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 124
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Unidad 1: Examen de Autoevaluacin


1) Cul de los siguientes lenguajes es el estndar utilizado para hacer consultas a
una base de datos relacional?
a) C
b) Cualquier lenguaje de programacin
c) Java
d) SQL

2) ____________ es el lenguaje que se usa para controlar el acceso de datos.


a) DML
b) DDL
c) DCL
d) DLL

3) La clusula ____________ se usa para condicionar los datos que se mostrarn en


una consulta.
a) INSERT
b) FROM
c) ORDER BY
d) WHERE

4) Cules de las siguientes son funciones agregadas?


a) SUM
b) MAX
c) MIN
d) AVG
e) COUNT

5) Cul de los siguientes operadores tiene mayor precedencia?


a) AND
b) NOT
c) Ambos tienen igual precedencia.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 125

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

6) Cul de los siguientes operadores puede ser usado en vez del operador OR
cuando hay conjuntos de valores que necesitan ser comparados?
a) LIKE
b) AND
c) IN
d) Ninguna de las anteriores

7) Cul de los siguientes operadores se usa para verificar un patrn dentro de


cadenas de caracteres?
a) LIKE
b) AND
c) OR
d) IN

8) El operador_______ se usa para concatenar dos cadenas de caracteres.


a) LIKE
b) AND
c) ||
d) IN

9) Qu indica el NULL?
a) 0
b) Espacio en blanco
c) Valor
d) Ningn valor

10) La clusula ____________ se usa para listar valores nicos (Filas nicas).
a) UNIQUE
b) DISTINCT
c) ORDER BY
d) SELECT

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 126
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Respuestas a la Unidad 1: Examen de Autoevaluacin


1) d
2) c
3) d
4) a, b, c, d y e
5) b
6) c
7) a
8) c
9) d
10) b

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 127

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Unidad 2: Lab. de Fundamentos de SQL


Objetivos de Aprendizaje
Al finalizar esta unidad, usted ser capaz de:

Utilizar la herramienta de interfaz de usuario para escribir consultas y obtener


datos de la base de datos.
Escribir sentencias SQL SELECT simples para obtener datos de la base de datos.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 129

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

Ejercicios de Laboratorio
Este laboratorio se puede llevar a cabo usando la herramienta de MySQL Lnea de
Comandos, disponibles en su laboratorio.

No. Herramientas SQL


1 Query Browser
2 Lnea de Comandos
Tabla 2.1: Herramientas SQL

Los Ejercicios 1 y 2 son para construir los datos para esta sesin de laboratorio.

Ejercicio 1:

1) Invoque la herramienta SQL.

2) Conctese a la base de datos apropiada.

Se necesita crear una estructura de tabla para almacenar datos. Ejecute la siguiente
sentencia SQL para crear la tabla empleado. Esta tabla ser usada en las futuras
sesiones de prctica.
CREATE TABLE empleado(
noemp VARCHAR(6) NOT NULL PRIMARY KEY,
nombre VARCHAR(100),
apellido VARCHAR(100),
depart VARCHAR(50) NOT NULL,
fechacontr DATE,
trabajo VARCHAR(100),
salario REAL,
bonos REAL,
comis REAL
);
A continuacin inserte los datos dentro de la tabla empleado. La siguiente sentencia
INSERT debe ser ejecutada para insertar registros dentro de la tabla empleado.
INSERT INTO empleado VALUES
(000010,CHRISTINE,HAAS,A00,01/01/1965,PRES,527
50.00, 1000.00,4220.00);
El formato por defecto para las fechas es MM/DD/YYYY.
Inserte ms registros dentro de la tabla empleado. Los registros que son insertados
estn disponibles en un formato tabular. Ejecute la sentencia INSERT anterior hasta
que la tabla empleado contenga estos valores.

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 130
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

NOEMP NOMBRE APELLIDO DEPART FECHCONTR TRABAJO SALARIO BONOS


COMIS
000010 CHRISTINE HAAS A00 01/01/1965 PRES 52750.00 1000.00
4220.00
000020 MICHAEL THOMPSON B01 10/10/1973 GEREN 41250.00 800.00
3300.00
000030 SALLY KWAN C01 04/05/1975 GEREN 38250.00 800.00
3060.00
000050 JOHN GEYER E01 08/17/1949 GEREN 40175.00 800.00
3214.00
000060 IRVING STERN D11 09/14/1973 GEREN 32250.00 500.00
2580.00
000070 EVA PULASKI D21 09/30/1980 GEREN 36170.00 700.00
2893.00
000090 EILEEN HENDERSON E11 08/15/1970 GEREN 29750.00 600.00
2380.00
000100 THEODORE SPENSER E21 06/19/1980 GEREN 26150.00 500.00
2092.00
000110 VINCENZOLUCCHESSI A00 05/16/1958 REPVTA 46500.00 900.00
3720.00
000120 SEAN O'CONNELL A00 12/05/1963 CLERK 29250.00 600.00
2340.00
000130 DOLORES QUINTANA C01 07/28/1971 ANALIST 23800.00 500.00
1904.00
000140 HEATHER NICHOLLS C01 12/15/1976 ANALIST 28420.00 600.00
2274.00
000150 BRUCE ADAMSON D11 02/12/1972 DSDOR 28280.00 500.00
2022.00
000160 ELIZABETH PIANKA D11 10/11/1977 DSDOR 22250.00 400.00
1780.00
000170 MASATOSHIYOSHIMURA D1109/15/1978 DSDOR 24680.00 500.00
1974.00
000180 MARILYN SCOUTTEN D11 07/07/1973 DSDOR 21340.00 500.00
1707.00
000190 JA WA D11 07/26/1974 DSDOR 20450.00 400.00
1636.00
000200 DAVID BROWN D11 03/03/1966 DSDOR 27740.00 600.00
2217.00
000210 WILLIAM HEIMANN D11 04/11/1979 DSDOR 18270.00 400.00
1462.00
000220 JENNIFER LUTZ D11 08/29/1968 DSDOR 29840.00 600.00
2387.00
000230 JAMES JEFFERSON D21 11/21/1966 CLERK 22180.00 400.00
1774.00
000240 SALVATOR MARINO D21 12/05/1979 CLERK 28760.00 600.00
2301.00
000250 DANIEL DENNIS D21 10/30/1969 CLERK 19180.00 400.00
1534.00
000260 SYBIL JOHNSON D21 09/11/1975 CLERK 17250.00 300.00
Lenguaje de Consulta Estructurado
Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 131

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

1380.00
000270 MARIA PEREZ D21 09/30/1980 CLERK 27380.00 500.00
2190.00
000280 ETHEL SCHNEIDER E11 03/24/1967 OPDOR 26250.00 500.00
2100.00
000290 JOHN PARKER E11 05/30/1980 OPDOR 15340.00 300.00
1227.00
000300 PHILIP DENNIS E11 06/19/1972 OPDOR 17750.00 400.00
1420.00
000310 MAUDE SETRIGHT E11 09/12/1964 OPDOR 15900.00 300.00
1272.00
000320 RAMLAL MEHTA E21 07/07/1965 REPCAMP 19950.00 400.00
1596.00
000330 WING LEE E21 02/23/1976 REPCAMP 25370.00 500.00
2030.00
000340 JASON GOUNOT E21 05/05/1947 REPCAMP 23840.00 500.00
1907.00
Leyenda: GEREN: GERENTE; REPVTA: REP VENTAS; OPDOR: OPERADOR;
REPCAMP: REP CAMPO; DSDOR: DISEADOR

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 132
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Ejercicio 2:
1) La siguiente sentencia SQL se ejecutar exitosamente?
SELECT * FROM empleado;
Nota: La sentencia SQL anterior contiene muchos espacios en blanco entre las
palabras.
2) Identifique al menos tres errores en la siguiente sentencia.
SELECT noemp, nombre salario x 12 ANNUAL SALARY FROM
empleado;
3) Seleccione todos los datos de la tabla empleado.

Nota: Incluya todas las columnas de la tabla. Obtenga todos los registros.

4) Escriba una consulta que liste slo una ocurrencia de los trabajos de la tabla
empleado. Un resultado posible es:
Trabajo
PRES
ANALYST
MNGER
....
5) Liste el nmero del empleado y la fecha de contrato de la tabla empleado.
Nombre las cabeceras de las columnas como Nmero del Empleado y Fecha
de CONTRATO. Un resultado posible es:
Nmero del Empleado Fecha de CONTRATO
000010 01/01/1965
000020 10/10/1973
000030 04/05/1975
.... ....
6) Muestre el nombre completo de los empleados, concatenando el nombre con el
apellido, separado por un espacio en blanco. El ttulo de la columna debe ser
Nombre del Empleado. Un resultado posible es:
Nombre del Empleado
CHRISTINE HAAS
MICHAEL THOMPSON
....
7) Escriba una consulta para mostrar el nombre completo y el salario de todos los
empleados que ganan ms de $20,000. Un resultado posible es:

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 133

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

Nombre del Empleado Salario


CHRISTINE HAAS 52750.00
MICHAEL THOMPSON 41250.00
.... .... ....
8) Escriba una consulta para mostrar el nombre completo y el trabajo para el
empleado nmero 000020. Un resultado posible es:
Nombre del Empleado TRABAJO
MICHAEL THOMPSON GEREN
.... .... ....
9) Escriba una consulta para mostrar el nombre y el salario de todos los empleados
cuyos salarios estn en el rango de $20,000 y $24,000. Un posible resultado es:
NOMBRE SALARIO
DOLORES 23800.00
ELIZABETH 22250.00
.... ....
10) Escriba una consulta para mostrar el nombre, el trabajo y la fecha de contrato de
los empleados contratados entre Marzo 20 1969 y Abril 15 1985. Ordene la
consulta en orden ascendente segn la fecha de contrato. Un resultado posible es:
NOMBRE TRABAJO FECHCONTR
DANIEL CLERK 10/30/1969
EILEEN GERENTE 08/15/1970
.... .... ....
11) Escriba una consulta para mostrar el nombre y el nmero del departamento de
todos los empleados que estn en los departamentos C01 y E01, ordenado
alfabticamente por el nombre. Un resultado posible es:
NOMBRE DEPART
DOLORES C01
HEATHER C01
.... ...
12) Muestre el nombre y la fecha de contrato de cada empleado que tiene una
comisin. Un resultado posible es:
NOMBRE FECHCONTR
CHRISTINE 01/01/1965
MICHAEL 10/10/1973
.... ....
13) Muestre el nombre, el salario y la comisin para todos los empleados. Ordene
los datos en forma descendente segn el salario y la comisin. Un resultado
posible es:

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 134
Copyright IBM Corp. 2007
Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

NOMBRE SALARIO COMISION


CHRISTINE 52750.00 4220.00
MICHAEL 41250.00 3300.00
.... .... ....
14) Muestre el nombre de todos los empleados en donde la tercera letra de sus
nombres sea C. Un resultado posible es:
NOMBRE
MICHAEL
....

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 135

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Unidad 3: SQL Avanzado


Objetivos de Aprendizaje
Al finalizar esta unidad, usted ser capaz de:

Entender las diferentes operaciones con JOIN.


Comprender el uso de las clusulas GROUP BY y HAVING.
Explicar cmo escribir subconsultas.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 137

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

1. Introduccin
Esta unidad se enfoca sobre los conceptos involucrados en el uso de SQL para la
seleccin avanzada de datos. En la unidad 1 de este volumen, se aprendi a escribir
sentencias SELECT simples para obtener datos de slo una tabla. Pero cuando se
escriben aplicaciones de base de datos del mundo real para obtener informacin
relevante, los datos tienen que ser recuperados de ms de una tabla.

Antes de entrar en detalle en las consultas avanzadas se introducen los conceptos


bsicos involucrados en relacionar datos entre diferentes tablas.

2. Clave Primaria
La clave primaria es una columna de una tabla, la cual se usa para identificar un registro
en la tabla. Para que un campo sea una clave primaria, su valor debe ser NOT NULL y
debe ser nico. El campo debe tener un valor vlido, el cual debe ser completamente
diferente de los otros valores.

Una tabla puede tener slo una clave primaria, sta tambin puede ser una clave
compuesta, donde ms de una columna se combinan para actuar como la clave
primaria. Las columnas individuales de la clave primaria compuesta deben tener valores
vlidos. La combinacin de las columnas de la clave compuesta debe ser nica.

3. Clave Fornea
La clave fornea es una columna en una tabla cuyos valores son dependientes de los
valores existentes en otras tablas.

Una columna se denomina una clave fornea slo si se refiere a una columna de la
clave primaria de otra tabla. Una restriccin definida entre una clave fornea y una clave
primaria se llama restriccin de integridad referencial.

La tabla que contiene la clave primaria a la cual hace referencia la clave fornea, se
denomina tabla padre. La tabla que contiene la clave fornea se denomina tabla hija.
Los valores permitidos en una columna de clave fornea son valores de las columnas a
las que referencian o son valores nulos.

La clave primaria desempea un papel importante al hacer cumplir las restricciones de


integridad referencial. Se discuten estas restricciones en la unidad Crear y Administrar
Objetos de la Base de Datos.

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 138

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

4. Relacin Padre-Hijo
Se explica a continuacin con un ejemplo la relacin entre una tabla padre y una tabla
hijo. Observe las Tablas 3.1 y 3.2.

La Tabla 3.1 Personal contiene informacin sobre el personal que trabaja en una
universidad, mientras que la Tabla 3.2 Division contiene informacin sobre los
distintos departamentos de la universidad.

Cada miembro del personal est asociado con un departamento. Esta informacin est
disponible en la Tabla Personal (columna no_division). Esta columna debe
contener valores vlidos. Los valores vlidos son aquellos valores, los cuales se listan
en la Tabla Division. Si un miembro del personal no est asociado con una divisin
por un periodo de tiempo, el valor vlido para el miembro es tener NULL en la tabla
Personal.

La columna no_personal es la clave primaria en la tabla Personal.


La columna no_division es la clave primaria en la tabla Division.
La columna no_division en la tabla Personal es la clave fornea, la cual
hace referencia a la clave primaria en la tabla Division.
Por lo tanto, la tabla Division es la tabla padre y la tabla Personal es la
tabla hija.
Personal
no_personal nombre_personal designacion Salario no_division

Tabla 3.1: Tabla Personal

Divisin
no_division nombre_division ubicacion

Tabla 3.2: Tabla Division

5. La Condicin para el JOIN


Los datos estn distribuidos en diferentes tablas debido a la normalizacin. La
normalizacin se realiza para evitar la redundancia y para integrar los datos
almacenados en distintas tablas. Cuando el usuario quiere obtener informacin
completa consultando ms de una tabla, debe JOIN (UNIR) los datos de las distintas
tablas.

Las sentencias SELECT de SQL que obtienen y combinan datos de mltiples tablas
son llamadas JOINS.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 139

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

Un JOIN ayuda a vincular dos o ms tablas a travs de un valor de un atributo en


comn en estas tablas. Existen muchos tipos de JOINS los cuales se lista a
continuacin:
Cartesian
Natural/Equi (INNER)
Right Outer
Left Outer
Full Outer
Self
Estos JOINs sern explicados a continuacin con la ayuda de las Tablas 3.3 y 3.4.
Nombre_programa no_curso nota
Software Systems SS G211 6
Computer Science CS G311 5
Information Systems IS G411 4
E-Commerce EC G511 6
M-Commerce MC G611 5

Tabla 3.3: Tabla Programa


nombre_estudiante no_curso
John SS G211
Robert CS G311
Samuel MC G611
Joseph IS G511
David CS G411
Gary EC G211
Tabla 3.4: Tabla Estudiante

La Sentencia Cartesian JOIN

La sentencia Cartesian JOIN hace corresponder todas las filas de la primera tabla con
todas las filas de la segunda tabla y presenta una combinacin de todos los registros en
ambas tablas.

Al aplicar Cartesian JOIN entre la Tabla 3.3 y la Tabla 3.4 resultar en la Tabla 3.5 que
se muestra a continuacin:

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 140

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

nombre_programa no_curso nota nombre_estudiante no_curso


Software Systems SS G211 6 John SS G211
Computer Science CS G311 5 John SS G211
Information Systems IS G411 4 John SS G211
E-Commerce EC G511 6 John SS G211
M-Commerce MC G611 5 John SS G211
Software Systems SS G211 6 Robert CS G311
Computer Science CS G311 5 Robert CS G311
Information Systems IS G411 4 Robert CS G311
E-Commerce EC G511 6 Robert CS G311
M-Commerce MC G611 5 Robert CS G311
Software Systems SS G211 6 Samuel MC G611
Computer Science CS G311 5 Samuel MC G611
Information Systems IS G411 4 Samuel MC G611
E-Commerce EC G511 6 Samuel MC G611
M-Commerce MC G611 5 Samuel MC G611
Software Systems SS G211 6 Joseph IS G511
Computer Science CS G311 5 Joseph IS G511
Information Systems IS G411 4 Joseph IS G511
E-Commerce EC G511 6 Joseph IS G511
M-Commerce MC G611 5 Joseph IS G511
Software Systems SS G211 6 David CS G411
Computer Science CS G311 5 David CS G411
Information Systems IS G411 4 David CS G411
E-Commerce EC G511 6 David CS G411
M-Commerce MC G611 5 David CS G411
Software Systems SS G211 6 Gary EC G211
Computer Science CS G311 5 Gary EC G211
Information Systems IS G411 4 Gary EC G211
E-Commerce EC G511 6 Gary EC G211
M-Commerce MC G611 5 Gary EC G211
Tabla 3.5: JOIN del tipo Cartesian

La siguiente consulta SQL ilustra el Cartesian JOIN:


SELECT programa.nombre_programa, programa.no_curso,
programa.nota,estudiante.nombre_estudiante,estudiante.no_c
urso FROM programa, estudiante;
Nota: La consulta anterior no tiene una clusula WHERE y por lo tanto no hay
equivalencia basada en valores. Los datos de ambas tablas se muestran como un
producto Cartesiano.

La Sentencia Natural / Equi JOIN (INNER JOIN)

La sentencia Natural / Equi de JOIN hace corresponder los registros de la primera tabla
con los de la segunda tabla, basndose en la igualdad de los valores especificados en

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 141

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

la condicin JOIN. Por lo que slo los registros que tengan una correspondencia exacta
sern extrados de ambas tablas.

Al aplicar una sentencia Natural / Equi JOIN entre la Tabla 3.3 y la Tabla 3.4 dar como
resultado la Tabla 3.6 que se muestra a continuacin:
Nombre_programa no_curso nota nombre_estudiante
Software Systems SS G211 6 John
Computer Science CS G311 5 Robert
M-Commerce MC G611 5 Samuel
Tabla 3.6: JOIN del tipo Equi

La siguiente consulta SQL ilustra el Natural/Equi JOIN (INNER JOIN):


SELECT programa.nombre_programa, programa.no_curso,
programa.nota, estudiante.nombre_estudiante
FROM programa, estudiante
WHERE programa.no_curso=estudiante.no_curso;
La consulta anterior tiene una clusula WHERE que verifica la igualdad de los valores de
las columnas no_curso de las dos tablas. Las columnas no_curso son identificadas
con el respectivo nombre de tabla para evitar ambigedad. Si los nombres de las
columnas no estn identificados, puede ocurrir un error de ejecucin SQL.

Otra manera de especificar la consulta Natural/Equi JOIN (INNER JOIN) es:


SELECT programa.nombre_programa, programa.no_curso,
programa.nota, estudiante.nombre_estudiante
FROM programa INNER JOIN estudiante
ON programa.no_curso=estudiante.no_curso;

La Sentencia Right Outer JOIN

La sentencia Right Outer JOIN hace corresponder los registros en la primera tabla con
los de la segunda tabla, basndose en la igualdad de valores que se especifica en la
condicin JOIN. Adems, tambin incluye aquellos registros presentes en la segunda
tabla que no estn asociados con los registros de la primera tabla. Para las columnas
de la primera tabla no asociadas, se muestra el valor NULL.

Este tipo de JOIN es llamado Right Outer JOIN porque el valor de la columna de la
tabla del lado derecho es la base con la cual la comparacin y la operacin JOIN se
realiza. Si no hay valor asociado, se muestra el valor NULL.

Los valores de la segunda tabla (la tabla derecha), que estn presentes y no tienen
correspondencia con los registros de la primera tabla, mostrarn NULL. La aplicacin
del Right Outer JOIN entre la Tabla 3.3 y Tabla 3.4 dar como resultado Tabla 3.7 que
se presenta a continuacin:

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 142

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

nombre_programa no_curso nota nombre_estudiante no_curso


Software Systems SS G211 6 John SS G211
Computer Science CS G311 5 Robert CS G311
M-Commerce MC G611 5 Samuel MC G611
NULL NULL NULL Joseph IS G511
NULL NULL NULL David CS G411
NULL NULL NULL Gary EC G211
Tabla 3.7: Right Outer Join

La siguiente consulta SQL ilustra el RIGHT OUTER JOIN:


SELECT programa.nombre_programa, programa.no_curso,
programa.nota,
estudiante.nombre_estudiante,estudiante.no_curso FROM
programa
RIGHT OUTER JOIN estudiante
ON programa.no_curso=estudiante.no_curso;

La Sentencia Left Outer JOIN

La sentencia Left Outer JOIN hace corresponder los registros de la primera tabla con
los de la segunda tabla, basndose en la igualdad de valores que es especificada en la
condicin JOIN. Adems, tambin incluye aquellos registros presentes en la primera
tabla, que no estn asociados con los registros de la segunda tabla. Para las columnas
de la segunda tabla no asociadas, se muestra el valor NULL.

Este tipo de JOIN es llamado Left Outer JOIN porque el valor de la columna de la tabla
del lado izquierdo es la base con la cual la comparacin y la operacin JOIN se realiza.
Para hacer la correspondencia de los registros de la segunda tabla, si no se puede
realizar la equivalencia de los valores, se muestra un valor NULL. Al aplicar un Left
Outer JOIN entre la Tabla 3.3 y la Tabla 3.4 resultar en la Tabla 3.8.

nombre_programa no_curso Nota nombre_estudiante no_curso


Software Systems SS G211 6 John SS G211
Computer Science CS G311 5 Robert CS G311
Information Systems IS G411 4 NULL NULL
E-Commerce EC G511 6 NULL NULL
M-Commerce MC G611 5 Samuel MC G611

Tabla 3.8: Left Outer Join

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 143

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

La siguiente consulta SQL ilustra el LEFT OUTER JOIN:


SELECT programa.nombre_programa, programa.no_curso,
programa.nota, estudiante.nombre_ estudiante,estudiante.no_curso
FROM programa
LEFT OUTER JOIN estudiante
ON programa.no_curso=estudiante.no_curso;

La Sentencia Full Outer JOIN

La sentencia Full Outer JOIN hace corresponder los registros de la primera tabla con
los de la segunda tabla, basndose en la igualdad de los valores especificados en la
condicin JOIN. Este tipo de JOIN es una combinacin de RIGHT OUTER JOIN y
LEFT OUTER JOIN. ste se ocupa de todos los registros que no satisfacen la
equivalencia entre los valores. Los valores de cualquiera de estas tablas se mostrarn
como NULL si la igualdad de los valores no tiene xito.

Este tipo de JOIN es llamado FULL OUTER JOIN porque primero el valor de la
columna de la tabla del lado izquierdo se toma como la base para hacer la comparacin,
luego la tabla del lado derecho se toma como la base para hacer la comparacin (Esta
sentencia no es soportada en MYSQL).

La aplicacin del FULL OUTER JOIN entre la Tabla 3.3 y la Tabla 3.4 da como
resultado la Tabla 3.9.

nombre_programa no_curso nota nombre_estudiante no_curso


Software Systems SS G211 6 John SS G211
Computer Science CS G311 5 Robert CS G311
M-Commerce MC G611 5 Samuel MC G611
Information Systems IS G411 4 NULL NULL
E-Commerce EC G511 6 NULL NULL
NULL NULL NULL Joseph IS G511
NULL NULL NULL David CS G411
NULL NULL NULL Gary EC G211

Tabla 3.9: Full Outer Join

La siguiente consulta SQL ilustra el FULL OUTER JOIN.


SELECT programa.nombre_programa, programa.no_curso,
programa.nota, estudiante.nombre_estudiante,
estudiante.no_curso FROM programa
FULL OUTER JOIN estudiante
ON programa.no_curso = estudiante.no_curso;

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 144

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

La Sentencia Self JOIN

Por definicin, un JOIN se aplica entre los valores de atributos comunes de dos tablas o
ms. En el caso de una tabla que tiene dos atributos, los cuales comparten el mismo
valor, un JOIN puede ser realizado en la misma tabla.

Observe la Tabla 3.10 llamada Personal, la cual contiene los campos no_personal,
nombre y no_gerente del gerente a quien reporta el personal.

Pero, Dnde se puede encontrar informacin sobre el gerente en esta tabla? Esta
informacin est disponible en la misma tabla. El nmero listado debajo de la columna
no_gerente contiene el no_personal del gerente que corresponde al empleado. Si
se busca en la tabla con este nmero en la columna no_personal, se puede obtener
el nombre del gerente.
No_personal nombre no_gerente
1000 Andrew 600
2000 Raymond 400
3000 Mathew 200
200 Johnson
400 George
600 Tom
Tabla 3.10: Tabla Personal

Por lo tanto, para obtener el nombre del personal junto con el nombre del gerente, un
Self JOIN tiene que ser aplicado sobre la tabla Personal.

Cuando un Self JOIN se aplica sobre la Tabla Personal, el resultado ser el que se
muestra en la Tabla 3.11.
Nombre nombre_gerente
Andrew Tom
Raymond George
Mathew Johnson
Tabla 3.11: Resultado de Aplicar el SELF JOIN

La siguiente consulta SQL ilustra el uso de Self JOIN:


SELECT S.nombre, M.nombre
FROM personal S, personal M
WHERE S.no_gerente = M.no_personal;
Aqu, hay dos copias de la misma tabla llamada Personal y los alias S y M se usan
para la tabla. La consulta tambin comprueba si hay igualdad entre el no_personal y
el no_gerente, el cual no es otra cosa que el no_personal en otra copia.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 145

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

6. Extender una Consulta Simple a un JOIN


Asuma que hay una casa de campo que proporciona cuartos a sus clientes. Un cliente
puede reservar un cuarto con anticipacin. Dos tablas, la tabla Reservaciones y la
tabla Cuartos, han sido diseadas para el sistema.

La tabla Reservaciones contiene informacin sobre cundo el cuarto est reservado,


quin lo reserv y cundo podr estar disponible para rentarlo otra vez, etc. La tabla
Cuartos contiene el nombre del cuarto, la ubicacin del cuarto y otros detalles
especficos del cuarto.

La siguiente consulta mostrar los detalles de la reservacin para el id_usuario 37.


SELECT id_cuarto, hora_inicio, hora_fin
FROM reservaciones
WHERE id_usuario = 37;
La tabla Reservaciones contiene solo el id_cuarto. No tiene el nombre del cuarto
ni la ubicacin del cuarto. El nombre del cuarto y la ubicacin estn en la tabla
Cuartos. Esta informacin tambin debe ser obtenida. Este proceso involucra obtener
datos de las dos tablas. Se deben seguir los siguientes pasos para escribir una
operacin JOIN y obtener la informacin requerida.

Paso 1: Agregar la nueva tabla a la clusula FROM.


SELECT id_cuarto, hora_inicio, hora_fin
FROM reservaciones, cuartos
WHERE id_usuario = 37;
Cada fila en la tabla Cuartos se unir con cada fila de la tabla Reservaciones,
donde el id_usuario concuerda con el usuario registrado. Esto dar como resultado un
producto Cartesiano parcial, porque aunque la clusula WHERE estuviera incluida, no
existe la operacin JOIN de las dos tablas en dicha clusula.

Paso 2: Agregar otra condicin a la clusula WHERE.


SELECT id_cuarto, hora_inicio, hora_fin
FROM reservaciones, cuartos
WHERE id_usuario = 37
AND reservaciones.id_cuarto = cuartos.id_cuarto;
La consulta anterior produce un error de ejecucin SQL. El ejecutor SQL no sabr qu
id_cuarto est buscando el usuario, ya que el nombre de la columna no est
identificada por un nombre de tabla en la clusula select.

Paso 3: Buscar en columnas definidas ambiguamente.

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 146

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Las tablas Reservaciones y Cuartos contienen ambas una columna llamada


id_cuarto. Por lo que la columna id_cuarto en la lista del SELECT tiene que ser
prefijada con reservaciones.

Nota: Las columnas hora_inicio y hora_fin no necesitan ser prefijadas o


identificadas ya que estn presentes solamente en la tabla Reservaciones.
SELECT reservaciones.id_cuarto, hora_inicio, hora_fin
FROM reservaciones, cuartos
WHERE id_usuario = 37
AND reservaciones.id_cuarto = cuartos.id_cuarto;
Paso 4: Probar la consulta.

La consulta debe ser probada. Cuando se prueba, la consulta anterior funciona bien.
Puesto que el ejercicio era obtener los nombres de los cuartos junto con la ubicacin, el
nombre del cuarto y la ubicacin no fueron incluidos en la clusula SELECT.

Paso 5: Agregar nuevas columnas a la lista SELECT.

Finalmente, en esta etapa, las columnas nombre_cuarto y ubicacin se agregan a la


lista de columnas que se est consultando.
SELECT reservaciones.id_cuarto, hora_inicio, hora_fin,
cuartos.nombre_cuarto, cuartos.ubicacin
FROM reservaciones, cuartos
WHERE id_usuario = 37
AND reservaciones.id_cuarto = cuartos.id_cuarto;

7. La Clusula GROUP BY
En algunos casos, la salida de una sentencia SELECT requiere un agrupamiento lgico
de los datos existentes, basados sobre el valor de un atributo. Observe a las Tablas
3.12, 3.13 y 3.14.

Propietarioarticulos
idpropietario apellido nombre
01 Heimann Bill
02 Dennis Bob
15 Lawson Patricia
21 Akins Jane
50 Fowler Rob
Tabla 3.12: Propietarioarticulos

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 147

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

Pedidos
idpropietario articulopedido estado
02 Mesa NULL
02 Escritorio NULL
21 Silla NULL
15 Espejo NULL
Tabla 3.13: Pedidos

RelacionVentas
id_articulo idcomprador nombre_articulo
01 50 Cama
02 15 Mesa
15 02 Silla
21 50 Espejo
50 01 Escritorio
01 21 Armario
02 21 Mesita de Caf
15 50 Silla
01 15 Joyero
02 21 Artesania de barro
21 02 Estante para libro
50 01 Soporte para planta
Tabla 3.14: RelacionVentas

Artculos
id_articulo nombre_articulo precio_articulo
3 Cama 500000
5 Mesa 300000
7 Silla 100000
9 Espejo 80000
11 Escritorio 250000
13 Armario 400000
15 Mesita de Caf 75000
17 Joyero 30000
19 Artesania de barro 50000
21 Estante para libro 130000
23 Soporte para planta 90000
Tabla 3.15: Artculos
Para encontrar el nmero de artculos comprados por cada comprador, se debe escribir
una consulta que muestre los resultados de la siguiente manera.
idcomprador Productos
1 2
2 2
15 2
21 3
50 3
Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos
Lenguaje de Consulta Estructurado 148

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

El resultado lista conjuntos distintos de idcompradores y se muestra el nmero


correspondiente de artculos comprados.

En este ejemplo, se realiza una agrupacin lgica para cada comprador. Hay cinco
compradores distintos por lo que cinco conjuntos o agrupamientos de datos estn
disponibles. En cada agrupamiento o conjunto de datos, se aplica la funcin COUNT y se
obtiene el nmero de elementos para cada grupo.

La consulta se expresa como:


SELECT idcomprador, COUNT(nombre_articulo) AS Productos
FROM relacionventas GROUP BY idcomprador;
Un grupo puede ser especificado usando una clusula GROUP BY. Ms de una columna
puede ser incluida en la clusula GROUP BY. El agrupamiento ser hecho basado en las
columnas dadas despus de la clusula GROUP BY.
Observe la siguiente consulta:
SELECT COUNT(nombre_articulo) AS Productos
FROM relacionventas;
La consulta anterior funcionar aunque la clusula GROUP BY no est incluida porque
no hay otra columna en la lista del SELECT y por lo tanto la consulta asume que el
GROUP BY se aplica a toda la tabla, para todas las columnas de la tabla. Este cuenta el
nmero total de registros en la tabla en donde la columna producto no sea NULL y luego
muestra la cantidad.

8. La Clusula HAVING
En el ejemplo anterior, el Comprador 21 compr tres productos. Si se tiene que
encontrar los compradores que han comprado ms de dos productos, entonces se debe
introducir una condicin declarando que COUNT(producto)>2.

Pero una clusula WHERE no puede colocarse en esta condicin ya que la clusula
WHERE funciona en el momento de la seleccin misma. El count es obtenido despus de
la seleccin y el agrupamiento lgico. Por lo tanto, para introducir una condicin
despus de que se realiza un agrupamiento, se debe incluir una clusula llamada
HAVING.

La siguiente consulta ilustra el uso de la clusula Having:


SELECT idcomprador, COUNT(nombre_articulo) AS Productos
FROM relacionventas
GROUP BY idcomprador
HAVING COUNT(nombre_articulo) > 2;

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 149

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

9. Escribir Subconsultas
Una subconsulta (subquery) es una consulta dentro de una consulta. Es una sentencia
SELECT anidada dentro de otra sentencia SELECT. En el ejemplo anterior si se tuviera
que encontrar los productos comprados por Bob, se puede escribir la siguiente
consulta:
SELECT articulo
FROM relacionventas
WHERE idcomprador=(SELECT idpropietario
FROM propietarioarticulos
WHERE nombre=Bob);
La tabla Relacionventas no contiene el nombre del comprador. Contiene slo el
idcomprador. El nombre del comprador se encuentra en la tabla
Propietarioarticulos. En la consulta anterior, la consulta ms interna es
ejecutada primero, la cual retorna el valor de idcomprador. Luego, este valor es
comparado en la clusula WHERE de la consulta externa para obtener el resultado
deseado.

El operador = se puede usar en comparaciones con un solo valor. Si la consulta interna


del ejemplo anterior retorna ms de un idpropietario, lo cual es muy probable
debido a que puede haber ms de una persona cuyo nombre sea Bob, entonces la
consulta anterior dar como resultado un error SQL de ejecucin.

En esos casos, se usa el operador IN.


SELECT articulo FROM relacionventas
WHERE idcomprador
IN (SELECT idpropietario
FROM propietarioarticulos
WHERE nombre=Bob);
La consulta anterior obtendr todos los objetos comprados por personas cuyo nombre
sea Bob.

Las subconsultas pueden ser anidadas a niveles bastantes profundos. Se pueden


escribir dentro de otras subconsultas. El orden de ejecucin siempre ser desde la
subconsulta ms interna a la consulta padre ms externa.

Las subconsultas tambin se pueden escribir en sentencias UPDATE y DELETE. Por


ejemplo, cuando el estado de un pedido efectuado por Bob tiene que ser actualizado a
despachado, se tiene:
UPDATE pedidos
SET estado=Distribuido
WHERE idpropietario =(SELECT idpropietario
FROM propietarioarticulos
WHERE nombre=Bob);

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 150

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Si todos los pedidos hechos por Bob van a ser eliminados, entonces se escribe la
siguiente consulta:
DELETE FROM pedidos
WHERE idpropietario =(SELECT idpropietario
FROM propietarioarticulos
WHERE nombre=Bob);
Hay dos tipos de subconsultas: correlacionada y no correlacionada.

Todos los ejemplos de subconsultas anteriores son subconsultas no correlacionadas.

Subconsulta Correlacionada

Se explica con un ejemplo la subconsulta correlacionada. Observe la siguiente


sentencia SQL:
SELECT articulos.precio_articulo
FROM articulos
WHERE EXISTS (SELECT nombre_articulo
FROM relacionventas WHERE
relacionventas.nombre_articulo =
articulos.nombre_articulo);
La consulta lista los precios de los articulos asociados a las ventas. La consulta anterior
contiene dos partes: la consulta padre y la consulta hijo. Las subconsultas
correlacionadas son consultas en las cuales la consulta hijo se refiere a la columna de
la consulta padre.

La consulta padre es:

SELECT articulos.precio_articulo FROM articulos

WHERE EXISTS;

La consulta hijo es:

SELECT nombre_articulo FROM relacionventas WHERE


relacionventas.nombre_articulo = articulos.nombre_articulo;

EXISTS es un operador que evala una sentencia SQL. Si la sentencia SQL retorna
filas, entonces la sentencia es evaluada como verdadera. Si la sentencia SQL no
retorna filas, entonces la sentencia es evaluada como falsa.

En el ejemplo anterior, la consulta hija es evaluada por el operador EXISTS. Por cada
fila retornada por la consulta padre, la consulta hijo es evaluada. Si la evaluacin da
como resultado verdadero, entonces se muestra la fila de la consulta padre.

Para cada artculo en la tabla articulos, si la tabla relacionventas contiene este artculo,
entonces el artculo tiene ventas asociadas con l y se muestra el precio del artculo.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 151

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

En el ejemplo anterior, articulos.nombre_articulo es la columna de la consulta


padre que est siendo utilizada por la consulta hijo.

Las subconsultas no correlacionadas son ejecutadas una vez por toda la sentencia,
mientras que las subconsultas correlacionadas son ejecutadas una vez por cada fila en
la consulta padre.

10. Operacin de Unin


Una operacin Unin es una operacin de conjunto (SET) que combina los resultados
de dos o ms consultas, elimina los registros duplicados y presenta el resultado.
Consideremos el ejemplo:
SELECT noemp,nombreempleado FROM departamentoventas
UNION
SELECT noemp,nombreempleado FROM departamentomarketing;
La consulta anterior busca informacin de todos los empleados que trabajan para los
departamentos de ventas o de marketing. Si un empleado trabaja para ambos
departamentos, su nombre se lista slo una vez. Se eliminan los duplicados. Mientras
se usa el operador UNION, las consultas pueden tener solamente columnas que tengan
el mismo tipo de datos, y estn mencionadas en el mismo orden.

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 152

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

Resumen

Ahora que ha completado esta unidad, usted debe ser capaz de:

Entender las diferentes operaciones con JOIN.


Comprender el uso de las clusulas GROUP BY y HAVING.
Explicar cmo escribir subconsultas.
Explicar la operacin UNION.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 153

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

Unidad 3: Examen de Autoevaluacin


1) Cul es el otro nombre para el Natural JOIN?
a) Equi JOIN
b) Outer JOIN
c) Self JOIN
d) Cartesian JOIN

2) El Full Outer JOIN es una combinacin de dos tipos de JOINs.Cules son?


a) Los Left y Right Outer JOIN
b) Los Top y Bottom Outer JOIN
c) Los Self y Cartesian JOIN
d) Ninguna de las anteriores

3) La funcin COUNT(nombre de columna) tambin cuenta los valores NULL en la


columna
a) Verdadero
b) Falso

4) La clusula HAVING es otro nombre para la clusula WHERE.


a) Verdadero
b) Falso

5) Las subconsultas no pueden ser anidadas


a) Verdadero
b) Falso

6) Dos tablas a las cuales se les aplica el Self JOIN son tablas diferentes con las
mismas columnas.
a) Verdadero
b) Falso

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 154

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I

7) Cul es el orden en el cual la subconsulta no correlacionada es ejecutada?


a) Desde la consulta ms interna a la consulta ms externa
b) Desde la consulta ms externa a la consulta ms interna
c) Desde la consulta simple a la consulta compleja
d) Desde la consulta compleja a la consulta simple

8) En cul de las siguientes sentencias se puede usar subconsultas?


a) Sentencia SELECT
b) Sentencia UPDATE
c) Sentencia DELETE
d) Todas las anteriores

9) Cmo se llama la tabla que contiene la clave fornea?


a) Tabla Padre
b) Tabla Hija
c) Ninguna de las anteriores

10) Cul de las siguientes es una caracterstica de una clave primaria compuesta?
a) Una columna tiene un nico valor pero no tiene valores NULL.
b) La combinacin de columnas que tienen valores nicos y no tienen valores
NULL.
c) La primera y la ltima columna de la combinacin tienen valores nicos.
d) La primera y la ltima columna de la combinacin tienen valores nicos pero
no tienen valores NULL.

Lenguaje de Consulta Estructurado


Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 155

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Base de Datos I Gua del Estudiante

Respuestas a la Unidad 3: Examen de Autoevaluacin


1) a
2) a
3) b
4) b
5) b
6) b
7) a
8) d
9) b
10) b

Unidad 1: Lenguaje de Consulta Estructurado - Fundamentos


Lenguaje de Consulta Estructurado 156

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total
o parcialmente sin el permiso previo escrito de IBM
Gua del Estudiante Base de Datos I - 1

Unidad 4: Laboratorio de SQL Avanzado


Objetivos de Aprendizaje
Al finalizar esta unidad, usted ser capaz de:

Realizar operaciones aritmticas sobre las columnas de la clusula SELECT.


Usar las funciones agregadas en las sentencias SQL.
Obtener registros de ms de una tabla.
Escribir subconsultas dentro de consultas.
Insertar registros en una tabla.
Actualizar registros en una tabla.
Eliminar registros de una tabla.

Libro 1: Base de Datos I Unidad 4: Laboratorio de SQL Avanzado 157

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Ejercicios de Laboratorio
1) Escriba una consulta para mostrar el nmero de empleado, el nombre y el salario
incrementado en 15%. Etiquete la columna como Salario Nuevo. Un resultado
posible es:
Noemp Nombre Salario Nuevo
000010 CHRISTINE 60662.50
000020 MICHAEL 47437.50
... ... ...
Salario Nuevo = salario+15% del salario existente
2) Modifique la consulta anterior para agregar una columna que reste el salario
anterior del salario nuevo. Etiquete la columna como Incremento. Un resultado
posible es:
Noemp Nombre Salario Salario Nuevo Incremento
000010 CHRISTINE 52750.00 60662.50 7912.50
000020 MICHAEL 41250.00 47437.50 6187.50
... ... ... ... ...
3) Ejecute la siguiente sentencia para crear la tabla departamento.
CREATE TABLE departamento(
depart VARCHAR(50) NOT NULL PRIMARY KEY,
nombredepart VARCHAR(100),
nogrnt VARCHAR(6),
ubicacion VARCHAR(10)
);
Nota: Esta es la segunda tabla que Ud. crea, la cual junto con la tabla empleado
ser til para las operaciones con JOIN.
4) Inserte registros en la tabla Departamento tal como se muestra en el formato
tabular.
NODEPART NOMBREDEPART NOGRNT UBICACION
A00 DIV. SERVICIO DE COMPUTO 000010 NEW YORK
B01 PLANEAMIENTO 000020 DALLAS
C01 CENTRO DE INFORMACION 000030 CHICAGO
D01 CENTRO DE DESARROLLO 000090 CALIFORNIA
D11 SISTEMAS DE PRODUCCION 000060 NEW YORK
D21 SISTEMAS DE ADMINISTRACION 000070 CHICAGO
E01 SERVICIO DE SOPORTE 000050 DALLAS

Unidad 4: Laboratorio de SQL Avanzado Libro 1: Base de Datos I 158

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I - 1

5) Escriba una consulta para mostrar el nombre del empleado, el nmero del
departamento y el nombre del departamento para todos los empleados.
Nombre DEPART NombreDepart
CHRISTINE A00 DIV. SERVICIO DE COMPUTO
VINCENZO A00 DIV. SERVICIO DE COMPUTO
SEAN A00 DIV. SERVICIO DE COMPUTO
MICHAEL B01 PLANEAMIENTO
SALLY C01 CENTRO DE INFORMACION
DOLORES C01 CENTRO DE INFORMACION
HEATHER C01 CENTRO DE INFORMACION
6) Escriba una consulta para mostrar el nombre del empleado, el nombre del
departamento y la ubicacin de todos los empleados que ganan una comisin. Un
resultado posible es:
Nombre Nombre Depart Ubicacion
CHRISTINE DIV. SERVICIO DE COMPUTO NEW YORK
VINCENZO DIV. SERVICIO DE COMPUTO CALIFORNIA
... ... ...
7) Escriba una consulta para mostrar el nombre, el trabajo, el nmero del
departamento y el nombre del departamento para todos los empleados que
trabajan en DALLAS. Un resultado posible es:
Nombre Trabajo Depart# Nombre Depart
SEAN OFICINISTA A00 DIV. SERVICIO DE COMPUTO
WILLIAM DISEADOR D11 SISTEMAS DE RODUCCION
... ... .. ....
8) Muestre el nombre y el nmero del empleado junto con el nombre y el nmero de
su gerente. Etiquete las columnas Nombre Emp, Noemp, Nogrnt y Nombregrnt.
Un resultado posible es:
Nombre Emp Noemp Nogrnt Nombregrnt
VINCENZO 000110 000010 CHRISTINE
SEAN 000120 000010 CHRISTINE
... ... ... ...
9) Muestre el ms alto, el ms bajo, la suma y el promedio de los salarios de todos
los empleados. Etiquete las columnas Mximo, Mnimo, Suma y Promedio
respectivamente. Un resultado posible es:
Mximo Mnimo Suma Promedio
52750.00 15340.00 873715.00 27303.59
... ... ... ...

Libro 1: Base de Datos I Unidad 4: Laboratorio de SQL Avanzado 159

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

10) Escriba una consulta para mostrar el mnimo, el mximo, la suma y el promedio de
los salarios por cada trabajo. Un resultado posible es:
Trabajo Mximo Mnimo Suma Promedio
Vendedor 5000 1500 10000 4000
... ... ... ... ...
Nota: Se supone que la consulta muestra el salario mnimo, el salario mximo y el
salario promedio que una persona puede ganar perteneciendo a una categora de
trabajo. Tambin debe mostrar el salario total que se da a los empleados de cada
categora de trabajo.
11) Escriba una consulta para mostrar el nmero de personas que tienen el mismo
trabajo. Un resultado posible es:
Trabajo Count(*)
Gerente 3
... ...
12) Escriba una consulta que muestre el nombre del departamento, el nmero de
empleados y el salario promedio de todos los empleados por departamento. Un
resultado posible es:
Nombre Depart Count(*) Average
(salario)
Ventas 18 6000
... .. ...
13) Escriba una consulta para mostrar el nombre y el salario de todos los empleados
en el mismo departamento que 'DAVID'. No debe incluir a 'DAVID'. Un resultado
posible es:
Nombre Salario
Jersey 5420
... ...
14) Escriba una consulta para mostrar el nombre y el nmero de todos los empleados
que ganan menos que el salario promedio. Ordene el resultado en forma
ascendente. Un resultado posible es:
Nombre NoEmp
Kiko 451
... ..
15) Escriba una consulta para mostrar el nmero del departamento, el nombre del
empleado y el trabajo de todos los empleados del departamento
'PLANEAMIENTO'. Un resultado posible es:
NoDepart Nombre Trabajo
10 Jersey Gerente
.. ... ...

Unidad 4: Laboratorio de SQL Avanzado Libro 1: Base de Datos I 160

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I - 1

16) Agregue la primera fila de datos a la tabla Departamento desde el siguiente


ejemplo de datos. No liste las columnas en la clusula insert.
E11 OPERACIONES 000090 CHICAGO
E21 SOPORTE DE SOFTWARE 000100 NEW YORK

17) Agregue la segunda fila de datos a la tabla Departamento desde el ejemplo de


datos anterior. Esta vez liste las columnas en la clusula Insert.

18) Verifique si los registros se insertaron.


E11 OPERACIONES 000090 CHICAGO
E21 SOPORTE DE SOFTWARE 000100 NEW YORK

19) Modifique el nombre del departamento a 'CELDA OPERACIONES', al departamento


que tiene el depart igual a E11.
Verifique si el registro ha cambiado.
E11 CELDA OPERACIONES 000090 CHICAGO

20) Elimine el departamento 'CELDA OPERACIONES'de la tabla.

Libro 1: Base de Datos I Unidad 4: Laboratorio de SQL Avanzado 161

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Volumen 3: Fundamentos de MySQL

Libro 1: Base de Datos I Volumen 3: Fundamentos de MySQL 163

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 1: Fundamentos de MySQL


Objetivos de Aprendizaje
Al final de esta unidad usted ser capaz de:
Listar las capacidades de MySQL.
Describir la licencia GPL.
Describir la historia de MySQL y su evolucin.
Listar las principales caractersticas de MySQL.
Describir el motor de almacenamiento de MySQL.
Discutir sobre la arquitectura de hilos de MySQL.
Explicar cmo es implementada la seguridad en MySQL.
Describir las interfaces proporcionadas en MySQL para los programadores.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 165

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

1. Introduccin
En esta unidad, se presentan algunos de los conceptos fundamentales del Sistema de
Administracin de Base de Datos Relacional MySQL.

MySQL, es un Sistema de Administracin de Base de Datos de cdigo abierto, es


licenciado bajo la GPL (General Public License) de la GNU. Fue creada por la empresa
sueca MySQL AB, que mantiene el copyright (derechos de autor) del cdigo fuente del
servidor SQL, as como de la marca.

MySQL es el sistema administrador de base de datos ms usado en el mundo del


software libre, debido a su gran rapidez, confiabilidad y facilidad de uso. Esto
principalmente se debe, a que existen infinidad de libreras y otras herramientas que
permiten su uso a travs de gran cantidad de lenguajes de programacin, adems de su
fcil instalacin y configuracin.

SQL es el lenguaje estandarizado ms usado comnmente para acceder a base de


datos relacionales y es definido por el ANSI/ISO estndar SQL, MySQL soporta el
estndar SQL-92 entre otros.

La compaa MySQL AB tambin distribuye una versin comercial de MySQL donde


ofrece soporte tcnico y da la posibilidad de integrar el MySQL en un software
propietario, ya que de no ser as, se vulnerara la licencia GPL.

MySQL es parte de LAMP (Linux, Apache, MySQL, PHP / Perl / Python), fuente de
rpido crecimiento de software de cdigo abierto para negocios. Muchas compaas
estn usando LAMP como alternativa del costoso software propietario.

2. Licencia GPL
Las licencias que cubren la mayor parte del software son comerciales, es decir el
creador de la obra mantiene el cdigo fuente y no es de libre distribucin. Por el
contrario, la Licencia Pblica General de GNU pretende garantizar la libertad de
compartir y modificar software libre, para asegurar que el software es libre para todos
sus usuarios. Esta Licencia Pblica General se aplica a la mayor parte del software de
la Free Software Foundation y a cualquier otro programa si sus autores se
comprometen a utilizarla.
Cuando se habla de software libre, se refiere a libertad del cdigo fuente, no al precio.
La Licencia Pblica General est diseada para asegurar la libertad de distribuir copias
de software libre (y si se quiere cobrar por ese servicio), de recibir el cdigo fuente o
poder conseguirlo si se requiere, adems de poder modificar el software o usar
fragmentos de l en nuevos programas libres.
Por ejemplo, si se distribuyen copias de uno de estos programas, sea gratuitamente o a
cambio de una contraprestacin, debe asegurarse de que ellos tambin reciban o
puedan conseguir, el cdigo fuente.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 166

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

3. Historia de MySQL
La necesidad de una base de datos SQL para aplicaciones Web llevaron a Michael
Monty Widenius y David Axmark, con la ayuda de Allan Larsson a desarrollar una base
de datos comercial inspirada en proyectos de cdigo abierto (open source), MySQL
comenz a desarrollarse en 1994.
MySQL nace del intento de conectar el gestor mSQL a unas tablas usando rutinas de
bajo nivel. Tras unas primeras pruebas, vieron que mSQL no era lo suficientemente
flexible para lo que necesitaban, por lo que tuvieron que desarrollar nuevas funciones.
Esto result en una interfaz SQL totalmente compatible a mSQL.
No se sabe con certeza de donde proviene el nombre MySQL. Probablemente pueda
ser de dos fuentes, la compaa MySQL AB los ltimos 10 aos le ha colocado como
prefijo a los desarrollos realizados la palabra My, la otra fuente podra ser el nombre
de una de las hijas del co-fundador Michael Monty Widenius, esto todava sigue siendo
un misterio.
MySQL AB fue fundada en 1995 por 2 expertos en cdigo abierto (open source),
Michael Monty Widenius y David Axmark, con la ayuda de Allan Larsson.
El logo del MySQL (Delfn) fue escogido por los fundadores de MySQL AB, el nombre
del delfn Sakila fue seleccionado de una lista de sugerencias de usuarios, basados en
un concurso.

4. Hitos Importantes en la Evaluacin de MySQL


La primera versin que se tiene conocimiento de MySQL fue la 1.0, la cual fue liberada
en 1995. En 1996 es publicada la versin de MySQL 3.11 sobre las plataformas Linux y
Solaris, dando inicio a la era de MySQL como manejador de base de datos.
En 1997 la primera licencia comercial y contrato de soporte es realizado.
En el ao 2000 la licencia de MySQL cambia a GPL (Licencia Publica General de GNU).
La versin de produccin actual es la serie 4.1, la cual fue liberada con la etiqueta GA
(Generally Available) en Octubre de 2004, se espera que la nueva serie 5.0 sea liberada
pronto con nuevas funcionalidades y caractersticas disponibles.

4.1 Serie MySQL 3.23 (Pasado)


EL primer gran impulso de MySQL se dio principalmente en la versin 3.23.
Hubo una importante evolucin en el sistema para adaptarse a las necesidades
de los usuarios de manejadores de base de datos.
El debut de transacciones, MyISAM, replicacin, bsquedas de full-texto y
disponibilidad de licencia GNU GPL.
MySQL 3.23 est actualmente descontinuada.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 167

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

4.2 Serie MySQL 4.0 (Pasado)


Soporte para el formato de tabla InnoDB que permite manejo de transacciones y
bloqueos a nivel de registro (previamente slo en versiones MAX).
Implementacin de Query Cach, logrando un aumento importante en la
ejecucin de las consultas.
Implementacin del comando UNION.
Implementacin de variables de ambientes en archivos de configuracin,
permitiendo actualizar el servidor sin tener que reiniciarlo.
Mejoras en las bsquedas de texto-completo.
Versiones para plataformas no tradicionales tales como Netware, QNX y S/390.

4.3 Serie MysQL 4.1 (Pasado)


Disponibilidad en Octubre de 2004 de MySQL 4.1, certificada como lista para
ambientes de produccin y desarrollo de gran escala.
Subconsultas y tablas derivadas, permitiendo a los usuarios realizar bsquedas
complejas sobre conjuntos de datos con gran facilidad y eficiencia.
Incremento significativo en la velocidad y flexibilidad del mecanismo de
comunicacin cliente-servidor, soporte para sentencias preparadas, las cuales
proveen optimizacin en la ejecucin de consultas y mejoras en la informacin
de precaucin (warning information).
Nueva interfaz grfica para instalacin y configuracin sobre Linux y Windows,
haciendo ms fcil la tarea de administracin de las bases de datos MySQL.
Soporte de OpenSSL en la comunicacin cliente-servidor, mejora la seguridad
contra intrusos y accesos no autorizados.
Significativa mejora en las libreras del servidor MySQL con un pequeo tamao
en memoria (smaller memory footprint).
Soporte para Unicode a travs de los conjuntos de caracteres internacionales
utf8 y ucs2 para aplicaciones que requieren usar lenguajes locales.
Soporte a tipos de datos espaciales para almacenar y administrar datos
geogrficos.
Mejoras en las bsquedas de texto.
Nuevas caractersticas en la ayuda.
La Versin 4.1 est disponible sobre Linux, Windows, Solaris, Mac OS X,
FreeBSB, HP-UX, IBM AIX, etc.
4.4 Serie MySQL 5.0 (Actual):

Primer gran paso en alcanzar un nivel empresarial.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 168

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Claves Forneas para MyISAM con eliminacin en cascada (cascasding


DELETE).
Soporte a cursores.
Soporte a funciones OLAP para almacenes de datos (Data Warehousing).
Mejor escalamiento en la administracin de conexin.
Implementacin de vistas, con soporte a vistas actualizables.
Procedimientos almacenados (Stored Procedures) basados en el estndar SQL:
2003.
Manejo de tipo de dato BIT.
Soporte para diccionario de datos / INFORMATION_SCHEMA.
Soporte verdadero a VARCHAR (Longitud de columnas mayor a 255
caracteres).
SHOW COLUMNS FROM tbl_name, muestra la definicin de la columna.
Disparadores (Triggers).

5. Caractersticas principales de MySQL


La siguiente es una lista que describe las principales caractersticas de MySQL
separadas por categoras:

5.1 Internas y de portabilidad


Escrito en C y C++.
Est disponible en diferentes plataformas: Linux, Solaris, FreeBSB, Mac OS X,
HP-UX, AIX, Windows, etc.
Disponibilidad de APIs para C, C++, Eiffel, Java, Perl, PHP, Python, Ruby y Tcl.
Aprovecha la potencia de sistemas multiprocesador, gracias a su
implementacin multihilo.
Tablas Hash en memoria, son usadas como tablas temporales.
El cdigo de MySQL ha sido probado (Tested) con las principales herramientas
del mercado.
El servidor est disponible como un programa separado para ser usado en un
ambiente cliente/servidor.
5.2 Tipos de Columna
Algunos de los tipos soportados son: Entero (INTEGER) con signo/sin-signo de 1, 2, 3,
4, y 8 bytes de longitud, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE,
TIME, DATETIME, TIMESTAMP, YEAR y tipos espaciales OpenGIS (Geographic
Information Systems).

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 169

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

5.3 Sentencias y Funciones


Soporte para funciones en las sentencias SELECT por ejemplo:
mysql> SELECT CONCAT(nombre, ' ', apellido)
->FROM persona
->WHERE cantidaddepersonas/cantidaddedependientes > 10000 AND edad > 30;
Completo soporte para las clusulas GROUP BY y ORDER BY. Adicionalmente
pueden usarse las funciones: COUNT(), COUNT(DISTINCT ...),AVG(), STD(),
SUM(), MAX() y MIN().
Soporte para LEFT OUTER JOIN y RIGHT OUTER JOIN usando notacin SQL
estndar.
Soporte para alias sobre: tablas y columnas usando SQL estndar.
Las sentencias DELETE, INSERT y UPDATE retornan el nmero de filas que
han sido afectadas.
Se puede mezclar tablas de diferentes bases de datos en la misma consulta.
5.4 Seguridad
Maneja un sistema de privilegios muy seguro, la verificacin se hace basado en host.

5.5 Escalabilidad y Lmites


Maneja base de datos grandes. Su uso se extiende a ms de 50 millones de
registros. Se tiene conocimiento de algunos usuarios que usan el servidor
MySQL con ms de 60,000 tablas y cerca de 5.000.000.000 de filas.
Se permiten hasta 64 ndices por tabla. Cada ndice puede consistir de 1 a 16
columnas.
5.6 Conectividad
Los clientes pueden conectarse al servidor MySQL usando TCP/IP sobre
cualquier plataforma.
El conector/ODBC (MyODBC) provee soporte a programas cliente que usen
ODBC (Open Database Connectivity).
La interfase conector/J provee soporte para programas cliente java que usan
JDBC.

6. Porque seleccionar a MySQL


El servidor MySQL fue originalmente diseado para trabajar con base de datos de
tamao medio (10-100 millones de filas o cerca de 100MB por tabla) sobre pequeos
sistemas de computadora. Hoy en da el servidor de MySQL maneja base de datos con
tamaos que alcanzan los terabyte. El cdigo del servidor puede ser compilado en una

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 170

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

versin reducida convenientemente para ser usada sobre dispositivos porttiles (Hand-
Held) y dispositivos embebidos.
Algunos de los beneficios que hacen especial a MySQL, son listados a continuacin:
Aplicaciones Web: Las aplicaciones Web se caracterizan por hacer muchas consultas y
pocas escrituras en base de datos. MySQL es un manejador que puede resolver
rpidamente las peticiones hechas, adaptndose a la velocidad que se exige a las
aplicaciones Web.
Aplicaciones de Negocios: Por su estabilidad, bajo costo, rapidez y soporte es usada
por muchas organizaciones como su sistema administrador de base de datos, MySQL
AB presta servicio de soporte sobre la aplicacin.
Soporte a Cdigo-Abierto: MySQL es un software libre de cdigo abierto, est basado
en licencia GPL, lo que permite que cualquiera pueda modificar el cdigo fuente y
adaptarlo a sus necesidades.
Bajo requerimiento: MySQL no requiere recursos excesivos para correr, por ejemplo
sobre la plataforma Windows en un computador basado en procesador Pentium-Intel y
32 MB de memoria bastaran para montar MySQL.
Disponibilidad para tablas de gran tamao: Las tablas en MySQL pueden ser de gran
tamao, muchas veces las limitaciones de tamao son impuestas por el sistema
operativo. En algunos sistemas usando MySQL se ha logrado hasta 8 terabytes (TB)
por tabla.
Estabilidad: MySQL est escrito en mltiples capas y en diferentes mdulos, cada uno
de los mdulos estn en versiones estables de funcionamiento, aunque MySQL est en
continuo desarrollo, le son agregadas nuevas caractersticas y funcionalidades. MySQL
AB tiene una poltica con respecto a las versiones que son liberadas al mercado, stas
se basan sobre fases de madurez, tales como:
Alpha: Significa que es una etapa activa de desarrollo, nuevas caractersticas
estn siendo agregadas, algunos de estos nuevos desarrollos pueden cambiar
durante la fase Alpha, los cambios son propuestos por los usuarios sobre
situaciones de la vida real, no debe usarse en ambiente de produccin.
Beta: Significa Caractersticas Hechas. Todas las nuevas caractersticas
planeadas para esta serie han sido implementadas y no existen cambios
fundamentales. Esta es la fase de estabilizacin, enfocndose principalmente en
identificar y corregir bugs (errores), en esta fase no se agrega nuevo cdigo,
adems no debe usarse en ambiente de produccin.
Gamma: Puede ser vista como Candidata a Versin Final. Por supuesto las
versiones de MySQL estn disponibles en el sitio www.mysql.com desde la
versin alpha. Las palabras Candidata a Versin Final se refiere a que casi
esta lista para ambiente de produccin. Despus de corregir los bugs (errores)
encontrados en la fase beta y realizar nuevas pruebas, la versin se mueve a la
fase Gamma lo que significa que el producto es estable y est casi listo para
obtener la etiqueta de listo para produccin.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 171

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Production: Este es el prximo paso, lo cual significa que la serie es conveniente


para ambientes de produccin. Es tambin llamada GA (Generally Available).
Por supuesto, an en versiones de produccin pueden existir bugs (errores). En
este caso estos son fijos y son reportados al sitio de MySQL para su correccin.
Actualmente la versin estable de MySQL o GA es la 5.0.41, la cual se usar
en este curso.
Old: Es la versin previa a la versin de produccin actual, significa que hay una
nueva versin con nuevas caractersticas disponibles.

7. Deficiencias del MySQL


MySQL es un RDBMS estable y extensible, aunque algunas caractersticas bsicas no
se implementan de la misma forma que en otros manejadores de base de datos o no
estn presentes en el ncleo de MySQL 5.0.41. Algunas de stas se listan a
continuacin:
Procedimientos almacenados: La implementacin de procedimientos almacenados en
MySQL 5 es diferente a las otras bases de datos, ya que no estn precompilados, slo
estn almacenados en la base de datos, hacindolos ms parecidos a consultas
nombradas en Excel que a procedimientos almacenados tradicionales.
Debido a esta carencia de precompilamiento, los beneficios de desempeo de los
procedimientos almacenados en MySQL vienen de un trfico de red reducido.
Estos procedimientos son generalmente estables, pero existe la posibilidad de que
surjan unos cuantos errores, como problemas de congelamiento del servidor cuando se
tratan de abrir procedimientos largos. Aunque no es fatal, este comportamiento puede
ser un problema si tiene una base de datos con muchas transacciones.
Seguridad: MySQL tampoco ha integrado seguridad Windows, esto puede ser
considerado por algunos como un prerequisito para ejecutar una base de datos en
Windows con cualquier nivel de seguridad.

Depuracin de errores: No tiene un depurador, as que encontrar errores en un cdigo


largo requiere de prueba y error.

8. Motor de Almacenamiento de MySQL


El motor de almacenamiento (storage engine) es el software que se encarga del manejo
de los datos; es decir, cmo se organizan y qu relaciones tienen, cmo se almacenan
y de qu forma son accedidos, cmo se gestiona el acceso de distintos usuarios y los
bloqueos pertinentes, sus medidas de seguridad y la integridad.
MySQL, como el ncleo (kernel) de Linux, es modular. Se pueden habilitar y deshabilitar
piezas. La modularidad proporcionada por MySQL es una ventaja muy importante sobre
muchos otros sistemas de administracin de bases de datos.
Con MySQL se puede elegir el tipo de una tabla al momento de crearla. Si se necesita
que una tabla soporte bloqueo (locking) y/o transacciones, se puede elegir un tipo de

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 172

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

tabla que mejor se ajuste a las necesidades, es decir, no se necesita mantener la


sobrecarga de manejo de transacciones sobre todas las tablas.
MySQL soporta varios motores de almacenamiento que actan como manejadores de
tablas. Los motores de almacenamiento de MySQL incluyen el manejo de tablas
transaccionales y tablas no-transaccionales.

Figura 1.1: Motores de Almacenamiento de MySQL

8.1 Motor de Almacenamiento ISAM


El motor de almacenamiento original fue el ISAM, el cual slo manejaba tablas no-
transaccionales, estuvo disponible en la versin MySQL 3.23 y rpidamente fue
reemplazado por MyISAM. Est disponible en la distribucin MySQL 4.1, pero no est
activada, para la serie 5.0 no estar disponible.
Algunas de las propiedades de las tablas ISAM son listadas a continuacin:
Registros de longitud fija y variable.
Slo pueden ser definidos 16 ndices por tabla.
Claves con longitud mxima de 256 bytes.
Los datos son almacenados en el formato de la mquina donde est instalado,
ms rpido, pero dependiente de la mquina.
El mximo tamao de una tabla es 4GB.
No pueden usarse sentencias de respaldo de tablas y restauracin de tablas.
No soporta bsquedas de texto completo y tipos de datos espaciales.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 173

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

8.2 Motor de Almacenamiento MyISAM


MyISAM es el motor de almacenamiento por defecto en MySQL desde la serie 3.23.
Cada tabla MyISAM es almacenada en el disco en tres archivos. Los nombres de los
archivos comienzan con el nombre de la tabla y tienen una extensin que indica el tipo
de archivo, un archivo .frm almacena la definicin de la tabla. Un archivo .myd almacena
la data y el archivo .myi indica la informacin sobre los ndices.
Para especificar explcitamente una tabla MyISAM, se indica a travs de ENGINE o
TYPE para indicar el tipo de tabla:
CREATE TABLE t (i INT) ENGINE = MYISAM;
CREATE TABLE t (i INT) TYPE = MYISAM;
MyISAM es el motor de almacenamiento por defecto en MySQL, a menos que haya sido
cambiado no es necesario especificar ENGINE o TYPE para especificar una tabla
MyISAM.
MyISAM est basado en el cdigo de ISAM, pero tiene otras poderosas propiedades:
Todos los datos son almacenados en formato complemento a dos y el formato
de la IEEE de punto flotante (Formatos soportados por la mayora de los
computadores usados actualmente), con esto se garantiza un alto grado de
portabilidad.
Manejo de tablas no-transaccionales.
El mximo nmero de ndice por tablas es 64. El mximo nmero de columnas
por ndices es 16.
Claves con longitud mxima de 1000 bytes.
Las columnas con tipos BLOB y TEXT pueden ser indexadas.
NULL es permitido en columnas ndices.
Los archivos ndices son usualmente mucho ms rpidos en MyISAM que con
ISAM. MyISAM usa menos recursos del sistema que ISAM, pero necesita ms
tiempo de CPU cuando se insertan datos en tablas con ndices.
MyISAM actualiza automticamente las columnas definidas como
AUTO_INCREMENTO en operaciones INSERT/UPDATE, incrementando la
velocidad en al menos 10%.
Si una tabla no tiene bloques libres en la mitad del archivo de datos, es posible
insertar (INSERT) nuevas filas en el mismo momento que otro hilo est leyendo
desde la misma tabla, esto es conocido como inserciones concurrentes. Un
bloque libre puede ocurrir como resultados de eliminaciones de filas.
Los ndices MyISAM tienen una bandera que indica si la tabla fue cerrada
correctamente. Si mysqld es inicializado con la opcin de recuperacin, el
MyISAM automticamente repara la tabla que no haya sido cerrada
correctamente.
Las columnas VARCHAR y CHAR pueden tener un tamao de hasta 64KB.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 174

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Es usado frecuentemente en aplicaciones Web.


8.3 Motor de Almacenamiento Memory (HEAP)
El motor de almacenamiento MEMORY crea tablas que son almacenadas en memoria.
Antes de MySQL 4.1, MEMORY era conocido como HEAP.
Para especificar explcitamente que se quiere trabajar con el motor MEMORY, se indica
a travs de las opciones ENGINE o TYPE:
CREATE TABLE t (i INT) ENGINE = MEMORY;
CREATE TABLE t (i INT) TYPE = HEAP;
Las tablas MEMORY son almacenadas en memoria temporal y usan ndices hash por
defecto. Esto hace que sean muy rpidas y tiles para crear tablas temporales. Sin
embargo, cuando el servidor es detenido, todos los datos de las tablas MEMORY se
pierden. Las tablas continan existiendo ya que la definicin es almacenada en un
archivo fsico, pero el contenido es eliminado cuando se reinicia el servidor.
Las tablas MEMORY tienen las siguientes caractersticas:
El espacio usado por las tablas MEMORY es asignado en pequeos bloques. La
asignacin de memoria se hace a travs de listas enlazadas, la referencia a filas
eliminadas son colocadas en una lista enlazada y son nuevamente usadas
cuando se insertan datos en la tabla.
Las tablas MEMORY permiten hasta 32 ndices por tabla, 16 columnas por
ndice y un mximo tamao de clave de 500 bytes.
Las tablas MEMORY usan registros de longitud fija.
Manejo de tablas no-transaccionales.
Las tablas MEMORY no soportan columnas BLOB y TEXT.
Las tablas MEMORY no soportan columnas AUTO_INCREMENTO.
Las tablas MEMORY no pueden ser convertidas a tablas de disco.
El computador donde est instalado el servidor MySQL requiere memoria
adicional para mantener todas las tablas MEMORY que son usadas en el mismo
momento.
Para liberar memoria usada por una tabla MEMORY, podran usarse las
sentencias DELETE o DROP TABLE.
8.4 Motor de Almacenamiento InnoDB
InnoDB provee a MySQL un motor de almacenamiento con soporte a transacciones
(propiedades ACID) con capacidades para commit y rollback.
Algunas de las caractersticas ms importantes de las tablas InnoDB son:
InnoDB permite el bloqueo a nivel de registros, adems ofrece un mecanismo de
no bloqueo en caso de sentencias SELECT. Estas caractersticas incrementan la

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 175

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

posibilidad de manejo de usuarios concurrentes y mejoran el desempeo del


servidor.
InnoDB soporta la definicin de claves forneas (FOREIGN KEY).
Es posible que en una sentencia SELECT puedan mezclarse diferentes tipos de
tablas.
InnoDB ha sido diseado para mximo rendimiento cuando se procesan grandes
volmenes de datos.
Integrada completamente con el servidor MySQL, InnoDB mantiene su propio
buffer pool para mantener datos e ndices en memoria principal. InnoDB
almacena la informacin de las tablas e ndices en espacios de tablas
(tablespace), los cuales consisten de un conjunto de archivos (a diferencia de
ISAM y MyISAM donde cada tabla es almacenada en un archivo distinto).
No existe un lmite de tamao predefinido para las tablas InnoDB.
InnoDB es usado en numerosos lugares a nivel de ambientes de produccin,
principalmente en sitios que requieren alto desempeo.
Para especificar explcitamente que se quiere trabajar con el motor InnoDB, se
indica a travs de las opciones ENGINE o TYPE:
CREATE TABLE t3 (i INT) ENGINE = InnoDB;
CREATE TABLE t3 (i INT) TYPE = InnoDB;
Es ms seguro. Si ocurren problemas de hardware o MySQL falla, es posible
recuperar la informacin ya sea por una recuperacin automtica o desde un
archivo log de transacciones de respaldo.
Es posible combinar muchas sentencias y aceptar todas al mismo tiempo con la
sentencia COMMIT (si el autocommit est desactivado).
Para ignorar los cambios realizados se ejecuta la sentencia ROLLBACK (si el
autocommit esta desactivado).
Si una actualizacin falla todos los cambios son revertidos (en un ambiente no
transaccional todos los cambios hechos son permanentes).
Los motores transaccionales proporcionan un mejor desempeo sobre tablas
que tienen muchas actualizaciones concurrentes.
MySQL implementa otros motores de almacenamiento tales como: BDB
(BerkeleyDB), EXAMPLE, FEDERATED, ARCHIVE y CSV, una discusin mayor
referente a estos tpicos est fuera del alcance de este curso.
Use el comando SHOW ENGINES desde el cliente mysql para mostrar informacin
sobre los motores de almacenamiento disponibles.

9. Arquitectura de Hilos de MySQL


MySQL corre sobre un motor de base de datos multi-hilo. Esto significa que el MySQL
puede manejar muchas tareas y requerimientos al mismo tiempo, los clientes que se

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 176

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

conectan al servidor de base de datos MySQL no necesitan esperar que otro cliente
finalice la consulta o proceso que est ejecutando para que sean atendidas sus
peticiones. La rpida respuesta se logra con el uso de programas multi-hilo, los cuales
actan como si muchas instancias del mismo programa estuvieran ejecutndose
concurrentemente.
Cuando un usuario se conecta al servidor de base de datos MySQL, un nuevo proceso
llamado hilo maneja las tareas requerida por esa conexin. MySQL mantiene activo un
hilo administrador que es el encargado de recibir y atender las peticiones de otros hilos
en un momento determinado. Si un proceso est requiriendo acceder a una tabla y la
tabla est reservada para uso de otro proceso, el hilo administrador obliga a que el
proceso que requiere la conexin espere hasta que el otro proceso se haya completado.

Los hilos individuales son ejecutados independientemente unos de otros, es posible


incrementar el desempeo de MySQL haciendo uso de computadores multi-procesador,
al lograr redistribuir la carga de trabajo entre varios CPUS el desempeo de todo el
sistema mejorara enormemente. MySQL da soporte a computadores multi-procesador.
MySQL corre como un demonio en ambientes UNIX, una vez que el demonio MySQL es
activado, l se replica a s mismo y corre como un proceso en segundo plano
(background). El demonio del servidor MySQL es llamado mysqld.

10. Seguridad en MySQL


Para los administradores de base de datos la seguridad de la informacin es uno de los
puntos ms importantes. Un nivel de seguridad aceptable puede lograrse bloqueando el
acceso al servidor y a la base de datos a usuarios no autorizados. Cuando se habla de
seguridad de informacin, tambin se deben tomar medidas con los usuarios que tienen
autorizacin de acceder a la base de datos,. El mecanismo ms usado es restringir el
acceso a la informacin, ya que ellos pueden causar dao a la informacin de manera
accidental o maliciosa. Estos usuarios podran ejecutar sentencias SQL delete o update.
El sistema de seguridad en MySQL es referido como el Sistema de Privilegios de
Acceso. Permite la autenticacin de los usuarios del servidor de MySQL y la verificacin
de las actividades de todos los usuarios sobre el servidor y las bases de datos.
La seguridad en MySQL es aplicada en dos niveles: Nivel de servidor y Nivel de Base
de Datos. Cuando un usuario trata de acceder a una base de datos, primero se verifica
si el usuario tiene privilegio para acceder al servidor de base de datos, despus el
servidor verifica si el usuario tiene privilegios para conectarse a una base de datos. La
verificacin de conexin al servidor y la verificacin de conexin a la base de datos son
dos procesos que MySQL siempre lleva a cabo.

MySQL realiza la verificacin de privilegios del servidor y la base de datos usando unas
tablas del sistema llamadas tablas de concesin. Estas tablas contienen toda la
informacin necesaria para aplicar las polticas de seguridad convenientes. Todos los
host (otros computadores) y usuarios que se conectan al servidor MySQL deben estar
representados en las tablas de concesin.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 177

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

11. Sistema de Privilegios de Acceso en MySQL


El mecanismo mediante el cual se aseguran los datos y la integridad es el sistema de
privilegios de MySQL, es un mecanismo que est basado en la validacin de usuarios
que intentan conectarse a un servidor de base de datos y en la asignacin de privilegios
sobre objetos de base de datos tales como SELECT, INSERT, UPDATE, DELETE, etc.
Las tablas de concesin de MySQL son responsables de la autenticacin de usuarios y
host (otros computadores) que acceden al servidor MySQL, adems de la asociacin de
un conjunto de privilegios una vez que se ha logrado el acceso al servidor. El conjunto
de privilegios indica lo que un usuario es capaz de realizar mientras est conectado al
servidor MySQL.
Las tablas de concesin estn localizadas dentro del manejador de base de datos,
especficamente en la base de datos MySQL. Estas tablas son tablas comunes que
contienen columnas y filas con datos acerca de los privilegios de acceso a la base de
datos. En las tablas de concesin es donde se pueden otorgar privilegios a host (otras
computadoras) y usuarios para acceder al servidor MySQL y sus bases de datos. En el
momento de inicio, el servidor lee de estas tablas toda la informacin referente a los
privilegios y los carga en memoria principal, dejndolos disponibles para futuras
consultas. La manipulacin de estas tablas generalmente se hace indirectamente con la
sentencia GRANT y REVOKE.
MySQL usa las tablas user, db, host, tables_priv y columns_priv de la base de datos
mysql para manejar el acceso a la informacin.
La tabla user es usada para especificar la informacin de privilegios de los usuarios que
intentan conectarse al servidor MySQL.
La tabla db es usada para especificar los accesos a las base de datos almacenadas en
el servidor.
La tabla host es usada en conjuncin con la tabla db para permitir que un usuario pueda
conectarse a un servidor MySQL desde diferentes mquinas en una red de
computadoras.
La tabla tables_priv es usada para especificar los privilegios de los usuarios a nivel de
tablas.
La tabla columns_priv es usada para especificar los privilegios de los usuarios a nivel de
columnas.
Utiliza el comando SHOW GRANTS FOR <usuario>; en el cliente mysql para ver los
privilegios de un usuario.

Algunos de los privilegios son listados en la siguiente tabla.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 178

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Privilegios Contexto

CREATE Base de datos, tablas o ndices

DROP Base de datos o tablas

REFERENCES Base de datos o tablas

ALTER, DELETE, INDEX, INSERT,


Tablas
SELECT y UPDATE.

SELECT, INSERT, UPDATE, REFERENCES Columnas

LOCK TABLES, CREATE USER Administracin de servidor

Tabla 1.1: Listado de Privilegios segn Contexto

Ms adelante en el curso se detallar cmo otorgar y revocar privilegios.

12. Clientes MySQL


El sistema administrador de base de datos MySQL est basado sobre una arquitectura
cliente-servidor. El servidor es el programa encargado de manipular la base de datos,
los programas clientes se comunican con el servidor a travs de sentencias SQL para
que se lleve a cabo una actividad sobre una base de datos especfica. El programa
cliente es instalado sobre la mquina desde la cual se desea acceder al servidor de
base de datos. En una red puede haber mltiples instalaciones de clientes, pero
generalmente, hay slo una instalacin de un servidor de base de datos.
MySQL es inherentemente un sistema administrador de base de datos para redes, as
es posible que un cliente pueda comunicarse con un servidor que est corriendo
localmente o que el servidor est en un lugar distante. Existen muchos programas
cliente para MySQL, algunos de ellos ofrecen interfaces grficas (GUI) otros se basan
en lneas de comando. En este curso, se emplearn 2 programas clientes que ofrecen
interfaces grficas (MySQL Administrador y MySQL Query Browser), adems se
estudiar el programa cliente MySQL que se distribuye con el servidor MySQL. ste
programa, recibe las peticiones de usuarios y las enva el servidor para su
procesamiento, el servidor retorna los resultados al programa cliente y ste a su vez los
muestra a los usuarios. Estas caractersticas hacen de este programa cliente una
poderosa herramienta de ayuda para los desarrolladores de aplicaciones.

12.1 Programa Cliente mysql


El MySQL es un programa cliente de lnea de comandos SQL, ofrece a los
desarrolladores de software la facilidad de probar las sentencias SQL antes de que
stas sean incluidas en el cdigo de un programa. El cliente mysql permite al usuario
usarlo de dos modos: interactivo y no-interactivo.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 179

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

En el modo interactivo, los usuarios se conectan al servidor de base de datos e


interactan con el manejador a travs de sentencias SQL, el usuario ingresa las
sentencias SQL en la lnea de comandos, presiona la tecla [ENTER] y el cliente mysql
se encarga de enviarlas al servidor para el procesamiento, por lo tanto existe una
interaccin constante.
Usar el cliente MySQL es muy sencillo, solo basta con invocar desde la lnea de
comandos de Linux:
shell>mysql --user[nombre_usuario] --password
--host[nombre_host]
o
shell>mysql -u [nombre_usuario] -p -h [nombre_host]
El modo no-interactivo es la otra manera de uso del cliente MySQL, en este caso, las
sentencias SQL no se suministran en la lnea de comando directamente, sino ms bien
son incluidas en un archivo de texto o pueden ser obtenidas desde otro programa.
El siguiente ejemplo muestra cmo ejecutar un script con mysql:
shell>mysql u [usuario] p h [nombre_host]<
[nomb_archivo]
Si se quiere redireccionar la salida un archivo externo (cambie la salida estndar a un
archivo de salida):
shell>>mysql u [usuario] p h [nombre_host] > salida.txt
En el cdigo anterior los resultados de las sentencias ejecutadas se almacenan en el
archivo de salida definido (salida.txt).
Es posible usar script desde la lnea de comandos de MySQL:
mysql> source [nombre_archivo];
mysql> \. [nombre_archivo]
Adems de sentencias SQL, el cliente MySQL tambin puede interpretar un conjunto de
comandos.
Ejemplo:
mysql> help
Cada comando tiene una forma larga y corta, para el caso de la forma larga no es
sensible a maysculas y minsculas, la forma corta si es sensible a maysculas y
minsculas.
Algunos de los comandos son mostrados en la siguiente tabla:

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 180

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Forma Larga Forma Corta Accin


? \h Muestra la ayuda,
equivalente a help.
Clear \c Limpiar pantalla.
connect \r Conectar a un servidor de
base de datos.
Exit \q Salir de mysql, equivalente
a quit.
Use \u Usar una base de datos.

Tabla 1.2: Comandos del Cliente MySQL

12.2 Programa Cliente MySQL Administrator


El administrador MySQL es un programa grfico que permite a un usuario realizar
tareas administrativas, como por ejemplo: configurar el servidor MySQL, monitorear el
desempeo del servidor y verificar el comportamiento, iniciar o detener el servidor de
base de datos, administrar usuarios y conexiones, ejecutar respaldos de la base de
datos, administrar las tablas de concesin y algunas otras operaciones adicionales.
El cliente MySQL puede ser usado para realizar las tareas antes descritas, la diferencia
principal est en que el administrador MySQL ofrece una GUI (interfaz grafica) muy
sencilla, fcil de usar e intuitiva.
El administrador MySQL es una herramienta de cdigo abierto (open source) basada
en licencia GPL, fue desarrollado por la compaa MySQL AB. Las plataformas para las
cuales est disponible incluye a: Windows, Linux y Mac OSX.
La aplicacin puede ser descargada desde el sitio Web:

http://dev.mysql.com/downloads/administrator.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 181

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 1.2: Configuracin de Conexin

Una vez instalado el MySQL administrator, es necesario configurar una conexin contra
un servidor de MySQL para poder administrar el mismo. En la pantalla de configuracin
se debern especificar los datos del servidor, nombre de usuario, contrasea y puerto
de la base de datos a la cual se desea conectar.
Una vez lograda la conexin, se despliega la pantalla principal del programa:

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 182

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 1.3: Server Information (Informacin del Servidor)

Desde la pantalla principal del Server Information (Informacin del Servidor) se puede
ver la informacin relativa al servidor de base datos al que se ha conectado, as como
las caractersticas de la mquina en la que se est ejecutando el programa.
MySQL Administrator proporciona una variedad de herramientas para ayudar al
administrador a realizar estas operaciones. Algunas de estas se listan a continuacin:
Service Control (Control de Servicio): Permite Iniciar y/o detener el servidor
de base de datos (slo accesible si se ha conectado con un servidor MySQL en
la mquina local).

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 183

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 1.4: Service Control (Control de Servicio)

Startup Parameters (Parmetros de Instalacin): Es usado para la


configuracin del servidor y de las variables de inicio.

Figura 1.5: Startup Parameters (Parmetros de Instalacin)

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 184

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

User Administration (Administracin de Usuarios): Ofrece la facilidad para


administrar usuarios y grupos en el servidor de base de datos. La asignacin de
los privilegios sobre base de datos, tablas y columnas se hace desde una de las
pestaas del User Administration, entre algunas otras funcionalidades.

Figura 1.6: User Administration (Administracin de Usuarios)

Server Conections (Servidor de Conexiones): Permite visualizar y administrar


las conexiones abiertas con el servidor de base de datos.

Figura 1.7: Server Conections (Servidor de Conexiones)

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 185

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Health (Centro de Salud): Muestra el estado o salud del servidor, utilizando


esta herramienta es posible obtener informacin acerca de: Cantidad de
conexiones al servidor, trafico de informacin, nmero de consultas realizadas,
valores de variables de estado del servidor, valores de variables de
configuracin del servidor.

Figura 1.8: Health (Centro de Salud)

Server Logs (Claves del Servidor): Con esta herramienta es posible configurar
y/o consultar los archivos logs que genera el servidor.

Figura 1.9: Server Logs (Claves del Servidor)

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 186

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Backup (Respaldo): Utilidad que permite realizar respaldos de base de datos.

Figura 1.10: Backup (Respaldo)

Restore Backup (Respaldo de Restauracin): Utilidad que permite realizar la


restauracin de base de datos anteriormente respaldadas.

Figura 1.11: Restore Backup (Respaldo de Restauracin)

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 187

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Replication Status (Estado de Replicacin): Utilidad que permite realizar


configuracin y monitorear sistemas replicados.

Figura 1.12: Replication Status (Estado de Replicacin)

Catalogs (Catlogos): Utilidad que permite administrar las tablas de concesin.

Figura 1.13: Catalogs (Catlogos)

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 188

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

12.3 Programa Cliente MySQL Query Browser


MySQL Query Browser es una utilidad para trabajar con la base de datos MySQL. Es un
editor de sentencias SQL grfico. Dispone tambin de un editor de tablas y registros,
que permite crear nuevas tablas o cambiar las existentes y la posibilidad de cambiar los
registros, es decir, los datos almacenados en las tablas.
Una vez instalado el MySQL Query Browser, es necesario configurar una conexin
contra un servidor de MySQL para comenzar a interactuar con una base de datos, en la
pantalla de configuracin se debern especificar los datos del servidor, nombre de
usuario, contrasea y nombre de la base de datos a activar (Default Schema).

Figura 1.14: Configuracin de la Conexin

Dispone de los siguientes componentes:

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 189

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Editor de sentencias SQL: que permite crear sentencias (visual o


manualmente) y moverse por el historial de sentencias que se ha ido generando.

Figura 1.15: Ventana Principal del Query Browser

Visor de Resultados: Permite examinar los resultados devueltos por las


consultas y comparar los resultados obtenidos entre varias sentencias SQL. Se
pueden tener activas varias consultas a la vez, seleccionando la que se desea
visualizar con una pestaa. Desde el visor de resultados se pueden editar los
campos, pero debe estar activa la opcin "Edit".

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 190

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 1.16: Visor de Resultados

Navegador de objetos: Ubicado en la parte lateral derecha, para manejar las


bases de datos, favoritos o historial. Aqu, es posible visualizar un esquema de
las distintas bases de datos, con sus distintas tablas y columnas, que se
utilizarn luego para generar las sentencias visualmente.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 191

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 1.17: Navegador de Objetos

Visor de informacin: Ubicado en la parte inferior a la derecha, se cuenta con


una interesante referencia acerca de la base de datos MySQL, con acceso a la
sintaxis de sentencias SQL, librera de funciones, etc.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 192

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 1.18: Visor de Informacin

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 193

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de:
Explicar la historia y la evolucin de MySQL.
Explicar el concepto de la licencia GPL.
Listar las fortalezas y debilidades de MySQL.
Describir el motor de almacenamiento de MySQL.
Discutir sobre la arquitectura de hilos de MySQL.
Explicar el sistema de seguridad de MySQL.
Discutir sobre herramientas de MySQL.

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 194

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 1: Examen de Autoevaluacin


1) El servidor MySQL puede comunicarse con cualquier programa cliente que
soporte: _________.
a) TCP/IP
b) SQLJ
c) DRD
d) IPX/SPT

2) MySQL mantiene las tablas temporales en memoria principal como__________.


a) Tablas MyISAM.
b) Tablas InnoDB.
c) Tablas Hash.
d) Ninguna de las anteriores

3) Cul interfase provee soporte para programas clientes desarrollados en Java


que usan JDBC?
a) Conector/ODBC
b) Conector/J
c) Conector/P
d) Conector/J2EE/J2ME

4) MySQL fue escrito en ___________.


a) Java y ASM.
b) Pascal y Clipper
c) C y C++
d) Cobol y Fortran.

5) Cul es la licencia que pretende garantizar la libertad de compartir y modificar


software libre, para asegurar que el software es libre para todos sus usuarios?
a) Microsoft
b) GPL
c) LPG
d) Linux

6) El acrnimo LAMP se refiera a:


a) Lantastic, AIX, HP, Postgre
b) Ninguna de las opciones
c) Linux, April, Microsoft, Project

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 195

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

d) Linux, Apache, MySQL, PHP / Perl / Python

7) Cul es el software que se encarga del manejo de los datos, cmo se organizan,
qu relaciones tienen, cmo se almacenan y de qu forma son accedidos?
a) Sistema de privilegios.
b) Motor de almacenamiento
c) GPL
d) Tablas de concesin

8) MySQL puede manejar muchas tareas y requerimientos al mismo tiempo


a) Verdadero
b) Falso

9) En cules niveles es aplicada la seguridad en MySQL?


a) Nivel de servidor
b) Nivel de Base de Datos
c) Nivel de los datos
d) Todas las anteriores

10) Para qu es usada la tabla tables_priv?


a) Es usada para especificar los privilegios de los usuarios a nivel de tablas
b) Es usada para especificar los privilegios de los usuarios a nivel de columnas
c) Es usada en conjuncin con la tabla db para permitir que un usuario pueda
conectarse a un servidor MySQL
d) Es usada para especificar la informacin de privilegios de los usuarios que
intentan conectarse al servidor MySQL

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 196

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Respuestas a Unidad 1: Examen de Autoevaluacin


1) a
2) c
3) b
4) c
5) b
6) d
7) b
8) a
9) a y b
10) a

Unidad 1: Fundamentos de MySQL Libro 1: Base de Datos I 197

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 2: Ejecucin de Sentencias SQL


con MySQL
Objetivos de Aprendizaje
Al final de esta unidad usted ser capaz de:
Describir el lenguaje SQL.
Describir los tipos de datos soportados por MySQL.
Explicar qu son DDL, DML y DCL.
Describir los privilegios de MySQL.
Escribir una sentencia SELECT simple.
Escribir una sentencia SELECT condicional.
Escribir consultas multitablas.
Generar respaldo de base de datos.
Ejecutar sentencias en el cliente mysql.
Ejecutar sentencias en el cliente MySQL Query Browser.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 199

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

1. Introduccin al SQL
SQL (Lenguaje de consulta estructurado) es un lenguaje bastante sencillo, basado en el
idioma ingls, orientado principalmente a base de datos relacionales y, sobre todo, al
manejo de consultas. MySQL incorpora soporte al estndar SQL-92 entre otros.

El objetivo principal de SQL es la realizacin de consultas y clculos con los datos de


una o varias tablas.

El lenguaje SQL est compuesto por una serie de sentencias y de clusulas muy
reducidas en nmero, pero muy potentes en efectividad. Entre todas las palabras,
existen cuatro que son las ms utilizadas, las cuales estn compuestas por una
sentencia y por tres clusulas:
SELECT lista_campos FROM lista_tablas [WHERE criterios
[ORDER BY lista_campos]]
En esta unidad, se da una explicacin completa del uso de las sentencias SQL sobre el
sistemas administrador de base de datos MySQL.

2. Ejecucin de Sentencias SQL con el Programa mysql


Para conectarse al servidor, usualmente se requiere de un nombre de usuario (login) y
de una contrasea (password), y si el servidor al que se desea conectar est en una
mquina diferente de la empleada, tambin se necesita indicar el nombre o la direccin
IP de dicho servidor. Abra una lnea de comandos en el sistema operativo, ejecute el
comando mysql con sus respectivos parmetros:
shell>mysql h [localhost] u [mysqladmin] p [Presione
la tecla Enter]
A continuacin ingrese el password, y presione [Enter].

Si la conexin al servidor MySQL se pudo establecer de manera satisfactoria, recibir el


mensaje de bienvenida y estar en el prompt de mysql, como lo muestra la Figura 2.1:

Figura 2.1: Entrada Satisfactoria a Cliente MySQL

mysql>Este prompt indica que mysql est listo para recibir comandos.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 200

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Un comando normalmente consiste de una sentencia SQL seguida por un punto y


coma.
Cuando se emite un comando, mysql lo manda al servidor para que lo ejecute, muestra
los resultados y regresa el prompt indicando que est listo para recibir ms consultas.

Las palabras clave pueden ser escritas usando maysculas y minsculas.

Ejemplo:
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> select version(), current_DATE;

Es posible mostrar la informacin de la base de datos actual usando la sentencia


SELECT DATABASE();

A continuacin se presentan algunos comandos tiles provistos por el cliente mysql.

Version(): Permite mostrar la versin del servidor MySQL que se tiene instalado.
Current_Date(): Muestra la fecha actual del servidor.

Figura 2.2: Ejecucin de Comandos Versin() y Current_Date()

now(): Muestra la fecha y hora actual del servidor.

Figura 2.3: Ejecucin de Comando Now()

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 201

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Un comando no necesita ser escrito en una sola lnea, as que los comandos que
requieran de varias lneas no son un problema, mysql determinar en donde finaliza la
sentencia cuando encuentre el punto y coma, no cuando encuentre el fin de lnea.
Aqu est un ejemplo que muestra una consulta simple escrita en varias lneas:

Figura 2.4: Ejecucin de Consulta

A continuacin se usar la sentencia SHOW DATABASES para listar las bases de datos
existentes en el servidor al que se est conectado, slo se mostrarn las bases de
datos a las cuales se tiene privilegio.
mysql>SHOW DATABASES;

Figura 2.5: Ejecucin de SHOW DATABASES

Para conectarse a una base de datos puede usarse tanto el comando use como
connect
mysql>use test;
mysql>connect test;

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 202

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 2.6: Cambio de Database con use

Figura 2.7: Cambio de Database con connect

SHOW TABLES: SHOW TABLES es un comando que permite listar las tablas
disponibles en la base de datos activa.

Para mostrar el motor de almacenamiento usado en una tabla use SHOW TABLE
STATUS FROM <BASE DE DATOS>;
mysql>SHOW TABLES;

Figura 2.8: Ejecucin de SHOW TABLES

3. Tipos de Datos en MySQL


Cada columna de una tabla debe ser de un tipo de dato, este tipo de dato va
relacionado con el tipo definido en el diseo de la base de datos y se debe ajustar a un
ptimo uso del espacio de almacenamiento. A continuacin se describe los tipos de
datos soportados por MySQL.

Los tipos de datos soportados por MySQL se pueden agrupar en tres grandes grupos:

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 203

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Tipo de dato Numrico.


Tipo de dato Fecha.
Tipo de dato Cadena.

3.1 Tipos de Datos Numricos

tinyint: Es un entero de un byte con o sin signo, con signo el rango va desde -128 a
127, sin signo el rango de valores es de 0 a 255.

tinyint(p) especifica la cantidad de dgitos permitidos, donde p es igual al nmero de


dgitos a ser representados, la mxima longitud son 3 dgitos.

TINYINT[(P)] [UNSIGNED]

smallint: Es un entero de dos bytes con o sin signo, con signo el rango de valores va
desde -32768 a 32767, sin signo el rango de valores es de 0 a 65535.

smallint(p) especifica la cantidad de dgitos permitidos, donde p es igual al nmero de


dgitos a ser representados, la mxima longitud son 5 dgitos.

SMALLINT[(P)] [UNSIGNED]

mediumint: Es un entero de tres bytes con o sin signo, con signo el rango de valores va
desde -8.388.608 a 8.388.607, sin signo el rango va desde 0 a16777215.

mediumint(p) especifica la cantidad de dgitos permitidos, donde p es igual al nmero de


dgitos a ser representados, la mxima longitud son 8 dgitos.

MEDIUMINT[(P)] [UNSIGNED]

integer, int: Es un entero de cuatro bytes con o sin signo, con signo el rango de valores
va desde -2147483648 a 2147483647, sin signo el rango va desde 0 a 429.4967.295.

int(p) especifica la cantidad de dgitos permitidos, donde p es igual al nmero de dgitos


a ser representados, la mxima longitud son 10 dgitos.

INT[(P)] [UNSIGNED]

bigint: Es un entero de ocho bytes con o sin signo, con signo el rango de valores va
desde -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807, sin signo el rango va
desde 0 a 18.446.744.073.709.551.615.

bigint(p) especifica la cantidad de dgitos permitidos, donde p es igual al nmero de


dgitos a ser representados, la mxima longitud son 20 dgitos.

BIGINT[(P)] [UNSIGNED]

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 204

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

float: Maneja nmeros con punto flotante de precisin simple, el rango de valores para
una columna van desde -3.402823466e+38 a -1.175494351e-38 para valores negativos,
0 y desde 1.175494351e-38 a 3.402823466e+38 para valores positivos.

float(p,m) donde m es el nmero de dgitos en la mantisa o la porcin decimal y p es la


precisin o la cantidad de dgitos para todo el nmero.

FLOAT[(P,M)] [UNSIGNED]

xreal, double: Nmero en coma flotante de precisin doble. Los valores permitidos van
desde -1.7976931348623157e+308 a -2.2250738585072014e-308 para valores
negativos, 0 y desde 2.2250738585072014e-308 a 1.7976931348623157e+308 para
valores positivos.

double(p,m) donde m es el nmero de dgitos en la mantisa o la porcin decimal y p es


la precisin o la cantidad de dgitos para todo el nmero.

DOUBLE[(P,M)] [UNSIGNED]

decimal(m,d), dec(m,d), numeric(m,d): Un valor decimal es un nmero decimal


empaquetado con una coma decimal implcita, el nmero se almacena como una
cadena.

decimal(m,d) donde m es la cantidad de dgitos para todo el nmero y d es el nmero


mximo de dgitos en la mantisa o la porcin decimal.

DECIMAL[(M[,D])] [UNSIGNED]

3.2 Tipos de Datos Fecha

MySQL permite definir columnas de tablas que puedan almacenar fechas, sobre estos
tipos de datos no hay verificacin estricta si una fecha es vlida o no, simplemente el
servidor MySQL comprueba que el mes est comprendido entre 0 y 12, y que el da est
comprendido entre 0 y 31.

date: Tipo fecha, el rango de valores va desde el 1 de enero del 1001 al 31 de


diciembre de 9999, el formato de almacenamiento es de ao-mes-da AAAA-MM-DD.

datetime: Combinacin de fecha y hora, el rango de valores va desde el 1 de enero del


1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas,
59 minutos y 59 segundos, el formato de almacenamiento es de ao-mes-da
horas:minutos:segundos AAAA-MM-DD HH:MM:SS.

timestamp: Combinacin de fecha y hora, el rango va desde el 1 de enero de 1970 al


ao 2037. El formato de almacenamiento depende del tamao del campo:

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 205

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Tamao Formato

14 aaaammddhhmmss

12 aammddhhmmss

8 aaaammdd

6 aammdd

4 aamm

2 aa

Tabla 2.1: Formatos de Almacenamiento

time: Es una representacin genrica de valores de tiempo expresado en horas,


minutos y segundos, el rango de horas va desde -838 horas, 59 minutos y 59 segundos
a 838 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de
'hh:mm:ss'.

year: Tipo de dato usado para representar un ao calendario, el rango de valores


permitidos va desde el ao 1901 al ao 2155, el campo puede tener tamao dos o
tamao 4, dependiendo de si se quiere almacenar el ao con dos o cuatro dgitos.

3.3 Tipos de cadena

El tipo de dato cadena encapsula a todos los tipos de datos usados para almacenar
caracteres, cadenas, datos alfanumricos y valores NULL, adicionalmente todos los
tipos cadena pueden almacenar cadenas vacas (), cuando se inserta un valor en un
tipo de datos cadena y ste excede al mximo permitido por el tipo el dato es truncado.

char(n): Almacena una cadena de longitud fija, la cadena podr contener desde 0 a 255
caracteres.

varchar(n): Almacena una cadena de longitud variable, la cadena podr contener


desde 0 a 255 caracteres.

text(n): Es un tipo de datos cadena usado para almacenar datos alfanumricos, las
consultas hechas sobre las columnas text no son sensibles a maysculas y minsculas,
rango de valores para el n de 0 a 65535 caracteres.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 206

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

blob(n): Es un tipo cadena usado para almacenar datos binarios, como por ejemplo
archivos de imagen, video, etc. El tipo de datos blob si es sensible a minsculas y
maysculas, el tamao mximo para un blob es de 65535 bytes.

Diferencia de almacenamiento entre los tipos char y varchar.

Valor CHAR(4) Almacenamiento VARCHAR(4) Almacenamiento

'' '' 4 bytes " 1 byte

Tabla 2.2: Diferencia de Almacenamiento entre char y varchar

4. Sentencias DDL
CREATE DATABASE: Permite crear una base de datos, la sintaxis es la siguiente:

CREATE DATABASE [IF NOT EXISTS] nombre_base_de_datos;

Sino se usa IF NOT EXISTS en la sentencia CREATE DATABASE, producir un


mensaje de error si ya existe una base de datos con el mismo nombre.

DROP DATABASE: Elimina todas las tablas de la base de datos y elimina la base de
datos, para ejecutar esta sentencia se debe tener el privilegio DROP sobre la base de
datos.

Sintaxis:

DROP DATABASE nombre_base_de_datos;

CREATE TABLE: Esta sentencia es utilizada para crear una tabla y definir las
columnas que contiene.

Sintaxis:
1) CREATE TABLE 2) CREATE TABLE
nombre_tabla( nombre_tabla(
nombre_columna1 tipo nombre_columna1 tipo [NOT
[NOT NULL] [PRIMARY NULL],
KEY], nombre_columna2 tipo [NOT
nombre_columna2 tipo NULL],
[NOT NULL], nombre_columnan tipo [NOT
nombre_columnan tipo NULL][, [CONSTRAINT
[NOT NULL]) NOMBRERESTRICCION]
[ENGINE | TYPE={INNODB | PRIMARY
MYISAM | HEAP}]; KEY(nombre_columna(s)),

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 207

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

INDEX(nombre_columna(s))])
[ENGINE | TYPE={INNODB |
MYISAM | HEAP}];

3) CREATE TABLE
nombre_tabla
LIKE nombre_otra_tabla;

Sintaxis para definir columnas es:


nombre_col tipo [NOT NULL | NULL] [DEFAULT
valor_por_defecto]
[AUTO_INCREMENT] [[PRIMARY] KEY] [COMMENT
'string']
Tabla 2.3: Sintaxis para Definir una Tabla

En la tabla anterior se muestran tres sintaxis distintas par definir una tabla en MySQL, la
tercera opcin permite definir la estructura de una tabla a partir de la definicin de otra,
slo se copia la estructura no los datos que contiene.

Cuando no se especifica el motor de almacenamiento, por defecto el manejador usa el


MyISAM.

Es importante tener en cuenta que cuando una columna se define como clave primaria
es obligatorio que antes se haya especificado la restriccin NOT NULL sobre la
columna.

MySQL es sensible a minsculas y maysculas con los nombres de las tablas, es


importante mantener un estndar en el nombramiento de estos objetos de base de
datos.

A continuacin se muestran algunos ejemplos de definicin de tablas. En estos


ejemplos se asume que existe una conexin a una base de datos.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 208

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

1) CREATE TABLE cliente 2) CREATE TABLE


( cliente_copia LIKE
cliente;
id_cliente INT NOT
NULL, Se define la tabla cliente_copia a partir
nombre VARCHAR(20), de la definicin de la tabla cliente.
PRIMARY KEY
(id_cliente)
) TYPE = INNODB;
Se define la tabla cliente la cual tiene dos
columnas (id_cliente y nombre), siendo la
columna id_cliente la clave primaria, adems
se indica el motor de almacenamiento es
INNODB (Soporte a transacciones).
3) CREATE TABLE factura 4) CREATE TABLE PRUEBA
( (
id_factura INT NOT NULL ID INT AUTO_INCREMENT
PRIMARY KEY, PRIMARY KEY,
id_cliente INT NOT PREGUNTA VARCHAR(20),
NULL, RESPUESTA VARCHAR(20)
monto DOUBLE, )
INDEX (id_cliente) AUTO_INCREMENT = 10;
) TYPE = HEAP;
AUTO_INCREMENT puede ser
Se define la tabla factura la cual tiene tres agregada como opcin a una columna,
columnas (id_factura_id_cliente_monto), si al insertar una fila se omite el valor de
siendo id_factura la clave primaria, y se crea la columna auto_incrementada o si se
un ndice para la columna id_cliente, cuando inserta un valor nulo para esa columna,
el servidor es detenido todos los datos de la su valor se calcula automticamente,
tabla se pierden, la estructura de la tabla tomando el valor ms alto de esa
permanece. columna y sumndole una unidad. Esto
permite crear, de una forma sencilla, una
columna con un valor nico para cada
fila de la tabla., por defecto esta
inicializado en uno, aunque puede ser
configurado, en el ejemplo anterior el
valor inicial para el auto_incremento es
10.

Tabla 2.4: Ejemplo para Crear Tablas

Con la sentencia DESCRIBE es posible obtener informacin sobre la definicin de una


tabla:

Sintaxis:

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 209

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

[DESCRIBE | DESC] nombre_tabla [col_name];

Ejemplo:

DESCRIBE cliente;

Usando SHOW COLUMNS FROM cliente puede obtenerse un


resultado igual
Ejemplo:
SHOW COLUMNS FROM cliente;

ndices

Para definir ndices sobre una columna o sobre varias se usan indistintamente las
opciones KEY o INDEX.
CREATE TABLE computador( CREATE TABLE computador(
id INT, id INT,
marca VARCHAR(20), marca VARCHAR(20),
modelo VARCHAR(20), modelo VARCHAR(20),
INDEX(modelo)); KEY(modelo));
Tabla 2.5: Ejemplos para Definir ndices

Tambin es posible crear un ndice sobre parte de una columna:

CREATE TABLE computador(


id INT,
marca VARCHAR(20),
modelo VARCHAR(20),
INDEX(modelo(4)));
Tabla 2.6: Ejemplo para Definir ndices Restringiendo parte de la Columna

Este ejemplo usar slo los cuatro primeros caracteres de la columna 'modelo' para
crear el ndice.

ndices nicos

Para definir ndices nicos sobre una columna o sobre varias se usa la opcin UNIQUE.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 210

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

La diferencia entre un ndice nico y uno normal es que en los nicos no se permite la
insercin de filas con valores repetidos. La excepcin es el valor NULL, que s se puede
repetir.
CREATE TABLE personal(
Ci INT,
Nombre VARCHAR(20),
UNIQUE (Nombre));
Tabla 2.7: Ejemplo de ndice nico

Claves Forneas

Para que una columna sea una clave fornea, esta necesita ser definida como tal al
momento de crear la tabla. Se pueden definir claves forneas en cualquier tipo de tabla
de MySQL, pero nicamente tienen sentido cuando se usan tablas del tipo InnoDB, en
los otros motores de almacenamiento no se verifica si una clave fornea existe
realmente en la tabla referenciada, y que no se eliminan filas de una tabla con una
definicin de clave fornea. Para hacer esto hay que usar tablas InnoDB.

Ejemplo:
CREATE TABLE cliente
(
id_cliente INT NOT NULL,
nombre VARCHAR(30),
PRIMARY KEY (id_cliente)
) TYPE = INNODB;

CREATE TABLE factura


(
id_factura INT NOT NULL,
id_cliente INT NOT NULL,
monto DOUBLE,
PRIMARY KEY(id_factura),
FOREIGN KEY (id_cliente) REFERENCES cliente(id_cliente) ON
DELETE CASCADE
) TYPE = INNODB;

Es obligatorio que la columna que contiene una definicin de clave fornea est
indexada. Pero esto no debe ser motivo de preocupacin, ya que si no se realiza de
forma explcita, MySQL lo har de forma implcita.

Sintaxis completa para la definicin de clave fornea es:


[CONSTRAINT nombre_restriccin] FOREIGN KEY
(nombre_columna, ...)

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 211

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

REFERENCES nombre_tabla (nombre_columna,


...)
[ON DELETE CASCADE ]

Se pueden agregar restricciones de clave fornea a una tabla con el uso de la sentencia
ALTER TABLE. La sintaxis es:
ALTER TABLE nombre_tabla ADD [CONSTRAINT
nombre_restriccin] FOREIGN KEY(nombre_columna, ...)
REFERENCES otra_tabla(nombre_columna, ...)
[acciones_ON_DELETE];

ALTER TABLE: En muchas oportunidades es posible que se requiera cambiar la


estructura de las tablas, estos cambios suceden por muchas razones: Cambios en las
reglas del negocio, actualizaciones de las aplicaciones, etc. Con ALTER TABLE se
puede dar respuestas a esas necesidades.

Sintaxis:
ALTER TABLE nombre_de_tabla
[ADD COLUMN (Definicin_de_columna,..,..)]
[ADD INDEX [nombre_indice] (nombre_columna,..,..)]
[ADD PRIMARY KEY (nombre_columna,..,..)]
[ADD UNIQUE [nombre_indice] (nombre_columna,..,..)]
ADD [CONSTRAINT nombre_restriccin] FOREIGN
KEY(nombre_columna, ...)
REFERENCES otra_tabla(nombre_columna, ...)
[acciones_ON_DELETE]
[DROP COLUMN nombre_columna]
[DROP PRIMARY KEY]
[DROP INDEX nombre_indice]
Ejemplos:
1.- ALTER TABLE cliente 2.- ALTER TABLE cliente
ADD COLUMN salario DROP COLUMN salario;
INT;
3.- ALTER TABLE cliente 4.- ALTER TABLE cliente
ADD COLUMN salario ADD INDEX
DOUBLE; salario_ind (salario);
Tabla 2.8: Ejemplos de ALTER TABLE

DROP TABLE: DROP TABLE permite eliminar una o ms tablas.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 212

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Sintaxis:
DROP TABLE [IF EXISTS] nombre_tabla[, nombre_tabla2,.]
...
Ejemplo
DROP TABLE personal, asegurados;

5. Sentencias DML
INSERT: Sentencia usada para insertar datos en una tabla:

Sintaxis:
INSERT INTO
nombre_tabla[(nombre_columna1,nombre_columna2,..,..)]
VALUES(valor1,valor2,..);
Es posible usar INSERT con SELECT para insertar muchas filas en una sola sentencia.
INSERT INTO nombre_tabla1 (col1,col2,...) SELECT
col1,col2,.. FROM nombre_tabla2;
Ejemplos:
INSERT INTO cliente values (1,'Juancho',54121);
INSERT INTO cliente values (2,
'Luis',45687.25),(3,'Pedro',5487.54),(4,'Pedro',54877.59),
(5,'Pedro',54875.25),(6,'Pablo',125478.25),(7,'Nelson',126
57.36),(8,'Nelson',54875.25) ,(9,'Jesus',5647.25)
,(10,'Jesus',5487) ,(11,'Miguel',45877)
,(12,'Miguelina',45877) ,(13,'Pedrito',458377);
INSERT INTO factura values(1,1,5878787.26);
CARGAR DATOS DESDE UN ARCHIVO (LOAD DATA): Para cargar datos en una
tabla desde un archivo externo se usa la sentencia LOAD DATA.

Sintaxis:
LOAD DATA LOCAL INFILE "nombre_archivo"
INTO TABLE nombre_tabla
[FIELDS
[TERMINATED BY '\t']
]
[LINES
[STARTING BY '']
[TERMINATED BY '\n']
]

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 213

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

La sentencia LOAD DATA permite especificar cul es el separador de columnas, y el


separador de registros, por defecto el tabulador es el separador de columnas (campos),
y el salto de lnea (ENTER) es el separador de registros, que en este caso son
suficientes para que la sentencia LOAD DATA lea correctamente el archivo.

Ejemplo:
mysql> LOAD DATA LOCAL INFILE "personal.txt" INTO TABLE
personal;
En el ejemplo anterior la tabla personal debe existir en la base de datos.
UPDATE: La sentencia UPDATE es usada para actualizar valores de columnas de una
tabla. La clusula SET indica cual o cuales columna(s) va(n) a ser modificada(s) y los
nuevos valores. La clusula WHERE es usada para especificar las filas que van a ser
afectadas. La clusula LIMIT indica la cantidad mxima de filas (registros) que van a ser
actualizadas.
Sintaxis:
UPDATE nombre_tabla
SET nombrecol1=valor, [nombrecol2=valor, ...]
[WHERE Condicin]
[LIMIT #];
Ejemplo:
UPDATE cliente
SET nombre='Luis'
Where id_cliente=1;
DELETE: La sentencia DELETE es usada para eliminar registros de una tabla.

Sintaxis:
DELETE FROM nombre_tabla DELETE < nombrecolumna1>,<
[WHERE Condicin] nombrecolumna2>......
[ORDER BY ....] FROM
nombretabla1,nombretabla2.
[LIMIT #]; ..
LIMIT permite definir el [WHERE Condicin];
nmero de registros a
ser eliminados. Esta sentencia permite
eliminar registros de una
ORDER BY permite o varias tablas.
especificar un orden
para los datos que van a
ser eliminados(primero
los ordena y despus
elimina la cantidad de
registros especificados,

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 214

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

desde el comienzo al
final).
Tabla 2.9: Sintaxis para DELETE

Ejemplos:
DELETE FROM cliente WHERE id_cliente=5;
DELETE FROM cliente ORDER by nombre LIMIT 1;
DELETE cliente,factura FROM cliente,factura where
cliente.id_cliente = factura.id_cliente;
Esta sentencia elimina registros tanto de la tabla cliente
como factura.
Tabla 2.10: Ejemplo de DELETE

6. Sentencias DQL
SELECT: La sentencia SELECT se usa para recuperar filas seleccionadas de una o
ms tablas.

Sintaxis:
SELECT [ALL | DISTINCT | DISTINCTROW]
nombrecolumna1,nombrecolumna2,....
FROM tabla1[,tabla2...]
WHERE condiciones
[GROUP BY (nombre_col)]
[HAVING condiciones]
[ORDER BY nombre_col]
[ASC | DESC]
[LIMIT contador]

Ejemplo:
SELECT * FROM cliente;
Cada nombrecolumnax indica una columna que se quiere recuperar, tablax indica la
tabla o tablas de las que se recuperan filas (Esta sintaxis describe un JOIN),
condiciones_where consiste de la palabra clave WHERE seguida por una expresin que
indica la condicin o condiciones que las filas deben satisfacer para ser seleccionadas.

SELECT puede usarse tambin para recuperar filas calculadas sin referencia a ninguna
tabla. Por ejemplo:
SELECT 5 - 3;

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 215

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Todas las clusulas deben ser usadas en el mismo orden que se muestra en la
descripcin de la sintaxis.

DISTINCT y DISTINCTROW: Son usadas para restringir la aparicin de filas repetidas.

Ejemplo.
SELECT [DISTINCT | DISTINCTROW] nombre FROM cliente;
WHERE: La mejor utilidad de una base de datos es la posibilidad de hacer consultas en
funcin de ciertas condiciones. Generalmente, ser de inters saber qu filas se ajustan
a determinados parmetros. Esto se realiza con la clusula WHERE del SELECT.

Ejemplo:
SELECT * FROM cliente WHERE nombre='Luis';
ALIAS: El alias se usa como un nombre de columna en expresiones para la salida de la
consulta, tambin es posible definir alias a las tablas de la clusula FROM.

Por ejemplo:
SELECT CONCAT(nombre,', ',salario) AS Nombre_Salario
FROM cliente ORDER BY Nombre_Salario;
El AS es opcional cuando se define un alias sobre una expresin o columna. El ejemplo
anterior se puede escribir como:
SELECT CONCAT(nombre,', ',salario) Nombre_Salario
FROM cliente ORDER BY Nombre_Salario;
Para definir alias a una referencia de una tabla se usar la siguiente sintaxis:
SELECT t1.col1, t2.col2 FROM tabla1 AS t1, tabla2 AS t2
WHERE t1.col1 = t2.col2;
GROUP BY: Es posible agrupar filas en la salida de una sentencia SELECT usando la
clusula GROUP BY.

Ejemplo:
SELECT id_cliente, nombre FROM cliente GROUP BY nombre;

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 216

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 2.9: Ejecucin de Consulta con GROUP BY

La principal utilidad de la clusula GROUP BY es que permite usar funciones de


resumen o reunin (funciones agregadas), tales como: COUNT(), MAX(), MIN(), SUM(),
AVG(), etc.

Ejemplo:
SELECT COUNT(nombre) FROM cliente GROUP BY nombre;

Figura 2.10: Ejecucin de Consulta usando COUNT y GROUP BY

HAVING: La clusula HAVING permite hacer selecciones sobre datos agrupados.


Observe un ejemplo:
SELECT nombre, count(nombre) FROM cliente GROUP BY nombre HAVING
COUNT(nombre) >= 2;

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 217

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 2.11: Ejecucin de Consulta usando COUNT, GROUP BY y HAVING

La salida para esta consulta es el nombre del cliente y la cantidad de veces que aparece
ese nombre, con la condicin de que slo se mostrarn los nombres que estn
repetidos ms de dos veces.

ORDER BY: Es usada para dar ordenamiento a los datos recuperados en una sentencia
SELECT.

Las columnas seleccionadas pueden ser referenciadas usando nombres de columna,


alias de columna o posiciones de columna. Las posiciones de columna son enteros que
empiezan en 1.

Para ordenar en orden inverso se aade la palabra clave DESC (descendente). Por
defecto el orden es ascendente, pero puede ser especificado explcitamente por la
palabra clave ASC. El uso de posiciones de columna no se aconseja, ya que esa
sintaxis ha sido eliminada de SQL estndar.

Ejemplo:
SELECT * FROM cliente ORDER BY id_cliente, nombre;

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 218

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 2.12: Ejecucin de Consulta usando ORDER BY

Sentencia equivalente:

SELECT * FROM cliente ORDER BY 1, 2;

Figura 2.13: Ejecucin de Consulta usando ORDER BY

LIMIT: La clusula LIMIT permite limitar el nmero de filas recuperadas por la sentencia
SELECT:

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 219

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Ejemplo:
SELECT * FROM cliente LIMIT 3;

Figura 2.14: Ejecucin de Consulta usando LIMIT

La salida de la anterior consulta slo muestra tres registros.

Operador IN: El operador IN se usa para realizar comparaciones con una lista de
valores.
SELECT * FROM cliente WHERE nombre = 'Jesus' OR nombre=
'Pedro' OR nombre='Nelson';
Esta sentencia puede ser reescrita como:
SELECT * FROM cliente WHERE nombre IN ('Jesus','Pedro','Nelson');

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 220

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 2.15: Ejecucin de Consulta usando IN

Operador BETWEEN: El operador BETWEEN se usa para comprobar si cierto valor est
dentro de un rango dado.

Por ejemplo, asuma que se est interesado en encontrar a todos los clientes que ganan
salarios dentro un rango de [$1,000 a $50,000] (ambos inclusive). Cmo se escribe
esta consulta?
SELECT id_cliente,nombre FROM cliente WHERE salario >=
1000 AND salario <= 50000;
La consulta anterior se puede escribir tambin usando el operador BETWEEN.
SELECT id_cliente,nombre FROM cliente WHERE salario
BETWEEN 1000 AND 50000;

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 221

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 2.16: Ejecucin de Consulta usando BETWEEN

Operador IS: Los operadores IS NULL e IS NOT NULL son utilizados para verificar si
una expresin determinada es o no nula.
SELECT * FROM cliente WHERE nombre IS NOT NULL;

Figura 2.17: Ejecucin de Consulta usando IS

Operador LIKE: Se usa para hacer comparaciones entre cadenas y patrones. El


resultado es verdadero (1) si la cadena se ajusta al patrn, y falso (0) en caso contrario.

Los patrones son cadenas de caracteres en las que se pueden encontrar en cualquier
posicin los caracteres especiales '%' y '_'.

% Es usado para hacer coincidir cualquier nmero de caracteres, incluso ninguno.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 222

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

_ Es usado para hacer coincidir con un nico carcter.

Ejemplo:
SELECT * FROM cliente WHERE nombre LIKE 'Miguel%';

Figura 2.18: Ejecucin de Consulta usando LIKE

7. Consultas Multitablas
Los datos estn distribuidos en diferentes tablas debido a la normalizacin. La
normalizacin se realiza para evitar la redundancia y para integrar los datos
almacenados en distintas tablas. Cuando el usuario quiere obtener informacin
completa consultando ms de una tabla, debe JOIN (UNIR) los datos de las distintas
tablas.

Personal
no_personal nombre_personal cargo salario no_division

Tabla Personal

Division
no_division nombre_division ubicacion

Tabla Division

A continuacin se presentan las sentencias de creacin de las tablas divisin y


personal:
CREATE TABLE division( CREATE TABLE personal(
no_personal INT NOT NULL
no_division INT NOT NULL
PRIMARY KEY,
PRIMARY
nombre_personal VARCHAR(20),
KEY,nombre_division
cargo VARCHAR(20),
VARCHAR(30),
salario DOUBLE,
ubicacion VARCHAR(40) no_division INT,
) TYPE = INNODB; FOREIGN KEY (no_division)

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 223

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

REFERENCES
division(no_division)
) TYPE = INNODB;
Tabla 2.11: Ejemplos de Definicin de Tablas

Sentencias de insercin de datos en las tablas antes creadas:


INSERT INTO division values (1, 'HARDWARE','CARACAS, VENEZUELA'),
(2,'REDES INALAMBRICAS','LA PAZ, BOLIVIA'),
(3,'SOFTWARE LATAM','CALI, COLOMBIA'),
(4,'CONTABILIDAD','BUENOS AIRES, ARGENTINA'),
(5,'INTELIGENCIA DE NEGOCIOS','MIAMI, USA');
INSERT INTO personal values
(1,'DOUGLAS BRAVO','ANALISTA',5487.36,1),
(2,'MARCO DIPOTO','GERENTE DIVISION',58795.54,1),
(3,'ENMANUEL GIVA','COORDINADOR',345766.58,2),
(4,'JOSE RUBIO', 'ANALISTA',98574.54,3),
(5,'RUBEN GAVIRIA','DIRECTOR',87547.5,4),
(6,'JOSE FREITES','JEFE DEPART',7854.34,5),
(7,'NELSON ARIAS','COORDINADOR',566567.4,5),
(8,'DIEGO PINEDA','GERENTE DIVISION',56784.98,2),
(9,'MIREYA VILLEGAS','JEFE DEPART',5687.25,3),
(10,'SEVASTIAN PINEDA','DIRECTOR', 56875.25,4);
Tabla 2.12: Ejemplos de Inserciones en las Tablas Division y Personal

PRODUCTO CARTESIANO (CARTESIAN JOIN): El producto cartesiano de dos tablas


son todas las combinaciones de todas las filas de las dos tablas. Usando una sentencia
SELECT se hace proyectando todos los atributos de ambas tablas. Los nombres de las
tablas se indican en la clusula FROM separados con comas:
SELECT * FROM personal, division;
INNER JOIN: Las composiciones internas (INNER JOIN) se definen a partir de un
producto cartesiano, eliminado las filas que no cumplen la condicin de composicin.
Estas composiciones se denominan internas porque en la salida no aparece ninguna fila
que no est presente en el producto cartesiano, es decir, la composicin se hace en el
interior del producto cartesiano de las tablas.

Ejemplo:
SELECT * FROM personal,division WHERE
personal.no_division=division.no_division;
Reescribiendo la sentencia anterior con JOIN:
SELECT <columnas> FROM tabla1 [INNER] JOIN tabla2 ON
<condiciones> | USING (Lista_columnas);

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 224

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

La coma que separa las tablas que se usan en una consulta y JOIN son equivalentes, y
la palabra INNER es opcional.

La condicin en la clusula ON puede ser cualquier expresin vlida para una clusula
WHERE, de hecho, en la mayora de los casos, son equivalentes.

La clusula USING permite usar una lista de atributos que deben ser iguales en las dos
tablas a componer.

Ejemplos:
Todos estos ejemplos son equivalentes:
SELECT * FROM personal JOIN division ON
(personal.no_division=division.no_division);
SELECT * FROM personal INNER JOIN division ON
(personal.no_division=division.no_division);
SELECT * FROM personal JOIN division USING(no_division);
Tabla 2.13: Ejemplo de Consultas Equivalentes

Si se desea elegir determinadas columnas de ambas tablas en lugar de seleccionar


todas, se puede hacer esto indicando en la sentencia SELECT el nombre(s) de las(s)
columna(s) que se quiere mostrar.

Ejemplo:
SELECT division.no_division,nombre_division,ubicacion,
no_personal,nombre_personal,cargo,salario FROM personal
INNER JOIN division ON
(personal.no_division=division.no_division);
En el ejemplo anterior la columna no_divisin existe en las dos tablas, por lo tanto, se
debe colocar el nombre de la tabla de donde se va a extraer la informacin. Para ello,
existe una sintaxis alternativa que permite obtener el mismo resultado sin tener que
especificar las columnas en la condicin.
SELECT * FROM personal NATURAL JOIN division;
RIGHT OUTER JOIN: La sentencia Right Outer JOIN hace corresponder los registros
de la tabla del lado derecho con los registros de la tabla del lado izquierdo basndose
en la igualdad de valores que se especifica en la condicin JOIN. Adems, tambin
incluye aquellos registros presentes en la tabla del lado derecho que no estn
asociados con los registros de la tabla del lado izquierdo.

Este tipo de JOIN es llamado Right Outer JOIN porque el valor de la columna de la tabla
del lado derecho es la base con la cual la comparacin y la operacin JOIN se realiza.
Si no hay valor asociado, se muestra el valor NULL.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 225

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Ejemplo:
SELECT * FROM personal RIGHT OUTER JOIN division ON
(personal.no_division=division.no_division);
Puede ser escrito como:
SELECT * FROM personal RIGHT OUTER JOIN division
USING(no_division);
LEFT OUTER JOIN: La sentencia Left Outer JOIN hace corresponder los registros de
la tabla del lado izquierdo con los registros de la tabla del lado derecho basndose en la
igualdad de valores que es especificada en la condicin JOIN. Adems, tambin incluye
aquellos registros presentes en la tabla del lado izquierdo, que no estn asociados con
los registros de la tabla del lado derecho.

Este tipo de JOIN es llamado Left Outer JOIN porque el valor de la columna de la tabla
del lado izquierdo es la base con la cual la comparacin y la operacin JOIN se realiza.
Para hacer la correspondencia de los registros de la segunda tabla, si no se puede
realizar la equivalencia de los valores, se muestra un valor NULL.

Ejemplo:
SELECT * FROM personal LEFT OUTER JOIN division ON
(personal.no_division=division.no_division);
Puede ser escrito como:
SELECT * FROM personal LEFT OUTER JOIN division USING
(no_division);
FULL OUTER JOIN No est implementado en MySQL.

SELF JOIN: Por definicin, un JOIN se aplica entre los valores de atributos comunes de
dos tablas o ms. En el caso de una tabla que tiene dos atributos, los cuales comparten
el mismo valor, un JOIN puede ser realizado en la misma tabla.

Por Ejemplo:
no_personal nombre no_gerente
1000 Andrew 600
2000 Raymond 400
3000 Mathew 200
200 Johnson
400 George
600 Tom
La siguiente consulta SQL ilustra el uso de Self JOIN:
SELECT S.nombre, M.nombre FROM personal S, personal M
WHERE S.no_gerente = M.no_personal;

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 226

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

8. Sub-consultas
Una sub-consulta es una sentencia SELECT dentro de otra sentencia MySQL da
soporte para cualquier forma de sub-consulta basado en el estndar SQL.
1:SELECT * FROM tabla1 WHERE col1 =(2:SELECT col1 FROM
tabla2);
1 Consulta Padre. 2 Consulta Hija.

Existen dos tipos de sub-consultas: correlacionadas y no-correlacionadas, cuando la


subconsulta hija hace referencia a una o ms columnas de la subconsulta padre se dice
que es una subconsulta correlacionada, si no existe referencia de las columnas
entonces se dice que es no-correlacionada.

Ejemplo sub-consulta no-correlacionada:


SELECT * FROM personal WHERE no_division = (SELECT
no_division FROM division WHERE
nombre_division='HARDWARE');
En el ejemplo anterior si la consulta interna retorna ms de un valor resultara en un
error, en estos casos cuando el resultado de la sub-consulta interna es un conjunto de
datos utilizamos operador IN.

Ejemplo de sub-consulta correlacionada:


SELECT division.nombre_division
FROM division
WHERE EXISTS (SELECT no_division
FROM personal
WHERE personal.no_division =
division.no_division);

9. Usuarios y Privilegios
MySQL implementa 5 niveles de privilegios:

Globales: Se aplican al conjunto de todas las bases de datos en un servidor. Es el nivel


ms alto de privilegio.

De base de datos: Se aplican a bases de datos individuales y a todos los objetos que
contiene cada base de datos.

De tabla: Se aplican a tablas individuales y a todas las columnas de esas tablas.

De columna: Se aplican a una columna en una tabla.

De rutina: Se aplican a los procedimientos almacenados (MySQL 5.x).

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 227

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

GRANT: Usando GRANT podemos crear un usuario y al mismo tiempo concederle


tambin los privilegios que tendr. La sintaxis es:
GRANT tipo_priv [(columnas)] [, tipo_priv [(columnas)]]
...
ON {nombre_tabla | * | *.* | nombre_bd.*}
TO usuario [IDENTIFIED BY [PASSWORD] 'password']
[,usuario [IDENTIFIED BY [PASSWORD] 'password']]
...
[WITH GRANT OPTION]

La opcin tipo_priv [(columnas)] permite definir el tipo de privilegio concedido para


determinadas columnas. La segunda ON {nombre_tabla | * | *.* | nombre_bd.*}, permite
conceder privilegios en niveles globales, de base de datos o de tablas.

En las sentencias GRANT y REVOKE puede usarse cualquiera de los siguientes


valores para tipo_priv

Privilegio Significado
ALL [PRIVILEGES] Activa todos los privilegios excepto GRANT OPTION.
ALTER Permite el uso de ALTER TABLE
CREATE Permite el uso de CREATE TABLE.
DELETE Permite el uso de DELETE.
DROP Permite el uso de DROP TABLE.
INDEX Permite el uso de CREATE INDEX y DROP INDEX.
INSERT Permite el uso de INSERT.
SELECT Permite el uso de SELECT.
SHOW Permite la sentencia SHOW DATABASES muestra todas las bases
DATABASES de datos.
UPDATE Permite el uso de UPDATE.
USAGE Permite conectarse a una base de datos, sin privilegios
GRANT OPTION Permite conceder privilegios.
Tabla 2.14: Descripcin de los Privilegios

Ejemplo (Esta sentencia solo puede ser ejecutada por el administrador del servidor de
base de datos):
GRANT USAGE ON *.* TO curso_turno IDENTIFIED BY 'clave';
Esta sentencia define el usuario curso_turno sin ningn tipo de privilegio sobre alguna
base de datos.

El usuario curso_turno podra conectarse al servidor de base de datos de la forma que


ya se conoce.
mysql -h localhost u curso_turno p clave

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 228

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Pero no podr hacer nada ms, ya que no tiene privilegios. No tendr, por ejemplo,
posibilidad de hacer consultas de datos, de crear bases de datos o tablas, insertar
datos, etc.

Para que un usuario pueda hacer algo ms que consultar algunas variables del sistema
debe tener algn privilegio. Lo ms simple es conceder el privilegio para seleccionar
datos de una tabla concreta. Esto se hara as:

La sentencia GRANT es tambin usada para otorgar privilegios a un usuario.


GRANT SELECT ON test.personal TO curso_turno;
El usuario curso_turno podr ver la base de datos test y dentro de est la tabla
personal. Adems, podr hacer consulta sobre la tabla personal, pero no podr aadir,
modificar ni eliminar, por supuesto tampoco podr crear o eliminar tablas ni base de
datos.

Para conceder privilegios globales se usa ON *.*, para indicar que los privilegios se
conceden en todas las tablas de todas las bases de datos.

Para conceder privilegios en bases de datos se usa ON nombre_db.*, indicando que los
privilegios se conceden sobre todas las tablas de la base de datos nombre_db.

Usando ON nombre_db.nombre_tabla, concedemos privilegios al usuario para la tabla y


base de datos especificada.

Para crear usuarios se debe tener el privilegio GRANT OPTION y slo se pueden
conceder privilegios que se posean.

REVOKE: Para revocar privilegios se usa la sentencia REVOKE, la sintaxis es similar a


la sentencia GRANT:
REVOKE tipo_priv [(columnas)] [, tipo_priv [(columnas)]]
...
ON {nombre_tabla | * | *.* | nombre_bd.*}
FROM user [, user] ....
Ejemplo:
REVOKE SELECT ON test.personal FROM curso_turno;
SHOW GRANT: Se puede ver qu privilegios se han concedido a un usuario mediante
la sentencia SHOW GRANTS. La salida de esta sentencia es una lista de sentencias
GRANT que se deben ejecutar para conceder los privilegios que tiene el usuario. Por
ejemplo:

Para mostrar los privilegios del usuario actual se ejecuta SHOW GRANTS:

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 229

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 2.19: Ejecucin de SHOW GRANTS

La salida de la sentencia SHOW GRANTS muestra dos partes: la primera consiste en


un nombre de usuario, en el ejemplo test. La segunda parte, que est separada de la
primera por el carcter @ es un nombre de mquina (host). Este nombre puede ser bien
el de una mquina, por ejemplo, localhost para referirse al ordenador local, cualquier
otro nombre o bien una direccin ip, esto indica dnde se le permite al usuario
conectarse al servidor MySQL.

La parte de la mquina es opcional, si no se coloca, el usuario podr conectarse desde


cualquier mquina. La salida de SHOW GRANTS lo indica usando el comodn '%' para
el nombre de la mquina.

Si creamos un usuario para una mquina o conjunto de mquinas determinado, ese


usuario no podr conectarse desde otras mquinas.

Ejemplo (Esta sentencia slo puede ser ejecutada por el administrador del servidor de
base de datos):
GRANT USAGE ON * TO curso_tarde@150.154.125.1 IDENTIFIED
BY 'clave';
El usuario curso_tarde slo puede conectarse desde el computador cuyo IP es
150.154.125.1.

Las mayores diferencias entre las versiones de GRANT del estndar SQL y de MySQL
son:

En MySQL, los privilegios estn asociados con una combinacin de usuario/contrasea


y no slo con un usuario.

El estndar SQL no tiene privilegios de nivel global o de base de datos, ni soporta todos
los tipos de privilegio que soporta MySQL.

Los privilegios del estndar SQL estn estructurados de forma jerrquica. Si se elimina
un usuario, todos los privilegios que tiene concedidos se revocan. Antes de MySQL
5.0.2, los privilegios concedidos no son revocados automticamente; deben ser
revocados directamente.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 230

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Con SQL estndar, cuando se elimina una tabla, todos los privilegios para la tabla son
revocados. Con SQL estndar, cuando se revoca un privilegio, todos los privilegios
concedidos basados en l son revocados tambin. En MySQL, los privilegios pueden
ser eliminados slo con la sentencia REVOKE explcita o mediante la manipulacin de
las tablas de concesin de MySQL.

En MySQL, si slo se posee el privilegio INSERT en algunas de las columnas de una


tabla, se pueden ejecutar sentencias INSERT en la tabla; las columnas para las que no
se posee el privilegio INSERT sern asignados sus valores por defecto. SQL estndar
requiere que se posea el privilegio INSERT en todas las columnas.

10. Respaldo y Restauracin de Base de Datos con el


Cliente MySQL
El programa cliente mysqldump es usado para respaldar una base de datos o
colecciones de base de datos, es muy til cuando se requiere transferir datos a otro
servidor de base de datos (no necesariamente un servidor MySQL), el archivo generado
contiene sentencias SQL de creacin de las tablas y de insercin de datos.

La sintaxis es la siguiente:

Ejecutar desde la lnea de comandos de Linux:


mysqldump nombre_bd u nombre_usuario p >
nombre_archivo_salida

Despus presione [ENTER] y coloque su contrasea, en el archivo estarn las


sentencias DDL y DML.

Ejemplo:
shell>mysqldump test u test p >respaldo.txt

Figura 2.20: Uso del mysqldump

El archivo respaldo.txt se crear en la ruta /home/db2admin.

Utilice el vi para mostrar parte del contenido del archivo respaldo.txt


shell>vi respaldo.txt

Observe la siguiente Figura 2.21:

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 231

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 2.21: Contenido del Archivo respaldo.txt

Para restaurar las tablas simplemente basta con ejecutar las sentencias SQL en la lnea
de comandos del cliente MySQL.

11. Ejecucin de Sentencias SQL con el MySQL Query


Browser
Una de las herramientas ms usadas para enviar sentencias SQL al servidor MySQL, es
el cliente MySQL Query Browser; esta herramienta ofrece un ambiente grfico, muy
amigable e intuitivo.

Para la ejecucin de sentencias SQL, lo primero por hacer es conectarse a un servidor


MySQL.

Ubique y presione el botn de exploracin e inicio de aplicaciones, ubique aplicaciones


y seleccione MySQL Query Browser, a continuacin se desplegar la ventana de inicio
de aplicacin.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 232

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 2.22: Inicio de Aplicacin

En la Figura 2.21 se muestra la ventana de inicio y conexin de la aplicacin MySQL


Query browser. Coloque en el cuadro de texto Server Hostname la informacin
referente al servidor de MySQL al cual desea conectarse, en el cuadro Username el
nombre de usuario, en la casilla Password la contrasea de usuario, en el cuadro
Default Schema el nombre de la base de datos que desea se active la conexin y el
Port (nmero del puerto) por cual la aplicacin cliente se va a conectar al servidor, los
datos de ingreso sern suministrados por el instructor.

Si la verificacin en las tablas de concesin result exitosa, se da acceso al usuario al


ambiente de ejecucin de sentencias SQL.

En la Figura 2.22 se muestra el ambiente principal del MySQL Query Browser, la


ejecucin de sentencias se realiza en forma grfica.

En el editor de sentencias SQL coloque lo siguiente:


SELECT * FROM personal;
Presione el botn [Execute].

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 233

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 2.23: Ventana Principal de MySQL Query Browser

Para crear una tabla usando el asistente coloque el cursor sobre la ventana de
navegador de objetos, presione botn derecho y seleccione Create Table.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 234

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Figura 2.24: Ejecucin de Consulta

A continuacin se muestra el asistente para crear tablas.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 235

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Figura 2.25: Asistente para Crear Tablas

Con este asistente es posible definir tablas, columnas y tipos de datos de columnas
entre otras cosas.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 236

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de:
Describir el lenguaje SQL.
Describir los tipos de datos soportados por MySQL.
Explicar qu son DDL, DML y DCL.
Describir los privilegios de MySQL.
Escribir una sentencia SELECT simple.
Escribir una sentencia SELECT condicional.
Escribir consultas multitablas.
Generar respaldo de base de datos.
Ejecutar sentencias en el cliente MySQL.
Ejecutar sentencias en el cliente MySQL Query Browser.

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 237

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Unidad 2: Examen de Autoevaluacin


1) Cmo se llama la tabla que contiene la clave fornea?
a) Tabla Padre
b) Tabla Hija
c) Ninguna de las anteriores

2) La funcin COUNT(nombre de columna) cuenta los valores NULL de la columna


a) Verdadero
b) Falso
c) Depende de la consulta

3) Cul de los siguientes operadores se usa para verificar un patrn dentro de


cadenas de caracteres?
a) LIKE
b) AND
c) OR
d) IN

4) Cul comando permite mostrar las bases de datos a las cuales se tiene privilegio
de acceso?
a) SHOW TABLES;
b) SHOW DB;
c) SHOW TO DATABASE;
d) Ninguna de las anteriores

5) El Entero tinyint es representado con cuntos bytes?


a) 2
b) 3
c) 1
d) 4

6) Si una columna es definida como DECIMAL(5,2), Cules de los siguientes valores


pueden ser asignados a las columnas?
a) 21.536
b) 536.21
c) 536
d) 2314

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 238

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

7) Si una columna es definida como TIMESTAMP(4), Cul es un valor vlido para la


columna?
a) 20060615031020
b) 050615
c) 0506
d) 05

8) Si se desea usar una tabla para almacenar datos temporales (slo se almacenan
en memoria principal), Cul de las sentencia es correcta?
a) CREATE TABLE persona (id INT, nombre VARCHAR(20)) ENGINE=INNODB;
b) CREATE TABLE persona (id INT, nombre VARCHAR(20));
c) CREATE TABLE persona (id INT, nombre VARCHAR(20)) ENGINE=HEAP;
d) Ninguna de las anteriores

9) Las claves forneas pueden ser definidas sobre cualquier motor de


almacenamiento, pero slo tienen sentido en uno de ellos, Cul de los siguientes
es la opcin correcta?
a) INNODB
b) MyISAM
c) ISAM
d) HEAP

10) El comando VERSION() permite mostrar informacin referente a:


a) La versin del servidor MySQL
b) La versin del Sistema Operativo del Cliente
c) La versin del cliente mysql
d) Ninguna de las anteriores

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 239

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Respuestas a Unidad 2: Examen de Autoevaluacin


1) b
2) b
3) a
4) d
5) c
6) b, c y d
7) c
8) c
9) a
10) a

Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 240

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

Unidad 3: Lab. de Ejecucin de


Sentencias SQL sobre MySQL
Objetivos de Aprendizaje
Al finalizar esta unidad, usted ser capaz de:

Utilizar la herramienta de interfaz de usuario para escribir consultas y obtener


datos de la base de datos.
Escribir sentencias SQL SELECT simples y complejas para obtener datos de la
base de datos.

Libro 1: Base de Datos I Unidad 3: Lab. de Ejecucin de Sentencias SQL sobre MySQL 241

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

Ejercicios de Laboratorio
Este laboratorio se puede llevar a cabo usando el cliente MySQL Query Browser o
cliente mysql.

Parte 1:

1) Invoque alguna de las herramientas SQL el cliente MySQL Query Browser o cliente
mysql, use el usuario mysqladmin y password mysqladmin

2) Use la base de datos test predefinida en MySQL.

Se necesita crear una estructura de tabla para almacenar datos. Ejecute las siguientes
sentencias SQL para crear las tablas (En los archivos que estn en la carpeta
estudiante se encuentran todas las sentencias de creacin de los objetos de base de
datos).

CREATE TABLE estudio(


id_estudio VARCHAR(6) NOT NULL PRIMARY
KEY,
nombre VARCHAR(100),
pais VARCHAR(30)) ENGINE=INNODB;

CREATE TABLE actor(


id_actor VARCHAR(6) NOT NULL PRIMARY
KEY,
nombre VARCHAR(40),
pais VARCHAR(40),
sexo VARCHAR(1),
fecha_nacimiento date,
comision REAL) ENGINE=INNODB;

CREATE TABLE pelicula(


id_pelicula VARCHAR(6) NOT NULL PRIMARY
KEY,
titulo VARCHAR(100),
anno VARCHAR(4),
duracion time,
costoproduccion REAL,
ganancia REAL,

Unidad 3: Lab. de Ejecucin de Sentencias SQL sobre MySQL Libro 1: Base de Datos I 242

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

id_estudio VARCHAR(6),
FOREIGN KEY (id_estudio) REFERENCES estudio(id_estudio))
ENGINE=INNODB;

CREATE TABLE elenco(


id_actor VARCHAR(6) NOT NULL,
id_pelicula VARCHAR(6) NOT NULL,
papel VARCHAR(40),
salario REAL,
PRIMARY KEY(id_actor,id_pelicula),
FOREIGN KEY (id_actor) REFERENCES actor(id_actor),
FOREIGN KEY (id_pelicula) REFERENCES
pelicula(id_pelicula)
) ENGINE=INNODB;

A continuacin inserte los siguientes datos:


INSERT INTO actor VALUES ('000010','CHRISTINE
HAAS','CANADA','M','01-01-1965',52750.00);
El formato por defecto para las fechas es AAAA-MM-DD.

Inserte ms registros dentro de la tabla actor. Los registros que son insertados estn
disponibles en un formato tabular.
Tabla actor:
ID_ACTOR NOMBRE PAIS SEXO FECHA_NACIMIENTO COMISION
000010 CHRISTINE HAAS CANADA F 01/01/1965 4220.00
000020 MICHAEL THOMPSON USA F 10/10/1973 3300.00
000030 SALLY KWAN USA F 04/05/1975 3060.00
000050 GABRIELA VERGARA COLOMBIA M 08/17/1949 3214.00
000060 IRVING STERN GUATEMALA M 09/14/1973 2580.00
000070 EVA PERON ARGENTINA F 09/30/1945 2893.00
000090 EILEEN DASILVA BRASIL F 08/15/1970 2380.00
000100 THEODORE SPENSER ECUADOR M 06/19/1980 2092.00
000110 VINCENZOLUCCHESSI USA M 05/16/1958 3720.00
000120 SEAN OCONNELL USA M 12/05/1963 2340.00
000130 DOLORES QUINTANA CUBA F 07/28/1971 1904.00
000140 HEATHER NICHOLLS USA F 12/15/1976 2274.00
000150 BRUCE ADAMSON USA M 02/12/1972 2022.00
000160 PATRICIA VELASQUEZ VENEZUELA F 10/11/1977 1780.00
000170 MASATOSHIYOSHIMURA JAPON M 09/15/1978 1974.00
000180 MARILYN SCOUTTEN USA F 07/07/1973 1707.00
000190 JA WA CHINA F 07/26/1974 1636.00
000200 DAVID BROWN USA M 03/03/1966 2217.00
000210 WILLIAM HEIMANN USA M 04/11/1979

Libro 1: Base de Datos I Unidad 3: Lab. de Ejecucin de Sentencias SQL sobre MySQL 243

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

000220 JENNIFER LUTZ USA F 08/29/1968 2387.00


000221 TOBEY MAGUIRE USA M 07/21/1981 2547.54
000222 ARNOLD SCHWARZENEGGER USA M 07/30/1947 7854.87
000223 SANDAHL BERGMAN USA F 11/14/1951 4587.45
000224 RACHAEL LEIGH COOK USA F 10/14/1942 3544.25
000225 TOM CRUISE USA M 05/03/1967 9999.99

Tabla estudio:
ID_ESTUDIO NOMBRE PAIS
000001 AOL TIME-WARNER USA
000002 WARNER BROS USA
000003 PIXAR USA
000004 WALT DISNEY USA
000005 20TH CENTURY FOX USA
000006 SONY PICTURES USA
000007 METRO-GOLDWYN-MAYER (MGM) USA
000008 PARAMOUNT USA
000009 UNIVERSAL STUDIOS USA
000010 RKO PICTURES USA
000011 FILMAX USA

Tabla pelicula:
ID_PELICULA TITULO AnnO DURACIN COSTPRODUCCION GANANCIA ID_ESTUDIO
0000A1 SPIDERMAN 2002 1:21 h 70M 80M 000006
0000A2 EL MAGO DE OZ 1939 1:00 h 35M 70M 000007
0000A3 REGRESO AL FUTURO 1985 1:16 h 90M 180M 000009
0000A4 GHOST 1990 1:24 h 27M 80M 000008
0000A5 CASABLANCA 1942 1:02 h 87M 99M 000007
0000A6 JUANA DE ARCO 1948 1:43 h 150M 165M 000010
0000A7 EL EXORCISTA 1973 1:24 h 115M 160M 000002
0000A8 FANTASIA 2000 1999 1:15 h 175M 221M 000004
0000A9 ALIEN 3 1992 1:15 h 75M 10M 000005
000A10 LA MOSCA 1958 1:20 h 45M 35M 000005
000A11 LA MOMIA REGRESA 2001 1:20 h 120M 120M 000009
000A12 GUERRA DE LOS MUNDOS 2006 1:20 h 120M 150M 000008
000A13 CONAN EL BRBARO 1982 1:15 h 10M 50M 000009
000A14 DESTINO FATAL 2006 1:30 h 45M 21M 000011

(h) Representa Horas


(M) Representa Millones de Dlares

Tabla elenco:
ID_ACTOR ID_PELICULA PAPEL SALARIO
000221 0000A1 PROTAGONISTA 12000000
000160 000A11 PROTAGONISTA 3500000
000222 000A13 PROTAGONISTA 1542458
000223 000A13 CONTRAFIGURA 354045
000224 000A14 PROTAGONISTA 72541
000010 000A14 OFICINISTA 22104
000225 000A12 PROTAGONISTA 4454754
000020 000A12 CONTRAFIGURA 35487
000020 000A13 ZAPATERO 7541

Unidad 3: Lab. de Ejecucin de Sentencias SQL sobre MySQL Libro 1: Base de Datos I 244

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Gua del Estudiante Base de Datos I

000020 0000A3 CONDUCTOR 54541


000010 0000A4 VENDEDOR 45788
000020 0000A5 PORTERO 3547
000060 0000A9 POLICIA 47571
000050 000A10 PROTAGONISTA 547451
000060 0000A7 PADRE 1541

Recuerde que el formato para las fechas es AAAA-MM-DD

Nota: El nombre y apellido de cada actor se almacena en la columna nombre de la tabla


actor.

Parte 2:

1) Se ejecutar exitosamente la siguiente sentencia SQL?

SELECT * FROM actor;

Nota: La sentencia SQL anterior contiene muchos espacios en blanco entre las
palabras.

2) Listar el pas del estudio MGM.

3) Listar los nombres y apellidos de los actores que participaron en pelculas


realizadas en 1982, o en alguna pelcula que contenga la palabra FATAL en el
ttulo.

4) Quin fue el protagonista masculino de GUERRA DE LOS MUNDOS?

5) Liste el nombre y apellido de los actores y el tiempo de duracin de las pelculas


que tienen un tiempo de duracin mayor que la pelcula REGRESO AL
FUTURO

6) Muestre el ttulo y duracin de todas las pelculas producidas por los estudios
20TH CENTURY FOX, ordenando ascendentemente la salida por duracin.

7) Liste los nombres y apellidos de los actores (MASCULINOS) que han sido
protagonistas y su pas de procedencia es USA.

8) Liste los nombres y apellidos de los actores que aparecen en las pelculas
producidas por la UNIVERSAL STUDIOS. (Si un actor aparece varias veces
mostrarlo slo una vez)

9) Escriba una consulta para mostrar la suma de la duracin de todas las pelculas
de cada estudio, muestre id_estudio, nombre estudio y totalduracion.

10) Escriba una consulta para mostrar la cantidad de pelculas realizadas por cada
estudio, muestre id_estudio, nombre estudio y cantidad_pelculas.

Libro 1: Base de Datos I Unidad 3: Lab. de Ejecucin de Sentencias SQL sobre MySQL 245

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.
Base de Datos I Gua del Estudiante

11) Escriba una consulta para mostrar el nombre, apellido, pas y comisin de los
actores que trabajaron en las pelculas de los aos 1930 hasta el 2000. Ordene
la consulta en orden ascendente segn la comisin

12) Escriba una consulta para mostrar por cada estudio la pelcula que obtuvo ms
ganancias entre los aos 1970 al 2000, muestre el id_estudio, titulo de la
pelcula, ao de la pelcula, duracin y la ganancia.

13) Muestre el nombre, apellido, pas y sexo de cada actor que tiene una comisin.

14) Muestre el nombre, apellido, pas y la comisin para todos los actores. Ordene
los datos en forma descendente segn la comisin.

15) Muestre el nombre y apellido de todos los actores en donde la tercera letra de su
nombre sea C.

16) Muestre el titulo de todas las pelculas que obtuvieron una ganancia superior al
50% del costo de produccin.

17) Muestre el nombre y apellido de todos los actores que nacieron entre 1920 y
1980 (ambos inclusive).

18) Listar los nombres y apellidos de los actores que tienen comisin superior al
promedio de las comisiones todos los actores.

19) Listar los nombres y apellidos de los actores que contienen la letra Z como
parte del nombre o apellido.

20) Listar el nombre y apellido del actor que obtuvo el mayor salario en la pelcula
GUERRA DE LOS MUNDOS

21) Use la sentencia LEFT OUTER JOIN para mostrar los datos de las tablas
estudio-pelcula.

22) Muestre slo los tres primeros registros de la tabla actor ordenados
ascendentemente por pas.

23) Muestre slo los cinco primeros registros de la tabla pelcula ordenados
descendentemente por ganancia.

24) Eliminar los datos de las tablas actor, estudio, pelcula y elenco.

25) Eliminar las tablas actor, estudio y pelcula.

Unidad 3: Lab. de Ejecucin de Sentencias SQL sobre MySQL Libro 1: Base de Datos I 246

Copyright IBM Corp. 2007


Los materiales del curso no pueden ser reproducidos total o
parcialmente sin el previo permiso escrito de IBM.