Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fundamentación:
Este curso permite a los estudiantes asistentes adquirir destreza en el
manejo de datos de sistemas que una determinada empresa o
institución que utilizan para su funcionamiento diario.
INTRODUCCION A BASES DE
DATOS Y SQL
Contenidos Mínimos:
•Conceptos Introductorios en la Gestión de Datos
•Conceptos Introductorios de sistemas de información
•Modelado de datos
•Bases de Datos Relacionales
•Operaciones en SQL
1
BASE DE DATOS
Bibliografía:
2
Archivos de almacenamiento de datos
Problemas
Redundancia: Datos repetidos en diferentes ficheros
- Bases de Datos
3
Base de Datos
Definición de James Martin
Base de Datos
Ambiente Actual
Software
SIST. APLICACION
Hardware
SIST. OPERATIVO
DBMS
BASE
DE
DATOS
4
Base de Datos
Organización Actual
BASE
DE
DATOS
Base de Datos
Problemas que intenta solucionar
5
Base de Datos
Sistema de Administración de Bases de Datos
6
Qué son las Bases de Datos?
Def. formal: Una Base de Datos es una colección de datos
persistentes que pueden compartirse e interrelacionarse.
Las B de D para funcionar requieren de un Sistema
Administrador de Bases de Datos!
El es básicamente un sistema para archivar en una computadora; o
sea un sistema computarizado cuyo propósito general es mantener
información y hacer que la misma esté disponible cuando se
solicite.
La información en cuestión puede ser cualquier cosa que se
considere importante para el individuo o la organización a la cual
debe servir el sistema.
USUARIOS
USUARIOS
DATOS
7
Qué son las Bases de Datos?
Def. formal: Una Base de Datos es una colección de datos
persistentes que pueden compartirse e interrelacionarse.
Persistentes: significa que los datos residen en un almacenamiento estable, tal
como un disco magnético.
Compartir: significa que una base de datos puede tener múltiples usos y
usuarios. Una base de datos proporciona una memoria común para varias
funciones en una organización.
Interrelación: significa que los datos almacenados como unidades separadas se
pueden conectar para mostrar un cuadro completo.
8
Bases de Datos
Ventajas
• Los datos pueden compartirse.
• Es posible reducir la redundancia.
• Es posible (hasta cierto grado) evitar la inconsistencia.
• Es posible brindar un manejo de transacciones.
• Es posible mantener la integridad.
• Es posible hacer cumplir la seguridad
• Es posible equilibrar los requerimientos en conflicto.
• Es posible hacer cumplir los estándares.
• Dá independencia de los datos.
Usuarios Usuarios
Finales Finales
Base de Base de
Datos Datos
9
Bases de Datos – Arq C - S
Red de Comunicaciones
Máquina Servidor
Base
de
Datos
Sitio 1
Clientes Clientes
Sitio 2
Servidor Servidor
Red de Comunicaciones
Clientes
Sitio 3 Servidor
Clientes
Servidor Sitio 4
10
Sistema de Información
Un Sistema es un conjunto de componentes relacionados entre sí que trabajan
para alcanzar un objetivo.
Los objetivos se cumplen mediante la interacción con el ambiente y funciones de
desempeño.
Un Sistema de Información acepta datos provenientes de su entorno, los
procesa y genera datos de salida para la toma de decisiones.
Sistema de Información
Proceso del desarrollo de sistemas de información
11
Sistema de Información
Objetivos del desarrollo de base de datos
El objetivo es crear una base de datos que proporcione un
recurso importante a una organización.
Para lograr este objetivo, la base de datos deben:
• dar servicio a una gran comunidad de usuarios,
• apoyar políticas corporativas,
• incluir datos de alta calidad y
• ofrecer un acceso eficiente.
Sistema de Información
Proceso de desarrollo de la base de datos
Sitio 1 Sitio 3
Red
Sitio 2
Sitio 4
12
Sistema de Información
Modelaje de Datos:
Es fundamental para diseñar una Base de Datos, y un sistema en
general, determinar cuales son los datos que se deben registrar, cuales
son las relaciones existentes entre ellos y que resultados se esperan
obtener.
Los datos que registremos deben tener las siguientes propiedades:
• Persistentes
• Compartidos
• Integrados (Interrelacionados, o sea que los datos almacenados
como unidades separadas se pueden conectar para mostrar un
cuadro completo)
Sistema de Información
Modelaje de Datos:
Las bases de datos contienen tanto ENTIDADES como RELACIONES
entre ENTIDADES.
Una ENTIDAD es un conjunto de datos generalmente sobre un tema, al
que puede accederse de forma conjunta. Una entidad puede
representar una persona, lugar, cosa o suceso; por ejemplo, una base
de datos de empleados contiene entidades como empleados,
departamentos y habilidades.
Las RELACIONES registran el vinculo entre estas ENTIDADES que
deben ser recordados. Por ejemplo muestran la asignación de los
empleados con los departamentos, las habilidades que poseen y su
historia salarial.
Una base de datos típica de un negocio puede tener cientos de
entidades y relaciones.
13
Sistema de Información
Modelaje de Datos:
Sistema de Información
Modelaje de Datos:
14
DIAGRAMA DE ENTIDAD RELACION
Símbolos básicos:
Tipo de Entidad:
Símbolo de Símbolo de
Entidad Relación
Nombre de
Entidad
Clave
Primaria
Nombre de
Atributo
Nombre de
Relación
15
DIAGRAMA DE ENTIDAD RELACION
Símbolos básicos:
Símbolo Interno
– Cardinalidad
MINIMA
CIRCULO:
admite
cardinalidad 0
16
DIAGRAMA DE ENTIDAD RELACION
Representación de Cardinalidades:
17
DIAGRAMA DE ENTIDAD RELACION
Representación de Cardinalidades:
Un Docente
Opción 1 puede ofrecer el
dictado de un
curso o ninguno
Varios Docente
puede ofrecer el
dictado de
Opción 2 varios cursos o
ninguno
Relaciones de 1 a 1
18
DIAGRAMA DE ENTIDAD RELACION
Representación de Cardinalidades:
19
Características de las Bases de Datos Relacionales
20
Elementos de las Bases de Datos Relacionales
• Cada atributo de una relación debe tener un nombre y un dominio. El dominio indica
los valores que pueden ser aceptados o asumidos por una columna de la relación.
•Los tipos de datos en un dominio pueden ser enteros, cadenas de texto, fecha, no
procedirales, etc
Condiciones:
•Cada atributo tiene un dominio
•El dominio indica el tipo de datos que será almacenado
•El dominio indica las restricciones en los valores que el atributo puede tomar
•El dominio indica si utiliza caracteres, números, solo dos letras, solo mayores que
cero, solo números enteros, etc.
•Los dominios deben ser atómicos, es decir que los valores contenidos en los atributos
no se puedan separar en valores de dominios mas simples.
•Como un dominio restringe los valores del atributo, puede ser considerado como una
restricción.
•Por ejemplo el atributo de sexo se puede definir un dominio de valores válidos ‘M’ y ‘F’
o en Fecha_nacimiento considerar fechas después del primero de enereo de 1960.
21
Elementos de las Bases de Datos Relacionales
•Clave única.- Cada tabla puede tener uno o más campos cuyos valores
identifican de forma única cada registro de dicha tabla, es decir, no pueden
existir dos o más registros diferentes cuyos valores en dichos campos sean
idénticos. Este conjunto de campos se llama clave única. Pueden existir varias
claves únicas en una determinada tabla, y a cada una de éstas suele llamársele
candidata a clave primaria.
•Clave primaria.- Una clave primaria es una clave única elegida entre todas las
candidatas que define unívocamente a todos los demás atributos de la tabla,
para especificar los datos que serán relacionados con las demás tablas. La
forma de hacer esto es por medio de claves foráneas. Sólo puede existir una
clave primaria por tabla y ningún campo de dicha clave puede contener valores
NULL.
•Clave foránea.- Una clave foránea es una referencia a una clave en otra
tabla, determina la relación existente en dos tablas. Las claves foráneas no
necesitan ser claves únicas en la tabla donde están y sí a donde están
referenciadas. Por ejemplo, el código de departamento puede ser una clave
foránea en la tabla de empleados. Se permite que haya varios empleados en un
mismo departamento, pero habrá uno y sólo un departamento por cada clave
distinta de departamento en la tabla de empleados.
•Clave índice.- Las claves índice surgen con la necesidad de tener un acceso
más rápido a los datos. Los índices pueden ser creados con cualquier
combinación de campos de una tabla. Las consultas que filtran registros por
medio de estos campos, pueden encontrar los registros de forma no secuencial
usando la clave índice.Las bases de datos relacionales incluyen múltiples
técnicas de ordenamiento, cada una de ellas es óptima para cierta distribución
de datos y tamaño de la relación. Los índices generalmente no se consideran
parte de la base de datos, pues son un detalle agregado. Sin embargo, las
claves índices son desarrolladas por el mismo grupo de programadores que las
otras partes de la base de datos.
22
Álgebra relacional y cálculo relacional.
•El álgebra y el cálculo relacional proveen la forma teórica para manipular una
Base de Datos relacional
23
Normalización.
Al modelar una base de datos, desearemos evitar puntos que crean confusión,
duplicación de la información y por ende, un mal funcionamiento y exploración
de la información. Entre las propiedades indeseables en un diseño de bases de
datos tenemos:
• Redundancia en la información.
• Incapacidad de representar cierta información.
• Registrar información que no sea identificable.
Esta forma normal elimina los valores repetidos dentro de una Base de
Datos.
24
Formas normales (Primera, segunda y tercera formas normales) .
La tabla EMPLEADOS repite información:
Una relación está en segunda forma normal (2FN) si y sólo si está en 1FN y
todos los atributos que no sean llaves dependen por completo de llave primaria,
Es decir que no existen dependencias parciales. (Todos los atributos que no son
clave principal deben depender únicamente de la clave principal).
En otras palabras podríamos decir que la segunda forma normal está basada en
el concepto de dependencia completamente funcional.
25
Formas normales (Primera, segunda y tercera formas normales) .
Una relación están en tercera forma normal (3FN) si y sólo si están en 2FN y
todos los atributos no llave dependen de manera no transitiva de la llave
primaria. En la práctica significa que se debe eliminar cualquier relación que
permita llegar a un mismo dato de dos o más formas diferentes y evitar la
redundancia
26
Reglas de CODD
Reglas de CODD
27
Estándar SQL.
1FN:
La regla de la Primera Forma Normal
establece que las columnas repetidas
deben eliminarse y colocarse en tablas
separadas.
Una tabla se encuentra en primera forma
normal si impide que un atributo de una
tupla pueda tomar más de un valor
(atómicos)
Los Pasos a seguir son:
Tenemos que eliminar los grupos repetidos.
Tenemos que crear una nueva tabla con la
clave de la tabla base y el grupo repetido.
28
Análisis del Ejemplo:
Esta tabla no cumple el requisito de la
Primera Forma Normal (1NF) de sólo tener
campos atómicos, pues el nombre del
lector es un campo que puede (y
conviene) descomponerse en apellido
paterno, apellido materno y nombres
Además existen libros con 2 autores por lo
que es conveniente colocarlos en su
propio registro
Resultado: 1FN
29
2FN:
30
Libro
Resultado:
2FN?
Lector
Recordemos…
Para que un sistema de Base de Datos se
encuentre en 2FN es NECESARIO que esté
en 1FN.
Como podemos observar la tabla Lector
fue separada por lo que debemos aplicar
las reglas de la 1FN que dice:
eliminar los grupos repetidos.
crear una nueva tabla con la clave de la tabla
base y el grupo repetido.
Sin embargo, sabemos que CodLibro no
identifica a la nueva tabla Lector y que si
lo introducimos estaríamos incumpliendo
la 2FN en la dependencia funcional de la
31
Resultado:
2FN
32
Lector
Libro
Libro
Préstamos
Tablas 2FN:
3FN:
Una tabla está normalizada en esta forma si todas las columnas que no son
clave son funcionalmente dependientes por completo de la clave primaria y
no hay dependencias transitivas. Una dependencia transitiva es aquella en
la cual las columnas que no son clave son dependientes de otras columnas
que tampoco son clave
Es decir, sucede cuando una tabla está en 2FN y además ningún atributo
que no sea clave depende transitivamente de las claves de la tabla, es por
ello que no ocurre cuando algún atributo depende funcionalmente de
atributos que no son clave.
Los Pasos a seguir son:
Determinar las columnas que son dependientes de otra columna no clave.
Eliminar esas columnas de la tabla base.
Crear una segunda tabla con esas columnas y con la columna no clave de la cual
son dependientes
33
Análisis del ejemplo:
En nuestro ejemplo en 2NF, la tabla Libro,
conserva información acerca del libro, los
autores y editoriales.
Como podemos ver, los datos del autor no
pertenecen a la tabla libro ya que solo
dependen TRANSITIVAMENTE de su
CodLibro. Lo mismo sucede con la
Editorial.
En un análisis mas profundo, nos
encontramos en la misma situación que la
tabla Lector, al no poder introducir la
clave base como parte de la tabla ya que
no cumpliríamos la 2FN y, para estar en
34
Libro
Resultado:
3FN? Libro Autor
Editorial
35
Ejemplo 2:
1FN
En la Tabla Alquiler los Datos que se
repiten son:
Codigo/Cliente
Nombre/Cliente
Direccion/Cliente
Telefono/Cliente
En la Tabla Casette los datos que se
repiten son:
Codigo/Actor
Nombre/Actor
Nacimiento/Actor
36
Resultado:
2FN
Introducimos Codigo/Autor y
Codigo/Cliente en la tabla alquiler, para
mantener la relación entre las tablas
Las otras tablas permanecen igual
37
Resultado:
3FN
Codigo/Casette y Codigo/Autor dependen
transitivamente de la PK, en la Tabla Alquiler
El Valor/Alquiler depende del Codigo/Casette,
de Numero/Copias y de Formato
Por lo que no puede estar en Tabla Alquiler ya
que pertenece a la tabla Casette
Titulo/Pelicula se manda a su propia tabla ya
que depende de Codigo/Pelicula,
Codigo/Categoria y Codigo/Actor
Se crean las tablas Membresia y Categoria
para mantener las relaciones
38
Resultados:
Ventajas
Integridad de datos (porque no hay datos
redundantes ni omitidos).
Consultas optimizadas (porque las tablas
normalizadas generan combinaciones
eficaces y rápidas).
Creación y ordenación de índices más
rápidas (porque las tablas tienen menos
columnas).
Ejecución más rápida de la instrucción
UPDATE (porque hay menos índices por
tabla).
Resolución de concurrencias mejorada
(porque los bloqueos de tabla afectarán a
39
Inconvenientes:
Se puede incurrir en un nuevo costo
cuando se reestructuran las tablas de
datos.
También es posible sobrenormalizar una
base de datos y descomponerla en
demasiadas tablas granulares. Por
ejemplo, pueden tener una tabla
perfectamente normalizada de empleado
que contiene campos para nombre,
identificación y dirección de correo
electrónico. Si esto ocurre, puede que
tengan que crear consultas más complejas
para unir los datos dispersos en varias
Access 2013
Microsoft Access 2013 funciona bajo el sistema operativo Windows y viene incluido dentro del paquete Microsoft
Office, de manera que debemos tener este sistema instalado en nuestro equipo.
Para acceder al programa, podemos desplegar las opciones del menú Iniciar o utilizar el icono identificativo del
programa que suele ubicarse en el Escritorio de Windows.
A continuación, nos encontraremos con la pantalla de Inicio rápido, que nos permite elegir la manera de empezar a
trabajar, puede ser desde una plantilla o una base de datos en blanco.
40
Access 2013
La interfaz
La interfaz de Access posee elementos para manipular la ventana del programa de manera independiente del
contenido de las bases de datos.
Barra de título
Para comenzar, conozcamos la Barra de título, que contiene el nombre de la base de datos en la cual estamos
trabajando, los botones Minimizar, Maximizar y Cerrar, así como también la Barra de herramientas de acceso
rápido.
Access 2013
41
Access 2013
La interfaz
La interfaz de Access posee elementos para manipular la ventana del programa de manera independiente del
contenido de las bases de datos.
Barra de título
Para comenzar, conozcamos la Barra de título, que contiene el nombre de la base de datos en la cual estamos
trabajando, los botones Minimizar, Maximizar y Cerrar, así como también la Barra de herramientas de acceso
rápido.
Access 2013
42
H1
Access 2013
Tipos de datos
Cada registro que introducimos en una tabla tiene un formato determinado, por eso Access permite definir
el tipo de dato que se empleará en cada campo. Las opciones son las siguientes:
• Texto corto: permite registrar hasta 255 caracteres alfanuméricos, es decir que es posible ingresar texto
y números que no sean utilizados para un cálculo, por ejemplo, números de teléfono y de documento.
• Texto largo: similar a la anterior, pero sin límite en la cantidad de caracteres.
• Número: solo admite números, que pueden ser usados en cálculos, por ejemplo, cantidad de horas
trabajadas y cantidad de productos vendidos, entre otras posibilidades.
• Fecha/Hora: se utiliza para registrar fechas y horas, por ejemplo, las fechas de las ventas o los horarios
de trabajo de los empleados.
• Moneda: representa valores monetarios, como, por ejemplo, salarios, precios de venta, costos, totales.
• Autonumeración: genera, de manera automática, números enteros correlativos o aleatorios.
• Sí/No: genera una casilla en la tabla, que se debe activar para indicar valores positivos o desactivar para
valores negativos.
• Objeto OLE: para almacenar archivos, imágenes, sonidos y videos.
• Hipervínculo: vincula archivos y elementos de una base de datos a direcciones URL y de correo
electrónico.
• Datos adjuntos: para adjuntar archivos a un campo, por ejemplo, una tabla que posea datos de los
empleados puede llevar adjunto el currículum correspondiente, en el registro de cada uno de ellos.
• Asistente para búsquedas: permite generar un menú con opciones, para seleccionar los valores del
campo. Este tipo de dato es para valores con poca o ninguna variación, por ejemplo, una lista de
sucursales.
Access 2013
43
Diapositiva 85
H1 Hugo; 25/09/2018
Access 2013
Editar formato de la tabla
Es posible modificar el diseño de la tabla desde la vista de hoja de datos o bien de vista diseño.
Access 2013
Crear listas predeterminadas
44
Access 2013
Crear listas predeterminadas
Access 2013
Organizar datos
La función Organizar datos permite indicar un orden (ascendente o descendente) mediante el cual se visualizará la
información ingresada en las tablas. Para ordenar los datos de un campo, debemos situar el cursor en una de sus
celdas, ingresar en la ficha Inicio/Ordenar y filtrar y pulsar los botones Ascendente o Descendente.
Cuando ordenamos los registros de un campo, debemos tener en cuenta que los diferentes datos referentes a cada
uno, es decir aquellos que se encuentran en la misma fila, respetan la concordancia, por lo tanto, no se mezclarán.
45
Access 2013
Buscar y reemplazar datos
La función de búsqueda que posee Access permite ubicar datos o registros específicos de manera inmediata con solo
pulsar un botón. Esta función se torna una herramienta fundamental en aquellos casos en que la base de datos posee
una gran cantidad de registros y la ubicación manual se vuelve una tarea compleja, que no solo requiere tiempo sino
también una cuidadosa atención de nuestra parte para no pasar por alto ningún dato. Las mismas ventajas tiene la
función Reemplazar.
Access 2013
Buscar y reemplazar datos
46
Access 2013
Propiedades y formatos
Luego de crear tablas, es importante aprender a modificar sus propiedades, ya que cada una de ellas establece un
aspecto diferente de los datos que vamos a introducir. Mediante el manejo de las propiedades, disminuiremos el
tamaño de la base de datos, validaremos los datos, crearemos mensajes de error para evitar aquellos que no cumplan
con los criterios deseados y más.
Formato de los datos
Cada tipo de dato posee la propiedad Formato, que permite establecer la apariencia de los datos que serán
introducidos en el campo seleccionado, al ubicarnos en la Vista Hoja de datos.
Access 2013
Propiedades y formatos
Valores predeterminados
Esta propiedad nos permite agilizar el proceso de registro de la información, ya que es de gran utilidad en los casos
en que los valores del campo son constantes o con pocas variaciones. De esta manera, nos evita tener que escribir
reiteradamente un determinado contenido en cada celda.
47
Access 2013
Propiedades y formatos
Validar datos
Esta propiedad nos da la posibilidad de restringir los valores admitidos en un campo para evitar errores. La
propiedad Regla de validación permite establecer las condiciones que deben cumplir los datos para ser aceptados o
no en un campo..
Access 2013
Propiedades y formatos
Validar datos
Esta propiedad nos da la posibilidad de restringir los valores admitidos en un campo para evitar errores. La
propiedad Regla de validación permite establecer las condiciones que deben cumplir los datos para ser aceptados o
no en un campo..
48
Access 2013
Propiedades y formatos
Convertir datos en obligatorios
Es posible que, en muchas ocasiones, necesitemos que el usuario ingrese datos de forma obligatoria en un campo
determinado. Es decir, que no pueda continuar con el resto de los registros sin completar dicho campo. Para lograr
esto, utilizamos la propiedad Requerido, que posee una lista desplegable con dos valores: Sí y No. Al elegir la
opción Sí, se vuelve obligatoria la introducción de datos en ese campo, por lo tanto, en la Vista Hoja de datos no
podrá quedar vacío.
Access 2013
Propiedades y formatos
Crear formatos predeterminados
Access ofrece la posibilidad de indicar el tipo de caracteres y el orden en el que serán aceptados los datos en un
campo, a través de la creación de formatos predeterminados que establezcan cuántos caracteres se admitirán, si
serán números o letras, mayúsculas o minúsculas, si tendrán o no una separación, etcétera. Para ello, utilizamos la
propiedad Máscara de entrada.
49
Access 2013
Propiedades y formatos
Crear formatos predeterminados
Access ofrece la posibilidad de indicar el tipo de caracteres y el orden en el que serán aceptados los datos en un
campo, a través de la creación de formatos predeterminados que establezcan cuántos caracteres se admitirán, si
serán números o letras, mayúsculas o minúsculas, si tendrán o no una separación, etcétera. Para ello, utilizamos la
propiedad Máscara de entrada.
Access 2013
Filtros
Una muy buena forma de clasificar los datos es filtrarlos. Mediante la aplicación de filtros, logramos clasificar datos
con uno o varios criterios (según lo que especifiquemos). De esta manera, visualizaremos únicamente los datos que
cumplan con los criterios especificados y esto nos permitirá disponer fácil y rápidamente de la información que
necesitamos.
Filtrar registros
Para llevar a cabo una adecuada clasificación de la información en la creación de los diferentes tipos de filtros,
utilizaremos las opciones del apartado Ordenar y filtrar
50
Access 2013
Filtros
Filtrar registros
Para llevar a cabo una adecuada clasificación de la información en la creación de los diferentes tipos de filtros,
utilizaremos las opciones del apartado Ordenar y filtrar
Access 2013
Relaciones entre tablas
LA CLAVE PRINCIPAL NOS PERMITE IDENTIFICAR CADA REGISTRO DE MANERA ÚNICA.
El campo que se emplea para identificar cada registro con un valor único se denomina campo clave o clave
principal.
A su vez, el campo clave de una tabla es frecuentemente utilizado en otra, con el fin de poder relacionarlas entre sí.
A estos campos los llamamos clave externa.
Un campo sea clave principal implica que:
• El campo queda automáticamente indexado sin duplicados: si ingresamos un valor repetido en el campo clave,
Access nos muestra un mensaje de error.
• No es posible omitir valores en el campo: todos los registros deberán contener un valor en el campo clave, de lo
contrario, Access muestra un mensaje de error.
51
Access 2013
Relaciones datos
Las herramientas para relacionar tablas nos permiten acceder rápidamente a la información almacenada, sin
necesidad de abrir cada una de las tablas que contienen los datos. Por lo tanto, al proceso de relación podemos
definirlo como: la vinculación entre dos tablas a través de un campo en común.
Eliminación de una fila referenciada: ¿Qué le pasa a las filas relacionadas (es decir, filas de la tabla hija con idéntico
valor de llave foránea) cuando se elimina la fila referenciada de la tabla madre?
Actualización de la llave primaria de una fila referenciada: ¿Qué le pasa a las filas relacionadas cuando se actualiza
la llave primaria de la fila referenciada en la tabla madre?
Acciones posibles
Existen varias acciones posibles para dar respuesta a la eliminación de una fila referenciada o a la actualización de la
llave primaria de una fila referenciada. La acción apropiada depende de las tablas involucradas.
• Restringir: No permitir la acción en la fila referenciada.
Por ejemplo, no permitir que una fila de Student se borre si existen renglones relacionados en Enrollment. De forma
similar, no permitir que Student.StdSSN se modifique si existen filas en Enrollment.
• Cascada: Realizar la misma acción (acción en cascada) en las filas relacionadas.
Por ejemplo, si se elimina un Student, se deben eliminar las filas relacionadas en Enrollment. De forma similar, si
Student.StdSSN se modifica en alguna fila, se debe actualizar StdSSN en las filas relacionadas de Enrollment.
• Nulificar: Igualar a nulo la llave foránea de las filas relacionadas.
Por ejemplo, si se elimina una fila de Faculty, entonces igualar FacSSN a NULL en las filas relacionadas de Offering.
La acción nulificar no se permite cuando la llave foránea no permite valores nulos. Por ejemplo, la opción nulificar no
es válida cuando se eliminan renglones de la tabla Student, ya que Enrollment.StdSSN es parte de la llave primaria.
• Por omisión: Igualar la llave foránea de las filas relacionadas al valor por omisión.
Por ejemplo, si se elimina una fila de Faculty, entonces se debe igualar FacSSN al valor por omisión del facultativo en
relación con las filas Offering. El valor por omisión del facultativo puede interpretarse como “se anunciará”.
52
Bases de Datos Relacionales
REGLAS DE INTEGRIDAD:
Eliminación de una fila referenciada: ¿Qué le pasa a las filas relacionadas (es decir, filas de la tabla hija con idéntico
valor de llave foránea) cuando se elimina la fila referenciada de la tabla madre?
Actualización de la llave primaria de una fila referenciada: ¿Qué le pasa a las filas relacionadas cuando se actualiza
la llave primaria de la fila referenciada en la tabla madre?
Las acciones para eliminar y actualizar se pueden especificar en SQL utilizando las cláusulas ON DELETE y ON
UPDATE
Access 2013
Relaciones datos
Las herramientas para relacionar tablas nos permiten acceder rápidamente a la información almacenada, sin
necesidad de abrir cada una de las tablas que contienen los datos. Por lo tanto, al proceso de relación podemos
definirlo como: la vinculación entre dos tablas a través de un campo en común.
53
Access 2013
Opciones para la relación entre tablas
Al activar la casilla Exigir integridad referencial, indicamos que los datos entre ambas tablas deben ser coherentes:
no se podrá eliminar un registro que contenga un dato relacionado.
La casilla Actualizar en cascada campos relacionados permite actualizar de manera automática los cambios
generados en uno de los campos que interviene en la relación. Por ejemplo, si modificamos el número que identifica
a un cliente en la tabla CLIENTES, este se actualizará también en la tabla COMPRO.
La casilla Actualizar en cascada los campos relacionados permite actualizar de manera automática los cambios
generados en uno de los campos que interviene en la relación. Por ejemplo, si modificamos el número que identifica
a un cliente en la tabla CLIENTES, este se actualizará también en la tabla COMPRO.
Si activamos la casilla Eliminar en cascada los registros relacionados, cuando borremos un registro que posee el
campo clave, se eliminará automáticamente de las tablas que contengan este registro como clave externa. Por
ejemplo, si borramos un cliente de la tabla CLIENTES, los registros que se correspondan en la tabla COMPRO
también se eliminarán.
Access 2013
Relaciones - Ficha Diseño
En el momento en que podemos ver la pestaña Relaciones, es cuando aparece la ficha Diseño en la cinta de
opciones. Esta ficha permite realizar varias operaciones sobre la relación,
54
Access 2013
Diseño de Consultas
Access 2013
Diseño de Consultas de Actualización
Tabla de expresiones de ejemplo
En esta tabla se muestran algunas expresiones de ejemplo y una explicación de cómo cambian los datos.
Expresión Resultado
"NP" & [NúmeroPieza] Agrega "NP" al principio de cada número de pieza especificado.
[Transporte] * 1,5 Aumenta los valores de un campo denominado Transporte en un 50 por ciento.
DSuma("[Cantidad] * [PrecioUnidad]", Si los valores de Id de producto de la tabla actual coinciden con los valores de Id
"Detalles de pedidos", "[IdProducto]=" & [IdProducto]) de producto de la tabla denominada Detalles de pedidos, esta expresión
actualiza los totales de ventas multiplicando los valores de un campo
denominado Cantidad por los valores de un campo denominado PrecioUnidad.
La expresión usa la función DSuma porque funciona con más de una tabla y más
de un campo de tabla.
Derecha([CódigoPostalEnvío], 5) Trunca (quita) los caracteres situados más a la izquierda en una cadena de texto o
una cadena numérica y deja los cinco caracteres situados más a la derecha.
SiInm(Es Nulo([PrecioUnidad]), 0, [PrecioUnidad]) Cambia un valor nulo (desconocido o sin definir) a un valor cero (0) en un campo
denominado PrecioUnidad.
55
Introducción a SQL
SQL – Structured Query Language – Lenguaje de consulta estructurado
SQL es el lenguaje estándar para trabajar con bases de datos relacionales y es
soportado por casi la totalidad de los productos existentes en el mercado.
SQL fue desarrolado por IBM Research a partir de los conceptos definidos
por Codd y fue presentado como SEQUEL (Structures English QUEry
Language) en mayo de 1974 por Chamberlin y Boyce.
SQL fue implementado por primera vez en el prototipo de IBM: System R
SQL desde 1992 tiene su nombre oficial: Estándar Internacional del Lenguaje
de Base de Datos SQL
SQL fue concebido como “Sublenguaje de Datos” y combinaba dos lenguajes
subordinados: DDL (Data Definition Language) y DML (Data Manipulation
Language)
SQL en 1996 se le incorporó las características de PSM (Módulos
Almacenados Persistentes), llegando a ser un lenguaje completo. 111
Introducción a SQL
112
56
Introducción a SQL
CREATE TABLE ALUMNOS(
LEGAJO INTEGER NOT NULL, CREATE TABLE CURSA(
NOMBRE CHAR(30) NOT NULL, LEGAJO INTEGER NOT NULL,
DNI INTEGER NOT NULL , COD_MAT INTEGER NOT NULL,
DOMICILIO CHAR(30), AÑO_LECTIVO INTEGER NOT NULL,
FEC_NAC DATE, FEC_INSC DATE,
PRIMARY KEY (LEGAJO)); PRIMARY KEY (LEGAJO, COD_MAT, AÑO_LECTIVO),
FOREIGN KEY (LEGAJO) REFERENCES
CREATE TABLE DOCENTE( ALUMNOS(LEGAJO),
DNI INTEGER NOT NULL , FOREIGN KEY (COD_MAT) REFERENCES
NOMBRE CHAR(30) NOT NULL, MATERIA(COD_MAT) );
DOMICILIO CHAR(30),
P_MAIL CHAR(30),
FEC_NAC DATE,
TELEFONO CHAR(15), CREATE TABLE EXAMEN(
PRIMARY KEY (DNI)); LEGAJO INTEGER NOT NULL,
COD_MAT INTEGER NOT NULL,
CREATE TABLE MATERIA( FEC_EXA DATE NOT NULL,
COD_MAT INTEGER NOT NULL, NOTA INTEGER,
NOMBRE CHAR(30) NOT NULL, ACTA INTEGER,
CARRERA CHAR(20) , PRIMARY KEY (LEGAJO, COD_MAT, FEC_EXA),
AÑO INTEGER, FOREIGN KEY (LEGAJO) REFERENCES
CUATRIMESTRE INTEGER, ALUMNOS(LEGAJO),
DNI_PROFESOR INTEGER, FOREIGN KEY (COD_MAT) REFERENCES
PRIMARY KEY (COD_MAT) MATERIA(COD_MAT) ); 113
FOREIGN KEY (DNI_PROFESOR) REFERENCES
DOCENTE(DNI));
ALUMNOS
LEGAJO NOMBRE DNI DOMICILIO FEC_NAC TELEFONO
1428 Lopez, Jorge Luis 33455666 8 nro 1808 23/4/1998 CURSA
1903 Perez, Karina 43333222 22 nro 345 10/5/2001 LEGAJO COD_MAT AÑO_LECTIVO FEC_INSC
2102 Arce, Cesar 34444555 22 nro 345 10/4/1998 1428 2 2006 10/3/2006
2103 Moon, Lucila 34555444 San Martin nro19/12/1999
1245 2102 2 2006 12/3/2006
3908 Rodriguez, Jorge 11462300 16 esquina 43 24/7/1972 2103 22 2006 10/8/2006
3923 Sombra, Fernando 25851211 9 de julio 961 7/7/1973 422676 1903 34 2007 2/2/2007
4103 Salvador, Maria Alejandra 11137562 Paladino 439 13/3/2000 432454 1428 2 2007 12/3/2007
4105 Vidoret, Daniel 26507702 6 bis 505 13/5/2000 4241604 1903 34 2008 3/2/2008
4106 Ruiz, Gisela 28358351 Alberdi 1392 1428 22 2008 10/3/2008
4108 Weizz, Nelson 13956555 Maipu 72 4/5/1972 421604 1903 34 2009 1/3/2010
1903 34 2011 1/3/2011
DOCENTE
DNI NOMBRE DOMICILIO P_MAIL FEC_NAC TELEFONO
16772834 ALFONSO HUGO 10 NRO 346 alfonsoh@ing.unlpam.edu.ar 4/9/1964 322904
22222222 DAVIS EDUARDO 107 NRO 444 davise@ing.unlpam.edu.ar
12333444 MINETTI GABRIELA 306 NRO 1346 minettig@ing.unlpam.edu.ar 30/12/1954 422780
11111111 RAMOS RAQUEL 35 NRO 344 rramos@ing.unlpam.edu.ar
22333444 SALTO CAROLINA 112 NRO 555 saltoc@ing.unlpam.edu.ar 30/12/1974 422780
EXAMEN
MATERIA LEGAJO COD_MAT FEC_EXA NOTA ACTA
COD_MAT NOMBRE CARRERA AÑO CUATRIMESTRE DNI_PROFESOR 1428 2 12/12/2006 2 100
4 Analisis Matemático I Ing. Electromecanica 1 1 2102 2 12/12/2006 6 100
33 Computación II Ing. Electromecanica 2 2 22333444 2103 22 4/2/2007 2 120
44 Electrónica I Ing. electromecanica 4 1 2102 22 4/2/2007 10 120
55 Mecanica de los fluidos Ing. electromecanica 4 1 4103 22 4/2/2007 10 120
2 Algebra Ing. Sistemas 1 1 22222222 4105 34 20/12/2008 8 141
34 Base de Datos Ing. Sistemas 3 1 16772834 1428 34 20/12/2008 4 141
56 Base de Datos Dist Ing. Sistemas 5 2 16772834 3908 22 3/3/2009 8 162
22 Ingles I Ing. Sistemas 2 2 11111111 2103 22 3/3/2009 8 162
5 Matemática Discreta Ing. Sistemas 1 2 22222222 1428 22 3/3/2009 1144 162
57 Sistemas Operativos Ing. Sistemas 3 1 22333444 4105 57 10/3/2009 110 170
57
Introducción a SQL
Para realizar cualquier Consulta sobre los datos que contienen las Tablas
usaremos alguna de las siguientes sintaxis:
Consultas en SQL
Consultas:
1. Mostrar todos los datos de los estudiantes
2. Mostrar el nombre y número de documento de todos los estudiantes
3. Ídem a la 2 pero ordenar el resultado alfabéticamente por nombre
del estudiante
4. Buscar los estudiantes que se llaman Fernando
5. Identificar las materias de Base de Datos. Mostrar Nombre de
materia, código y año
6. Obtener la información de todas las materias de primer año
7. Obtener el nombre de las carreras que tengan materias registradas.
8. Obtener un historial académico de Jorge López. Debe contener
nombre de materia, fecha de examen y nota. Ordenar los exámenes
cronológicamente.
9. Identificar las materias que dicta la profesora Raquel Ramos. Deberá
indicar materia, carrera a la que pertenece y cuatrimestre en que
dicta tal materia.
10.Identificar las materías que aún no tienen profesor asignado
11.Identificar lo docentes que no tienen materias asignadas. Mostrar
toda la información de los mismos ordenada alfabéticamente por
nombre 116
58
Consultas en SQL
Consultas:
117
Introducción a SQL
Ejemplo
118
59
SQL - Subquery
También podemos anidar Consulta, lo que recibe el nombre de Subconsultas.
SELECT NOMBRE,CARRERA,CUATRIMESTRE
FROM MATERIA
WHERE DNI_PROFESOR IN ( SELECT DNI
FROM DOCENTES
WHERE NOMBRE LIKE ‘*RAMOS RAQUEL*');
O
SELECT NOMBRE,CARRERA,CUATRIMESTRE
FROM MATERIA
WHERE EXISTS (SELECT *
FROM DOCENTES
WHERE NOMBRE LIKE ‘*RAMOS RAQUEL*'
119
AND MATERIA.DNI_PROFESOR = DNI);
Las funciones a aplicar son: COUNT, MIN, MAX, SUM, AVG 120
60
Introducción a SQL
Para Insertar datos en las Tablas usaremos alguna de las siguientes sintaxis:
Ejemplo
INSERT INTO CURSA (LEGAJO, COD_MAT, AÑO_LECTIVO, FEC_INSC)
VALUES (1903, 34, 2007, 02/02/2007 );
o
INSERT INTO CURSA VALUES (1903, 34, 2007, 02/02/2007 ); 121
Introducción a SQL
Para Actualizar datos en las Tablas usaremos alguna de las siguientes sintaxis:
Ejemplo
UPDATE CURSA
SET AÑO_LECTIVO = 2010
WHERE LEGAJO = 1903 AND COD_MAT = 34 AND FEC_INSC = 01/03/2010 ;
122
61
Introducción a SQL
Para Actualizar datos en las Tablas usaremos alguna de las siguientes sintaxis:
Ejemplo
UPDATE MATERIA
SET CARRERA = 'Ing. Sistemas'
WHERE CARRERA = 'Analista Programador';
123
Introducción a SQL
Para Eliminar datos en las Tablas usaremos alguna de las siguientes sintaxis:
Ejemplo
DELETE FROM CURSA
WHERE LEGAJO = 1903 AND COD_MAT = 34 AND
FEC_INSC = 01/03/2010 ;
124
62
INTRODUCCION A
BASES DE DATOS Y
SQL
Introducción a SQL
Lectura Recomendada:
1. Mannino. Capítulos 3 y 4
2. ACCESS 2013 - Guía Practica para el Usuario
3. Fleitas, Paula; Access 2013
125
Consultas en SQL
Consultas:
1. Mostrar todos los datos de los estudiantes
SELECT LEGAJO, NOMBRE, DNI, DOMICILIO, FEC_NAC, TELEFONO
FROM ALUMNOS;
SELECT *
FROM ALUMNOS;
FROM ALUMNOS
63
Consultas en SQL
Consultas:
5. Identificar las materias de Base de Datos. Mostrar Nombre de
materia, código y año
SELECT NOMBRE, COD_MAT, AÑO
FROM MATERIA
WHERE NOMBRE LIKE ‘*Base de Datos*';
SELECT NOMBRE, COD_MAT, AÑO
FROM MATERIA
WHERE UPPER(NOMBRE) LIKE '*BASE*' AND
UPPER(NOMBRE) LIKE '*DATO*';
6. Obtener la información de todas las materias de primer año
SELECT NOMBRE, COD_MAT, AÑO,CUATRIMESTRE, CARRERA
FROM MATERIA
WHERE AÑO=1;
7. Obtener el nombre de las carreras que tengan materias registradas.
SELECT CARRERA
FROM MATERIA;
Pero evitando las duplicaciones que no aportan información:
SELECT DISTINCT CARRERA
FROM MATERIA; 127
O mejor aún:…
Consultas en SQL
Consultas:
8. Obtener un historial académico de Jorge López. Debe contener
nombre de materia, fecha de examen y nota. Ordenar los exámenes
cronológicamente.
SELECT MATERIA.NOMBRE,FEC_EXA,NOTA
FROM EXAMEN, MATERIA, ALUMNOS
WHERE EXAMEN.COD_MAT = MATERIA.COD_MAT
AND EXAMEN.LEGAJO = ALUMNOS.LEGAJO
AND ALUMNOS.NOMBRE LIKE '*Lopez, Jorge*'
ORDER BY FEC_EXA;
O bien:
SELECT MATERIA.NOMBRE,FEC_EXA,NOTA
FROM (EXAMEN JOIN MATERIA
ON EXAMEN.COD_MAT = MATERIA.COD_MAT )
JOIN ALUMNOS
ON EXAMEN.LEGAJO = ALUMNOS.LEGAJO
WHERE ALUMNOS.NOMBRE LIKE '*Lopez, Jorge*' 128
ORDER BY FEC_EXA;
64
Consultas en SQL
Consultas:
9. Identificar las materias que dicta la profesora Raquel Ramos. Deberá
indicar materia, carrera a la que pertenece y cuatrimestre en que dicta
tal materia.
SELECT MATERIA.NOMBRE,CARRERA,CUATRIMESTRE
FROM MATERIA JOIN DOCENTES
ON MATERIA.DNI_PROFESOR = DOCENTES.DNI
WHERE DOCENTES.NOMBRE LIKE '*RAMOS RAQUEL*';
SELECT NOMBRE,CARRERA,CUATRIMESTRE
FROM MATERIA
WHERE DNI_PROFESOR IN ( SELECT DNI
FROM DOCENTES
WHERE NOMBRE LIKE '*RAMOS RAQUEL*');
Consultas en SQL
Consultas:
11.Identificar lo docentes que no tienen materias asignadas. Mostrar toda la
información de los mismos ordenada alfabéticamente por nombre
SELECT *
FROM DOCENTES
WHERE NOT EXISTS (SELECT *
FROM MATERIA
WHERE DNI_PROFESOR=DOCENTES.DNI)
ORDER BY NOMBRE;
o
SELECT *
FROM DOCENTES
WHERE DNI NOT IN (11111111, 22333444, 16772834, 22222222)
ORDER BY NOMBRE;
o
SELECT *
FROM DOCENTES
WHERE DNI NOT IN (SELECT DISTINCT DNI_PROFESOR
FROM MATERIA);
130
65
Consultas en SQL
Consultas:
12.Identificar los estudiantes que comparten vivienda, según el domicilio
registrado. Deberá entregar: pares de números de legajos
SELECT A1.LEGAJO, A2.LEGAJO
FROM ALUMNOS AS A1, ALUMNOS AS A2
WHERE A1.DOMICILIO = A2.DOMICILIO AND A1.LEGAJO<>A2.LEGAJO;
13.Identificar los docentes que tienen más de 50 años
SELECT DNI,NOMBRE,ROUND((DATE()-FEC_NAC)/365,0) AS EDAD
FROM DOCENTES
WHERE (DATE()-FEC_NAC)/365>50;
14.Identificar los alumnos que han aprobado Base de Datos. El listado debe
contener el nombre del alumno, legajo, teléfono, nota alcanzada y fecha
de examen. Ordenar el informe en orden decreciente de fecha de
examen.
SELECT ALUMNOS.NOMBRE,ALUMNOS.LEGAJO, TELEFONO, NOTA,
FEC_EXA
FROM EXAMEN, MATERIA, ALUMNOS
WHERE EXAMEN.COD_MAT = MATERIA.COD_MAT
AND EXAMEN.LEGAJO = ALUMNOS.LEGAJO
131
AND NOTA>=4
AND MATERIA.NOMBRE = 'Base de Datos'
Consultas en SQL
Consultas:
15.Informar la cantidad de materias aprobada por los alumnos en un
determinado año, por Ej 2009.
SELECT ALUMNOS.LEGAJO, ALUMNOS.NOMBRE, YEAR(FEC_EXA) AS
AÑO, COUNT(*)AS CANTIDAD
FROM ALUMNOS JOIN EXAMEN ON EXAMEN.LEGAJO =
ALUMNOS.LEGAJO
WHERE NOTA>=4 AND YEAR(FEC_EXA)='2009'
GROUP BY ALUMNOS.LEGAJO, ALUMNOS.NOMBRE, YEAR(FEC_EXA)
ORDER BY AÑO,ALUMNOS.NOMBRE;
16.Modificar la consulta anterior para sólo informar los que hayan aprobado
mas de 2 materias en ese año
SELECT ALUMNOS.LEGAJO, ALUMNOS.NOMBRE, YEAR(FEC_EXA) AS
AÑO, COUNT(*)AS CANTIDAD
FROM ALUMNOS JOIN EXAMEN ON EXAMEN.LEGAJO =
ALUMNOS.LEGAJO
WHERE NOTA>=4 AND TO_CHAR(FEC_EXA,'YYYY')='2009'
GROUP BY ALUMNOS.LEGAJO, ALUMNOS.NOMBRE, YEAR(FEC_EXA)
HAVING COUNT(*)>=2 132
ORDER BY AÑO,ALUMNOS.NOMBRE;
66
Consultas en SQL
Consultas:
17.Modificar el domicilio de la docente Minetti, su nuevo domicilio es Calle
101 Nro 955
UPDATE DOCENTES
SET DOMICILIO = 'Calle 101 Nro 955'
WHERE NOMBRE LIKE '%MINETTI%‘;
18.Incorporar las cursadas de los estudiantes del presente año. Al menos 1
nuevo registro.
INSERT INTO CURSA VALUES (1903, 34, 2019, ‘2019-02-15’);
Ingresar otros 4 registros con valores válidos e inválidos para
chequear consistencia.
133
Consultas en SQL
Consultas:
20.Eliminar la estudiante Karina Perez. Pudo?? Por que??
DELETE FROM ALUMNOS
WHERE NOMBRE LIKE '%Perez, Karina%';
Se viola la regla de integridad referencia. Cómo lo puedo
solucionar?
Solución:
DELETE FROM CURSA
WHERE LEGAJO IN (
SELECT LEGAJO FROM ALUMNOS
WHERE NOMBRE LIKE '%Perez, Karina%');
Y luego si lo admite a:
DELETE FROM ALUMNOS
WHERE NOMBRE LIKE '%Perez, Karina%';
134
67
Introducción a SQL
Para realizar cualquier Consulta sobre los datos que contienen las Tablas
usaremos alguna de las siguientes sintaxis:
Introducción a SQL
CREATE TABLE ALUMNOS(
LEGAJO INTEGER NOT NULL, CREATE TABLE CURSA(
NOMBRE CHAR(30) NOT NULL, LEGAJO INTEGER NOT NULL,
DNI INTEGER NOT NULL , COD_MAT INTEGER NOT NULL,
DOMICILIO CHAR(30), AÑO_LECTIVO INTEGER NOT NULL,
FEC_NAC DATE, FEC_INSC DATE,
PRIMARY KEY (LEGAJO)); PRIMARY KEY (LEGAJO, COD_MAT, AÑO_LECTIVO),
FOREIGN KEY (LEGAJO) REFERENCES
CREATE TABLE DOCENTE( ALUMNOS(LEGAJO),
DNI INTEGER NOT NULL , FOREIGN KEY (COD_MAT) REFERENCES
NOMBRE CHAR(30) NOT NULL, MATERIA(COD_MAT) );
DOMICILIO CHAR(30),
P_MAIL CHAR(30),
FEC_NAC DATE,
TELEFONO CHAR(15), CREATE TABLE EXAMEN(
PRIMARY KEY (DNI)); LEGAJO INTEGER NOT NULL,
COD_MAT INTEGER NOT NULL,
CREATE TABLE MATERIA( FEC_EXA DATE NOT NULL,
COD_MAT INTEGER NOT NULL, NOTA INTEGER,
NOMBRE CHAR(30) NOT NULL, ACTA INTEGER,
CARRERA CHAR(20) , PRIMARY KEY (LEGAJO, COD_MAT, FEC_EXA),
AÑO INTEGER, FOREIGN KEY (LEGAJO) REFERENCES
CUATRIMESTRE INTEGER, ALUMNOS(LEGAJO),
DNI_PROFESOR INTEGER, FOREIGN KEY (COD_MAT) REFERENCES
PRIMARY KEY (COD_MAT) MATERIA(COD_MAT) ); 136
FOREIGN KEY (DNI_PROFESOR) REFERENCES
DOCENTE(DNI));
68
ALUMNOS
LEGAJO NOMBRE DNI DOMICILIO FEC_NAC TELEFONO
1428 Lopez, Jorge Luis 33455666 8 nro 1808 23/4/1998 CURSA
1903 Perez, Karina 43333222 22 nro 345 10/5/2001 LEGAJO COD_MAT AÑO_LECTIVO FEC_INSC
2102 Arce, Cesar 34444555 22 nro 345 10/4/1998 1428 2 2006 10/3/2006
2103 Moon, Lucila 34555444 San Martin nro19/12/1999
1245 2102 2 2006 12/3/2006
3908 Rodriguez, Jorge 11462300 16 esquina 43 24/7/1972 2103 22 2006 10/8/2006
3923 Sombra, Fernando 25851211 9 de julio 961 7/7/1973 422676 1903 34 2007 2/2/2007
4103 Salvador, Maria Alejandra 11137562 Paladino 439 13/3/2000 432454 1428 2 2007 12/3/2007
4105 Vidoret, Daniel 26507702 6 bis 505 13/5/2000 4241604 1903 34 2008 3/2/2008
4106 Ruiz, Gisela 28358351 Alberdi 1392 1428 22 2008 10/3/2008
4108 Weizz, Nelson 13956555 Maipu 72 4/5/1972 421604 1903 34 2009 1/3/2010
1903 34 2011 1/3/2011
DOCENTE
DNI NOMBRE DOMICILIO P_MAIL FEC_NAC TELEFONO
16772834 ALFONSO HUGO 10 NRO 346 alfonsoh@ing.unlpam.edu.ar 4/9/1964 322904
22222222 DAVIS EDUARDO 107 NRO 444 davise@ing.unlpam.edu.ar
12333444 MINETTI GABRIELA 306 NRO 1346 minettig@ing.unlpam.edu.ar 30/12/1954 422780
11111111 RAMOS RAQUEL 35 NRO 344 rramos@ing.unlpam.edu.ar
22333444 SALTO CAROLINA 112 NRO 555 saltoc@ing.unlpam.edu.ar 30/12/1974 422780
EXAMEN
MATERIA LEGAJO COD_MAT FEC_EXA NOTA ACTA
COD_MAT NOMBRE CARRERA AÑO CUATRIMESTRE DNI_PROFESOR 1428 2 12/12/2006 2 100
4 Analisis Matemático I Ing. Electromecanica 1 1 2102 2 12/12/2006 6 100
33 Computación II Ing. Electromecanica 2 2 22333444 2103 22 4/2/2007 2 120
44 Electrónica I Ing. electromecanica 4 1 2102 22 4/2/2007 10 120
55 Mecanica de los fluidos Ing. electromecanica 4 1 4103 22 4/2/2007 10 120
2 Algebra Ing. Sistemas 1 1 22222222 4105 34 20/12/2008 8 141
34 Base de Datos Ing. Sistemas 3 1 16772834 1428 34 20/12/2008 4 141
56 Base de Datos Dist Ing. Sistemas 5 2 16772834 3908 22 3/3/2009 8 162
22 Ingles I Ing. Sistemas 2 2 11111111 2103 22 3/3/2009 8 162
5 Matemática Discreta Ing. Sistemas 1 2 22222222 1428 22 3/3/2009 1374 162
57 Sistemas Operativos Ing. Sistemas 3 1 22333444 4105 57 10/3/2009 110 170
Consultas en SQL
Consultas:
1. Mostrar todos los datos de los estudiantes
2. Mostrar el nombre y número de documento de todos los estudiantes
3. Ídem a la 2 pero ordenar el resultado alfabéticamente por nombre
del estudiante
4. Buscar los estudiantes que se llaman Fernando
5. Identificar las materias de Base de Datos. Mostrar Nombre de
materia, código y año
6. Obtener la información de todas las materias de primer año
7. Obtener el nombre de las carreras que tengan materias registradas.
8. Obtener un historial académico de Jorge López. Debe contener
nombre de materia, fecha de examen y nota. Ordenar los exámenes
cronológicamente.
9. Identificar las materias que dicta la profesora Raquel Ramos. Deberá
indicar materia, carrera a la que pertenece y cuatrimestre en que
dicta tal materia.
10.Identificar las materías que aún no tienen profesor asignado
11.Identificar lo docentes que no tienen materias asignadas. Mostrar
toda la información de los mismos ordenada alfabéticamente por
nombre 138
69
SQL – Join o Reunión de Tablas
Ejemplo. Identificar las materias que han cursado estudiantes en el año 2006. Informar
datos de la materia, del estudiante y fecha de inscripción. Ordenar el informe por nombre
de materia y nombre del estudiante.
139
SQL - Subquery
También podemos anidar Consulta, lo que recibe el nombre de Subconsultas.
SELECT NOMBRE,CARRERA,CUATRIMESTRE
FROM MATERIA
WHERE DNI_PROFESOR IN ( SELECT DNI
FROM DOCENTES
WHERE NOMBRE LIKE ‘*RAMOS RAQUEL*');
O
SELECT NOMBRE,CARRERA,CUATRIMESTRE
FROM MATERIA
WHERE EXISTS (SELECT *
FROM DOCENTES
WHERE NOMBRE LIKE ‘*RAMOS RAQUEL*'
140
AND MATERIA.DNI_PROFESOR = DNI);
70
SQL – Funciones Agregadas
También podemos pretender que nuestras consultas realicen cálculos sobre los
datos o subgrupos de ellos.
Ejemplos:
Informar la cantidad de docentes:
SELECT COUNT(*) AS CANTIDAD
FROM DOCENTES;
Informar la cantidad de materias por cada una de las carreras
SELECT CARRERA, COUNT(*) AS CANTIDAD
FROM MATERIA
GROUP BY CARRERA;
Las funciones a aplicar son: COUNT, MIN, MAX, SUM, AVG 141
Consultas en SQL
Consultas avanzadas
a) Identificar los docentes que tienen más de 50 años
b) Identificar los docentes que tienen entre 40 y 60 año
c) Identificar los alumnos que han aprobado Base de Datos. El
listado debe contener el nombre del alumno, legajo, teléfono,
nota alcanzada y fecha de examen. Ordenar el informe en orden
decreciente de fecha de examen.
d) Ídem a la c) pero con subquery
e) Informar de todos los alumnos: legajo, nombre y promedio con
aplazos. Ordenar el resultado alfabéticamente por nombre del
estudiante
f) Modificar la consulta e) para que sea promedio sin aplazos
g) Modificar la consulta f) para resolverlo sin el operador JOIN
h) Obtener la nómina completa de los estudiantes con las materias
rendidas. Mostrar los datos del estudiante, código de materia,
nota y fecha de examen. Ordenar alfabéticamente por nombre de
estudiante. 142
i) Informar la cantidad de materias aprobada por los alumnos en un
determinado año.
71
Consultas en SQL
Consultas avanzadas
k) Identificar todos los exámenes tomados en 2007
l) Identificar todos los exámenes que hayan alcanzado la máxima
nota (10)
m)Identificar todos los exámenes tomados en 2007 o que hayan
alcanzado la máxima nota (10)
n) Identificar todos los exámenes tomados en 2007 y que hayan
alcanzado la máxima nota (10)
o) Identificar todos los exámenes tomados en 2007 y que no hayan
alcanzado la máxima nota (10)
p) Modificar la tabla de Materia para unificar el nombre de las
carreras.
q) Modificar el domicilio de la docente Minetti, su nuevo domicilio es
Calle 101 Nro 955
r) Incorporar las cursadas de los estudiantes del presente año. Al
menos 5 nuevos registros.
s) Eliminar el estudiante Weizz Pudo?? Por que?? 143
t) Elimnar la estudiante Karina Perez. Pudo?? Por que??
Taller de Gestión de
Datos
Introducción a SQL
Lectura Recomendada:
1. Mannino. Capítulos 3 y 4
2. ACCESS 2013 - Guía Practica para el Usuario
3. Fleitas, Paula; Access 2013
144
72
Taller de Gestión de
Datos
SQL
Structured Query Language
- Consultas Resueltas-
145
Consultas en SQL
Consultas:
1. Mostrar todos los datos de los estudiantes
SELECT LEGAJO, NOMBRE, DNI, DOMICILIO, FEC_NAC, TELEFONO
FROM ALUMNOS;
SELECT *
FROM ALUMNOS;
FROM ALUMNOS
73
Consultas en SQL
Consultas:
5. Identificar las materias de Base de Datos. Mostrar Nombre de
materia, código y año
SELECT NOMBRE, COD_MAT, AÑO
FROM MATERIA
WHERE NOMBRE LIKE '%Base de Datos%';
SELECT NOMBRE, COD_MAT, AÑO
FROM MATERIA
WHERE UPPER(NOMBRE) LIKE '%BASE%' AND
UPPER(NOMBRE) LIKE '%DATO%';
6. Obtener la información de todas las materias de primer año
SELECT NOMBRE, COD_MAT, AÑO,CUATRIMESTRE, CARRERA
FROM MATERIA
WHERE AÑO=1;
7. Obtener el nombre de las carreras que tengan materias registradas.
SELECT CARRERA
FROM MATERIA;
Pero evitando las duplicaciones que no aportan información:
SELECT DISTINCT CARRERA
FROM MATERIA; 147
O mejor aún:…
Consultas en SQL
Consultas:
8. Obtener un historial académico de Jorge López. Debe contener
nombre de materia, fecha de examen y nota. Ordenar los exámenes
cronológicamente.
SELECT MATERIA.NOMBRE,FEC_EXA,NOTA
FROM EXAMEN, MATERIA, ALUMNOS
WHERE EXAMEN.COD_MAT = MATERIA.COD_MAT
AND EXAMEN.LEGAJO = ALUMNOS.LEGAJO
AND ALUMNOS.NOMBRE LIKE '%Lopez, Jorge%'
ORDER BY FEC_EXA;
O bien:
SELECT MATERIA.NOMBRE,FEC_EXA,NOTA
FROM (EXAMEN JOIN MATERIA
ON EXAMEN.COD_MAT = MATERIA.COD_MAT )
JOIN ALUMNOS
ON EXAMEN.LEGAJO = ALUMNOS.LEGAJO
WHERE ALUMNOS.NOMBRE LIKE '%Lopez, Jorge%' 148
ORDER BY FEC_EXA;
74
Consultas en SQL
Consultas:
9. Identificar las materias que dicta la profesora Raquel Ramos. Deberá
indicar materia, carrera a la que pertenece y cuatrimestre en que dicta
tal materia.
SELECT MATERIA.NOMBRE,CARRERA,CUATRIMESTRE
FROM MATERIA JOIN DOCENTES
ON MATERIA.DNI_PROFESOR = DOCENTES.DNI
WHERE DOCENTES.NOMBRE LIKE '%RAMOS RAQUEL%';
SELECT NOMBRE,CARRERA,CUATRIMESTRE
FROM MATERIA
WHERE DNI_PROFESOR IN ( SELECT DNI
FROM DOCENTES
WHERE NOMBRE LIKE '%RAMOS
RAQUEL%');
Consultas en SQL
Consultas:
11.Identificar lo docentes que no tienen materias asignadas. Mostrar toda la
información de los mismos ordenada alfabéticamente por nombre
SELECT *
FROM DOCENTES
WHERE NOT EXISTS (SELECT *
FROM MATERIA
WHERE DNI_PROFESOR=DOCENTES.DNI)
ORDER BY NOMBRE;
o
SELECT *
FROM DOCENTES
WHERE DNI NOT IN (11111111, 22333444, 16772834, 22222222)
ORDER BY NOMBRE;
o
SELECT *
FROM DOCENTES
WHERE DNI NOT IN (SELECT DISTINCT DNI_PROFESOR
FROM MATERIA);
150
75
Consultas en SQL
Consultas:
12.Identificar los estudiantes que comparten vivienda, según el domicilio
registrado. Deberá entregar: pares de números de legajos
SELECT A1.LEGAJO, A2.LEGAJO
FROM ALUMNOS A1, ALUMNOS A2
WHERE A1.DOMICILIO = A2.DOMICILIO AND A1.LEGAJO<>A2.LEGAJO;
13.Modifique la consulta anterior para mostrar además el nombre de cada
uno y el domicilio
SELECT A1.LEGAJO, A1.NOMBRE, A2.LEGAJO, A2.NOMBRE,
A1.DOMICILIO
FROM ALUMNOS A1, ALUMNOS A2
WHERE A1.DOMICILIO = A2.DOMICILIO AND A1.LEGAJO<>A2.LEGAJO;
14.Modifique la consulta anterior para que no aparezcan los pares (A.A) y
tampoco (A,B) si ya apareció (B,A) pues no aporta información
SELECT A1.LEGAJO, A1.NOMBRE, A2.LEGAJO, A2.NOMBRE,
A1.DOMICILIO
FROM ALUMNOS A1, ALUMNOS A2
WHERE A1.DOMICILIO = A2.DOMICILIO AND A1.LEGAJO<A2.LEGAJO;
o
151
SELECT A1.LEGAJO, A1.NOMBRE, A2.LEGAJO, A2.NOMBRE,
A1.DOMICILIO
Consultas en SQL
Consultas avanzadas
a) Identificar los docentes que tienen más de 50 años
SELECT DNI,NOMBRE,ROUND((CURRENT_DATE-FEC_NAC)/365,0)
AS EDAD
FROM DOCENTES
WHERE (CURRENT_DATE-FEC_NAC)/365>50;
b) Identificar los docentes que tienen entre 40 y 60 años
SELECT DNI,NOMBRE,ROUND((CURRENT_DATE-FEC_NAC)/365,0)
AS EDAD
FROM DOCENTES
WHERE (CURRENT_DATE-FEC_NAC)/365 BETWEEN 40 AND 60;
O
SELECT DNI,NOMBRE,ROUND((CURRENT_DATE-FEC_NAC)/365,0)
AS EDAD
FROM DOCENTES
WHERE (CURRENT_DATE-FEC_NAC)/365 >= 40 AND
(CURRENT_DATE-FEC_NAC)/365 <=60;
152
76
Consultas en SQL
c) Identificar los alumnos que han aprobado Base de Datos. El listado debe contener el
nombre del alumno, legajo, teléfono, nota alcanzada y fecha de examen. Ordenar el
informe en orden decreciente de fecha de examen.
SELECT ALUMNOS.NOMBRE,ALUMNOS.LEGAJO, TELEFONO, NOTA,
FEC_EXA
FROM EXAMEN, MATERIA, ALUMNOS
WHERE EXAMEN.COD_MAT = MATERIA.COD_MAT
AND EXAMEN.LEGAJO = ALUMNOS.LEGAJO
AND NOTA>=4
AND MATERIA.NOMBRE = 'Base de Datos'
ORDER BY FEC_EXA DESC;
d) Ídem a la c) pero con subquery
SELECT ALUMNOS.NOMBRE,ALUMNOS.LEGAJO, TELEFONO, NOTA,
FEC_EXA
FROM EXAMEN, ALUMNOS
WHERE EXAMEN.LEGAJO = ALUMNOS.LEGAJO
AND NOTA>=4
AND COD_MAT IN (SELECT COD_MAT FROM MATERIA WHERE NOMBRE =
'Base de Datos')
ORDER BY FEC_EXA DESC; 153
Consultas en SQL
e) Informar de todos los alumnos: legajo, nombre y promedio con aplazos. Ordenar el
resultado alfabéticamente por nombre del estudiante
SELECT ALUMNOS.LEGAJO, ALUMNOS.NOMBRE,ROUND(AVG(NOTA),2)
AS PROMEDIO
FROM EXAMEN, ALUMNOS
WHERE EXAMEN.LEGAJO = ALUMNOS.LEGAJO
GROUP BY ALUMNOS.LEGAJO, ALUMNOS.NOMBRE
ORDER BY ALUMNOS.NOMBRE;
f) Modificar la consulta e) para que sea promedio sin aplazos
SELECT ALUMNOS.LEGAJO, ALUMNOS.NOMBRE,ROUND(AVG(NOTA),2)
AS PROMEDIO
FROM EXAMEN, ALUMNOS
WHERE EXAMEN.LEGAJO = ALUMNOS.LEGAJO AND NOTA>=4
GROUP BY ALUMNOS.LEGAJO, ALUMNOS.NOMBRE
ORDER BY ALUMNOS.NOMBRE;
154
77
Consultas en SQL
g) Modificar la consulta f) para resolverlo con el operador JOIN
SELECT ALUMNOS.LEGAJO, ALUMNOS.NOMBRE,ROUND(AVG(NOTA),2)
AS PROMEDIO
FROM EXAMEN JOIN ALUMNOS ON EXAMEN.LEGAJO =
ALUMNOS.LEGAJO
WHERE NOTA>=4
GROUP BY ALUMNOS.LEGAJO, ALUMNOS.NOMBRE
ORDER BY ALUMNOS.NOMBRE;
h) Obtener la nómina completa de los estudiantes con las materias rendidas.. Mostrar los
datos del estudiante, código de materia, nota y fecha de examen. Ordenar
alfabéticamente por nombre de estudiante.
SELECT ALUMNOS.*,COD_MAT, NOTA, FEC_EXA
FROM ALUMNOS JOIN EXAMEN ON EXAMEN.LEGAJO =
ALUMNOS.LEGAJO
ORDER BY ALUMNOS.NOMBRE;
Pero no aparecen todos los alumnos … sólo los que han rendido. Para modificar:
SELECT ALUMNOS.*,COD_MAT, NOTA, FEC_EXA
FROM ALUMNOS LEFT OUTER JOIN EXAMEN ON EXAMEN.LEGAJO =
ALUMNOS.LEGAJO 155
ORDER BY ALUMNOS.NOMBRE;
Consultas en SQL
i) Informar la cantidad de materias aprobada por los alumnos en un determinado año.
SELECT ALUMNOS.LEGAJO, ALUMNOS.NOMBRE, YEAR(FEC_EXA) AS AÑO,
COUNT(*) AS CANTIDAD
FROM ALUMNOS JOIN EXAMEN ON EXAMEN.LEGAJO =
ALUMNOS.LEGAJO
WHERE NOTA>=4
GROUP BY ALUMNOS.LEGAJO, ALUMNOS.NOMBRE, YEAR(FEC_EXA)
ORDER BY AÑO,ALUMNOS.NOMBRE;
156
78
Consultas en SQL
j) Modificar la consulta anterior para sólo informar los que hayan aprobado mas de 2 materias en
ese año
SELECT ALUMNOS.LEGAJO, ALUMNOS.NOMBRE, YEAR(FEC_EXA) AS AÑO,
COUNT(*)AS CANTIDAD
FROM ALUMNOS JOIN EXAMEN ON EXAMEN.LEGAJO =
ALUMNOS.LEGAJO
WHERE NOTA>=4 AND TO_CHAR(FEC_EXA,'YYYY')='2009'
GROUP BY ALUMNOS.LEGAJO, ALUMNOS.NOMBRE, YEAR(FEC_EXA)
HAVING COUNT(*)>=2
ORDER BY AÑO,ALUMNOS.NOMBRE;
157
Consultas en SQL
k) Identificar todos los exámenes tomados en 2007
SELECT * FROM EXAMEN WHERE YEAR(FEC_EXA)='2007'
l) Identificar todos los exámenes que hayan alcanzado la máxima nota (10)
SELECT * FROM EXAMEN WHERE NOTA=10;
m) Identificar todos los exámenes tomados en 2007 o que hayan alcanzado la máxima nota (10)
SELECT * FROM EXAMEN WHERE YEAR(FEC_EXA)='2007'
UNION
SELECT * FROM EXAMEN WHERE NOTA=10;
n) Identificar todos los exámenes tomados en 2007 y que hayan alcanzado la máxima nota (10)
SELECT * FROM EXAMEN WHERE YEAR(FEC_EXA)='2007'
INTERSECT
SELECT * FROM EXAMEN WHERE NOTA=10;
o) Identificar todos los exámenes tomados en 2007 y que no hayan alcanzado la máxima nota
(10)
SELECT * FROM EXAMEN WHERE YEAR(FEC_EXA)='2007'
MINUS
SELECT * FROM EXAMEN WHERE NOTA=10;
158
79
Consultas en SQL
p) Modificar la tabla de Materia para unificar el nombre de las carreras.
UPDATE MATERIA
SET CARRERA = 'Ing. Electromecanica'
WHERE CARRERA = 'Ing. electromecanica';
q) Modificar el domicilio de la docente Minetti, su nuevo domicilio es Calle 101 Nro 955
UPDATE DOCENTES
SET DOMICILIO = 'Calle 101 Nro 955'
WHERE NOMBRE LIKE '%MINETTI%';
r) Incorporar las cursadas de los estudiantes del presente año. Al menos 1 nuevo registro.
INSERT INTO CURSA VALUES (1903, 34, 2019, ‘2019-02-15’);
Ingresar otros 4 registros con valores válidos e inválidos para chequear consistencia.
s) Eliminar el estudiante Weizz. Pudo?? Por que??
DELETE FROM ALUMNOS
WHERE NOMBRE LIKE '%Weizz%';
159
Consultas en SQL
t) Eliminar la estudiante Karina Perez. Pudo?? Por que??
DELETE FROM ALUMNOS
WHERE NOMBRE LIKE '%Perez, Karina%';
Se viola la regla de integridad referencia. Cómo lo puedo solucionar?
Solución:
DELETE FROM CURSA
WHERE LEGAJO IN (
SELECT LEGAJO FROM ALUMNOS
WHERE NOMBRE LIKE '%Perez, Karina%');
Y luego si lo admite a:
DELETE FROM ALUMNOS
WHERE NOMBRE LIKE '%Perez, Karina%';
160
80
Consultas en SQL
u) Identificar los alumnos que han aprobado todas las materias de 3er año de la Carrera ¨Ing.
Sistemas¨. El informe debe mostrar Nombre y Legajo.
161
Consultas en SQL
u) Identificar los alumos que han aprobado todas las materias de 3er año de la Carrera ¨Ing.
Sistemas¨. El informe debe mostrar Nombre y Legajo.
O TAMBIEN…
162
81