Documente Academic
Documente Profesional
Documente Cultură
Esta publicacin ha sido producida usando Microsoft Word 2000 y Microsoft PowerPoint
2000 para Windows.
Marcas Registradas
DB2
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
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
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
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 los diversos tipos de usuarios que utilizan los DBMS:
5. Modelos de Datos
Un modelo de datos es la estructura subyacente de una base de datos.
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.
En este modelo, se representan una o ms tablas que contienen los datos y las
relaciones entre los diferentes datos.
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
Cdigo-Disciplina Disciplina
A1 Ingeniera Qumica
A2 Ingeniera Civil
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.
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.
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.
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.
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 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.
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.
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
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.
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.
Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de:
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.
Nota: A excepcin del paso 4 (diseo fsico), el resto de los pasos son actividades
independientes del DBMS.
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.
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:
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.
A veces, se pueden utilizar dos o ms atributos juntos para formar la clave. Tales claves
se conocen como compuesto o claves compuestas.
Las asociaciones en los datos, tales como un cliente ha pedido ciertas mercancas se
llaman relaciones. La relacin, en este caso, es ha pedido.
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.
Los grupos del mismo tipo de objetos se denominan tipos de entidad o conjunto de
entidad.
5.2 Relaciones
Las entidades son conectadas con otras entidades por relaciones. Una relacin
representa un conjunto de conexiones entre los objetos.
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.
5.3 Cardinalidad
5.4 Opcionalidad
Una relacin puede ser opcional o mandatoria. La opcionalidad puede ser diferente a
cada lado de la relacin.
5.5 Diagrama ER
Artculo.
Las Figuras 2.9, 2.10 y 2.11 son representaciones esquemticas de las relaciones entre
las entidades.
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.
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.
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.
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:
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.
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.
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).
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.
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.
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 6: Examinar cada tipo de entidad para ver cmo se relaciona con otras entidades.
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.
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.
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.
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.
IdCertifica FechaEmision
Modelo Serial
Carro Certificadode
Color tiene
Circulacion
Placa Marca
Tipo Idpropietario
Ao
Clave
fornea
Tabla Carro
Serial Modelo Color Placa Ao Marca IdCertificado
Tabla CertificadodeCirculacion
Clave IdCertificado IdPropietario Tipo FechaEmisin
Primaria
Clave
Primaria
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.
Carro
Color tiene Puerta
Placa Marca
Tipo Color
Ao
Tabla Carro
Serial Modelo Color Placa Ao Marca
Clave
Clave Fornea
Primaria
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.
Clave
Primaria
Tabla Libro
Clave
Primaria Idlibro Titulo cant_paginas Genero Ao Editorial
Tabla Relacin
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.
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.
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.
El primer paso es identificar todas las ocurrencias de ese nombre de curso y despus
reemplazarlo por el nombre dado.
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
Esto fue slo una introduccin a la normalizacin, las siguientes secciones profundizan
este tema.
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.
2. Necesidad de Normalizar
Existen varias ventajas para normalizar y algunas de ellas se listan a continuacin:
2.1 Flexibilidad
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.
La relacin entre las tablas se dice que est en 1NF si satisface las siguientes
condiciones:
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.
El precio unitario de los artculos tambin se repite para cada orden, si el artculo se
incluye en varias rdenes.
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.
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.
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
Item
IdItem Nombre Precio
Item Unitario
1 Martillo $25
2 Sierra $30
3 Clavos $40
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.
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.
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.
Cliente
IdCliente Cliente EmailCliente Puntos
Credito
1 Joe Smith joe@iewr.com 1
2 Sam sam@ter.com 4
PuntosCredito
Puntos Grado
Credito
1 A
2 A
3 A
4 B
5 B
6 B
7 C
8 C
9 C
Tabla Orden
IdOrden FechaOrden IdCliente
1 11/30/1998 1
2 12/3/1998 2
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.
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.
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
PremiosRecibidos
Persona PremiosRecibidos
Scott Grammy
Scott Oscar
Scott Premio Nobel
3.5 Conclusin
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.
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.
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'.
Luego de iniciar sesin en eclipse aparece la pantalla que muestra la Figura 5.2.
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:
Seleccione el directorio donde desea almacenar los archivos, haciendo clic en los
directorios que muestra la Figura 5.4.
Para crear una nueva carpeta escriba el nombre de la misma en el espacio sealado en
la Figura 5.5.
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
folders (Crear fuentes y carpetas por separado) como se muestra en la Figura 5.11.
Una vez que se tiene un proyecto para trabajar, se puede iniciar la sesin en Azzurri
Clay, como lo muestra la Figura 5.13.
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
Figura 5.14: Seleccin del Diagrama de Diseo de Base de Datos Azzurri Clay
Figura 5.15 Seleccin de los parmetros necesarios para crear un Diagrama en Azzurri
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.
Opcin Descripcin
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
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:
nombre carcter
fechaing fecha
nombre carcter
relacion carcter
El atributo relacion es el parentesco que existe con el empleado, por ejemplo: hijo,
padre, madre y esposa.
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)
ya se ha creado la nueva clave nica, tal como se puede observar en la Figura 5.30.
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.
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.
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
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 .
Parmetro Descripcin
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)
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
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.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.
Resumen
Ahora que ha completado esta unidad, usted debe 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.
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.
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.
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:
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.
Luego ingrese la sentencia y presione las teclas Control + Enter o haga clic sobre el
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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';
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 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
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
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;
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.
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
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.
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.
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
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.
Nombre Completo
-------------------------------
Mike.Dennis
Susan.Ikelar
Rob.Heimann
Sarah.Connors
Lenguaje de Consulta Estructurado
Unidad 1: Lenguaje de Consulta Estructurado -Fundamentos 121
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;
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.
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.
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.
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
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
Ejercicios de Laboratorio
Este laboratorio se puede llevar a cabo usando la herramienta de MySQL Lnea de
Comandos, disponibles en su laboratorio.
Los Ejercicios 1 y 2 son para construir los datos para esta sesin de laboratorio.
Ejercicio 1:
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.
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
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:
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.
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.
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.
Divisin
no_division nombre_division ubicacion
Las sentencias SELECT de SQL que obtienen y combinan datos de mltiples tablas
son llamadas JOINS.
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:
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
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 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:
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.
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.
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 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.
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
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
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.
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.
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.
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.
Subconsulta Correlacionada
WHERE EXISTS;
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.
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.
Resumen
Ahora que ha completado esta unidad, usted debe ser capaz de:
6) Dos tablas a las cuales se les aplica el Self JOIN son tablas diferentes con las
mismas columnas.
a) Verdadero
b) Falso
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.
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
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
... ... ... ...
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
.. ... ...
1. Introduccin
En esta unidad, se presentan algunos de los conceptos fundamentales del Sistema de
Administracin de Base de Datos Relacional MySQL.
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.
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.
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.
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.
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.
Privilegios Contexto
http://dev.mysql.com/downloads/administrator.
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:
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).
Server Logs (Claves del Servidor): Con esta herramienta es posible configurar
y/o consultar los archivos logs que genera el servidor.
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.
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
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 199
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 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.
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
Ejemplo:
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> select version(), current_DATE;
Version(): Permite mostrar la versin del servidor MySQL que se tiene instalado.
Current_Date(): Muestra la fecha actual del servidor.
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 201
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:
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;
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
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;
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
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)] [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)] [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)] [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)] [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)] [UNSIGNED]
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 204
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)] [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)] [UNSIGNED]
DECIMAL[(M[,D])] [UNSIGNED]
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.
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 205
Tamao Formato
14 aaaammddhhmmss
12 aammddhhmmss
8 aaaammdd
6 aammdd
4 aamm
2 aa
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.
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
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.
4. Sentencias DDL
CREATE DATABASE: Permite crear una base de datos, la sintaxis es la siguiente:
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:
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
INDEX(nombre_columna(s))])
[ENGINE | TYPE={INNODB |
MYISAM | HEAP}];
3) CREATE TABLE
nombre_tabla
LIKE nombre_otra_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.
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.
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 208
Sintaxis:
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 209
Ejemplo:
DESCRIBE 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
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
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;
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.
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 211
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];
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
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 212
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
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
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
Todas las clusulas deben ser usadas en el mismo orden que se muestra en la
descripcin de la sintaxis.
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
Ejemplo:
SELECT COUNT(nombre) FROM cliente GROUP BY nombre;
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 217
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.
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
Sentencia equivalente:
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
Ejemplo:
SELECT * FROM cliente LIMIT 3;
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
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
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;
Los patrones son cadenas de caracteres en las que se pueden encontrar en cualquier
posicin los caracteres especiales '%' y '_'.
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 222
Ejemplo:
SELECT * FROM cliente WHERE nombre LIKE 'Miguel%';
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
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 223
REFERENCES
division(no_division)
) TYPE = INNODB;
Tabla 2.11: Ejemplos de Definicin de 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
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
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
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
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.
9. Usuarios y Privilegios
MySQL implementa 5 niveles de privilegios:
De base de datos: Se aplican a bases de datos individuales y a todos los objetos que
contiene cada base de datos.
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 227
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.
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 228
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:
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.
Para crear usuarios se debe tener el privilegio GRANT OPTION y slo se pueden
conceder privilegios que se posean.
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
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:
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
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.
La sintaxis es la siguiente:
Ejemplo:
shell>mysqldump test u test p >respaldo.txt
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 231
Para restaurar las tablas simplemente basta con ejecutar las sentencias SQL en la lnea
de comandos del cliente MySQL.
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 232
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 233
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
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 235
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
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
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
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 238
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
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 239
Unidad 2: Ejecucin de Sentencias SQL con MySQL Libro 1: Base de Datos I 240
Libro 1: Base de Datos I Unidad 3: Lab. de Ejecucin de Sentencias SQL sobre MySQL 241
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
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).
Unidad 3: Lab. de Ejecucin de Sentencias SQL sobre MySQL Libro 1: Base de Datos I 242
id_estudio VARCHAR(6),
FOREIGN KEY (id_estudio) REFERENCES estudio(id_estudio))
ENGINE=INNODB;
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
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
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
Parte 2:
Nota: La sentencia SQL anterior contiene muchos espacios en blanco entre las
palabras.
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
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.
Unidad 3: Lab. de Ejecucin de Sentencias SQL sobre MySQL Libro 1: Base de Datos I 246