Está en la página 1de 82

INTRODUCCION A BASES DE DATOS Y SQL

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:

Mannino, Michael V. Administración de Base de Datos – Diseño y desarrollo


de aplicaciones. 3ª Ed. México: Mc. Graw – Hill; 2007
Date, C. J; Introducción a los sistemas de bases de datos - Pearson Educacion ;
2008
Ramez Elmasri, Shamkant Navathe; Fundamentos de sistemas de bases de
3
datos, Pearson Addison-Wesley; 5th. edition (May 1, 2007)

Archivos de almacenamiento de datos


Organización Tradicional

Sistema de Sistema de Sistema de Sistema de


Ventas Producción Administr. Almacenes

Arch. Arch. Arch. Arch.


de de de de
Ventas Producción Administr. Almacenes

2
Archivos de almacenamiento de datos
Problemas
 Redundancia: Datos repetidos en diferentes ficheros

 Inconsistencia: Datos incoherentes con su significado (por ej. Fecha)

 Incongruencia: Datos relacionados incompletos (registrar asistencia de


alumnos no matriculados)

 Inaccesibilidad: Construcción de programas para visualizar datos

 Fragmentación: Almacenamiento datos relacionados en múltiples ficheros (ej:


cabecera de factura y renglones)

 Atomicidad de actualización: Ficheros parcialmente actualizados ante fallos


(ej cabecera de factura y renglones)

 Concurrencia: Accesos simultáneos de varios usuarios requiere implementar


bloqueos frente a acciones de grabación y borrado

 Seguridad: No provee un esquema de perfiles de usuarios en el que pueda


predefinirse los permisos de acción sobre los ficheros.

- Bases de Datos

3
Base de Datos
Definición de James Martin

Colección de datos interrelacionados


almacenados sin redundancias perjudiciales
o innecesarias, su finalidad es servir a una
aplicación o más, de la mejor manera
posible; los datos se almacenan de modo
que resulten independientes de los
programas que los usan; se emplean
métodos bien determinados para incluir
datos nuevos y para modificar o extraer los
datos almacenados

Base de Datos
Ambiente Actual

Software
SIST. APLICACION

Hardware
SIST. OPERATIVO
DBMS

BASE
DE
DATOS

4
Base de Datos
Organización Actual

Sistema de Sistema de Sistema de Sistema de


Ventas Producción Administr. Almacenes

Sistema de Administración de Bases de Datos (DBMS)

BASE
DE
DATOS

Base de Datos
Problemas que intenta solucionar

 Almacenar datos y las relaciones de estos


con otros datos
 Almacenar los datos una sola vez de forma
independiente a su tratamiento
 Ofrecer recursos para mantener la integridad
de los datos que se almacenan

5
Base de Datos
Sistema de Administración de Bases de Datos

Es una colección de programas que


facilitan los procesos de definición
(arquitectura) y manipulación de archivos
(tablas) relacionados, grabando,
eliminando, modificando, visualizando y
extrayendo datos de ellos.

Qué son las Bases de Datos?


Una base de datos es un conjunto de información relacionada con
un asunto o con una finalidad, tal como el seguimiento de los
pedidos de clientes o una colección de música.
Si la base de datos no está almacenada en una máquina, o sólo lo
está parte de la misma, es posible que necesite controlar
información de varias fuentes distintas que tiene que organizar y
coordinar usted mismo.

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.

Qué son las Bases de Datos?


Componentes:
SOFTWARE BASE
SOFTWARE DE
APLICACIÓN

USUARIOS
USUARIOS

DATOS

HARDWARE (discos – procesadores –


dispositivos de E/S –EJ. Monitores)

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.

Cómo funcionan las Bases de Datos?


Las Bases de Datos para funcionar requieren de un Sistema
Administrador de Bases de Datos (DBMS – Data Base
Management System)
A modo de RESUMEN destacamos algunas de las funciones principales:

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.

Evolución de Bases de Datos


Cómo surgen?

Usuarios Usuarios
Finales Finales

Aplicaciones Máquinas Clientes


Aplicaciones Clientes
Acceso Remoto
Transparente
DBMS Servidor
DBMS Máquina Servidor

Base de Base de
Datos Datos

9
Bases de Datos – Arq C - S

Máquina Clientes Máquina Clientes Máquina Clientes

Red de Comunicaciones

Máquina Servidor

Base
de
Datos

Bases de Datos Distribuidas

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

En todas las metodologías de desarrollo se deben generar:


•Modelos de datos
•Modelos de procesos
•Modelos de interacciones con el entorno.
La fase del análisis de sistemas genera una versión inicial de estos modelos.
La fase de diseño de sistemas agrega más detalles para que los modelos se puedan implementar de forma
más eficiente.

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:

Es una colección de entidades de interés (personas, lugares,


eventos o cosas) representadas por un rectángulo en un
diagrama de entidad-relación
Relaciones:

Es una asociación nombrada entre los tipos de entidades. Una


relación representa una asociación en dos sentidos o
bidireccional entre entidades. La mayoría de las relaciones
involucran dos distintos tipos de entidad.
Atributos:

Es una propiedad de un tipo de entidad o relación. Cada


atributo tiene un tipo de dato que define el tipo de valores y
operaciones permitidas sobre dicho atributo.

DIAGRAMA DE ENTIDAD RELACION


Símbolos básicos:

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:

Los ERD tienen un lenguaje natural de


correspondencia.
Los tipos de entidades pueden
corresponder al sustantivo y las
relaciones a verbos o frases de
Qué Significa? preposiciones que conectan los
sustantivos.
CURSO OFRECIDO
curso 1 oferta 1
oferta 2 Se puede leer el diagrama de entidad
curso 2 relación como una colección de
curso 3 oferta 3 sentencias.
oferta 4
oferta 5 Ej. “El Curso curso i ES Ofrecido con el
curso 4 oferta 6 oferta j “

Diagrama de Instancias de la Relación ES


Observe que existe una dirección
implícita en cada relación. En la otra

DIAGRAMA DE ENTIDAD RELACION


Representación de Cardinalidades: PATA DE
LINEA CUERVO: admite
Símbolo Externo PERPENDICULAR muchas
– Cardinalidad : cardinalidad 1 cardinalidades
MAXIMA

Símbolo Interno
– Cardinalidad
MINIMA
CIRCULO:
admite
cardinalidad 0

16
DIAGRAMA DE ENTIDAD RELACION
Representación de Cardinalidades:

• Un curso se relaciona con un mínimo de cero cursos ofrecidos (el


círculo en la posición interna) y un máximo de muchos cursos
ofrecidos (la pata de cuervo en la posición externa).
• Un curso ofrecido se relaciona con exactamente un curso (uno y
sólo uno), tal como se muestra por las líneas verticales de las
posiciones interna y externa.

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


cada tipo de entidad

DIAGRAMA DE ENTIDAD RELACION


Representación de Cardinalidades:

Relaciones de 1 a 1

18
DIAGRAMA DE ENTIDAD RELACION
Representación de Cardinalidades:

DIAGRAMA DE ENTIDAD RELACION


Variantes de Relación:
• Tipos de entidad asociativa que representan relaciones M-way
Es una entidad débil que depende de dos o más tipos de entidades
para su Clave Primaria. Un tipo de entidad asociativa con más de
dos relaciones identificables se le conoce como un tipo de entidad
asociativa M-way.

19
Características de las Bases de Datos Relacionales

•Una base de datos relacional se compone de varias tablas


o relaciones.

•No pueden existir dos tablas con el mismo nombre ni


registro.

•Cada tabla es a su vez un conjunto de registros (filas y


columnas).

Elementos de las Bases de Datos Relacionales

•Relaciones base y derivadas.- En una base de datos


relacional, todos los datos se almacenan y se accede a ellos
por medio de relaciones.

•Las relaciones que almacenan datos son llamadas


"relaciones base" y su implementación es llamada "tabla".

•Otras relaciones no almacenan datos, pero son calculadas


al aplicar operaciones relacionales. Estas relaciones son
llamadas "relaciones derivadas" y su implementación es
llamada "vista" o "consulta". Las relaciones derivadas son
convenientes ya que expresan información de varias
relaciones actuando como si fuera una sola.

20
Elementos de las Bases de Datos Relacionales

•Restricciones.- Son una limitación que obliga el


cumplimiento de ciertas condiciones en la base de
datos.

•Algunas no son determinadas por los usuarios, sino


que son inherentemente definidas por el simple
hecho de que la base de datos sea relacional.
Algunas otras restricciones las puede definir el
usuario, por ejemplo, usar un campo con valores
enteros entre 1 y 10.

Dominio y tipos de datos en BD 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.

•Dominios.- Describe un conjunto de posibles valores para cierto atributo. Cualquier


valor de este atributo debe ser elemento del conjunto especificado

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

Elementos de las Bases de Datos Relacionales

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

•Procedimientos almacenados.- Un procedimiento almacenado es código


ejecutable que se asocia y se almacena con la base de datos. Los
procedimientos almacenados usualmente recogen y personalizan operaciones
comunes, como insertar un registro dentro de una tabla, recopilar información
estadística, o encapsular cálculos complejos. Son frecuentemente usados por un
API por seguridad o simplicidad. Los procedimientos almacenados no son parte
del modelo relacional, pero todas las implementaciones comerciales los incluyen.

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

•El álgebra relacional fue desarrollada en 1970 y el cálculo relacional en 1971


por Codd.

•El álgebra relacional es un lenguaje procedural para manipular relaciones.

•El cálculo relacional es importante porque:

a) esta basado en la lógica de predicados (lógica que facilita determinar la


veracidad de una oración)
b) los lenguajes comerciales estan basados en éste.

Álgebra relacional y cálculo relacional.

•Manipula las relaciones produciendo nuevas relaciones consistente de nueve


operaciones que son tomadas de la matemática, del lenguaje relacional y otras
de lenguaje de programación comunes.

•De origen matematico.


- Union
- Interseccion
- Diferencia
- Producto cartesiano
•De lenguaje de programación
- assignación
•De lenguaje Relacional
- proyección (para remover tablas)
- selección (cumplir condiciones para las busquedas)
- divide (excluir datos)
-Join (union entre tablas)

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.

La Normalización es un proceso que consiste en designar y aplicar una serie de


reglas a las relaciones obtenidas tras el paso del modelo entidad-relación al
modelo relacional. Las bases de datos relacionales se normalizan para: Evitar la
redundancia de los datos.

Se aplica un conjunto de técnicas para producir un nuevo esquema que


representa la misma información pero contiene menos redundancias y evita
posibles anomalías en las inserciones, actualizaciones y borrados.

Formas normales (Primera, segunda y tercera formas normales) .


Una tabla está en Primera Forma Normal si:

Esta forma normal elimina los valores repetidos dentro de una Base de
Datos.

• Todos los atributos son atómicos. Un atributo es atómico si los


elementos del dominio son simples e indivisibles.
• La tabla contiene una clave primaria única.
• La clave primaria no contiene atributos nulos.
• No debe existir variación en el número de columnas.
• Los Campos no clave deben identificarse por la clave (Dependencia
Funcional)
• Debe Existir una independencia del orden tanto de las filas como de
las columnas, es decir, si los datos cambian de orden no deben
cambiar sus significados

24
Formas normales (Primera, segunda y tercera formas normales) .
La tabla EMPLEADOS repite información:

Podemos reducir EMPLEADOS y crear una nueva tabla EMAIL:

Formas normales (Primera, segunda y tercera formas normales) .

Segunda forma normal (2FN)

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

Tercera forma normal (3FN). Evitar la redundancia de datos

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

Proceso de descomposición sin pérdida

Es el proceso de descomponer los objetos o


tablas en sus formas normales sin que haya
pérdida de datos.

26
Reglas de CODD

Regla 0: el sistema debe ser relacional, base de datos y administrador


de sistema. Ese sistema debe utilizar sus facilidades relacionales
(exclusivamente) para manejar la base de datos.
Regla 1: la regla de la información, toda la información en la base de
datos es representada unidireccionalmente, por valores en posiciones de
las columnas dentro de filas de tablas. Toda la información en una base
de datos relacional se representa explícitamente en el nivel lógico
exactamente de una manera: con valores en tablas.
Regla 2: la regla del acceso garantizado, todos los datos deben ser
accesibles sin ambigüedad. Esta regla es esencialmente una nueva
exposición del requisito fundamental para las llaves primarias. Dice que
cada valor escalar individual en la base de datos debe ser lógicamente
direccionable especificando el nombre de la tabla, la columna que lo
contiene y la llave primaria.

Reglas de CODD

Regla 3: tratamiento sistemático de valores nulos, el sistema de gestión


de base de datos debe permitir que haya campos nulos. Debe tener una
representación de la "información que falta y de la información
inaplicable" que es sistemática, distinto de todos los valores regulares.
Regla 4: catálogo dinámico en línea basado en el modelo relacional, el
sistema debe soportar un catálogo en línea, el catálogo relacional debe
ser accesible a los usuarios autorizados. Es decir, los usuarios deben
poder tener acceso a la estructura de la base de datos (catálogo).
Regla 5: la regla comprensiva del sublenguaje de los datos, el sistema
debe soportar por lo menos un lenguaje relacional que; 1.Tenga una
sintaxis lineal.
2.Puede ser utilizado de manera interactiva.
3.Soporte operaciones de definición de datos, operaciones de
manipulación de datos (actualización así como la recuperación),
seguridad e integridad y operaciones de administración de
transacciones.

27
Estándar SQL.

Es en 1992, cuando se lanzó un nuevo estándar ampliado y


revisado del SQL llamado "SQL-92" o "SQL2".

En la actualidad el SQL es el estándar de facto de la


inmensa mayoría de los SGBD comerciales. Y, aunque la
diversidad de añadidos particulares que incluyen las
distintas implementaciones comerciales del lenguaje es
amplia, el soporte al estándar SQL-92 es general y muy
amplio.

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

Registro Como se puede ver,


propio Separados hay cierta redundancia
característica de 1NF.

29
2FN:

 La regla de la Segunda Forma Normal establece que todas las


dependencias parciales se deben eliminar y separar dentro de sus propias
tablas. Una dependencia parcial es un término que describe a aquellos
datos que no dependen de la a primaria de la tabla para identificarlos.
 Es decir, ocurre si una tabla está en primera forma normal y además cada
atributo que no sea clave, depende de forma funcional completa respecto
de cualquiera de las claves. Toda la clave principal debe hacer
dependientes al resto de atributos, si hay atributos que depende sólo de
parte de la clave, entonces esa parte de la clave y esos atributos formarán
otra tabla.
 Los Pasos a seguir son:
 Determinar cuáles columnas que no son clave no dependen de la clave primaria
de la tabla. Eliminar esas columnas de la tabla base.
 Crear una segunda tabla con esas columnas y la(s) columna(s) de la clave de la
cual dependen

Análisis del ejemplo


 Actualmente en nuestra tabla tenemos
varias dependencias parciales si
consideramos como atributo clave el
código del libro.
 Por ejemplo, el título es completamente
identificado por el código del libro, pero el
nombre del lector en realidad no tiene
dependencia de este código, por tanto
estos datos deben ser trasladados a otra
tabla

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

tablas Libro y Lector?

 Esta nueva disposición de la base de datos


necesita que exista otra tabla para
mantener la relación entre ellas
 También debemos tomar en cuenta de
2FN:
 Los registros tan sólo deben depender de la
clave principal de una tabla (si es necesario,
puede ser una clave compuesta).
 Con ello podemos deducir que FechaDev
depende del CodLibro y CodLector por lo
que la colocaremos en esta nueva tabla

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

Análisis del ejemplo…


 De lo anterior se desprende que:
 Para estar cumplir con 3FN debemos sacar
Autor y Editorial y mandarlos a sus propias
tablas
 Para cumplir con 2FN, deberemos crear sus
propias PK que serán: CodAutor y CodEditorial
.

34
Libro

Resultado:
3FN? Libro Autor
Editorial

Relación entre tablas


 Para mantener las relaciones entre las
Tablas deberemos crear las tablas con las
PK de cada una de las nuevas tablas para
no perder la información acerca de qué
autor ha escrito qué libro y las editoriales
correspondientes.

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.

Bases de Datos Relacionales


REGLAS DE INTEGRIDAD:

Acciones para eliminar y actualizar filas referenciadas

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:

Acciones para eliminar y actualizar filas referenciadas

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

"Vendedor" En un campo de texto, cambia un valor de texto a Vendedor.

#10/8/17# En un campo de fecha y hora, cambia un valor de fecha a 10-ago-17.

Sí En un campo de tipo Sí/No, cambia el valor No a Sí.

"NP" & [NúmeroPieza] Agrega "NP" al principio de cada número de pieza especificado.

[PrecioUnidad] * [Cantidad] Multiplica los valores de los campos PrecioUnidad y Cantidad.

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

Para lo cual sólo necesitamos conocer:


1. Qué datos queremos obtener?
2. Dónde están los datos?
3. Qué condición deben cumplir los datos?
4. Cómo debe estar ordenado el resultado?
115

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

12.Identificar los estudiantes que comparten vivienda, según el

58
Consultas en SQL
Consultas:

15.Informar la cantidad de materias aprobada por los alumnos en un


determinado año, por Ej 2009.

16.Modificar la consulta anterior para sólo informar los que hayan


aprobado mas de 2 materias en ese año
17.Modificar el domicilio de la docente Minetti, su nuevo domicilio es
Calle 101 Nro 955
18.Incorporar las cursadas de los estudiantes del presente año. Al
menos 1 nuevo registro
19.Eliminar el estudiante Weizz. Pudo?? Por que??
20.Eliminar la estudiante Karina Perez. Pudo?? Por que??

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

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

DELETE FROM CURSA


WHERE AÑO_LECTIVO = 2006;

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;

2. Mostrar el nombre y número de documento de todos los estudiantes


SELECT NOMBRE, DNI
FROM ALUMNOS;

3. Ídem a la 2 pero ordenar el resultado alfabéticamente por nombre


del estudiante
SELECT NOMBRE, DNI
FROM ALUMNOS
ORDER BY NOMBRE ASC;

4. Buscar los estudiantes que se llaman Fernando


SELECT NOMBRE, DNI 126

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*';

O bien usando Subquery:

SELECT NOMBRE,CARRERA,CUATRIMESTRE
FROM MATERIA
WHERE DNI_PROFESOR IN ( SELECT DNI
FROM DOCENTES
WHERE NOMBRE LIKE '*RAMOS RAQUEL*');

10.Identificar las materias que aún no tienen profesor asignado


SELECT NOMBRE,CARRERA,CUATRIMESTRE
129
FROM MATERIA
WHERE DNI_PROFESOR IS NULL;

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.

19.Eliminar el estudiante Weizz. Pudo?? Por que??


DELETE FROM ALUMNOS
WHERE NOMBRE LIKE '%Weizz%';

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:

Para lo cual sólo necesitamos conocer:


1. Qué datos queremos obtener?
2. Dónde están los datos?
3. Qué condición deben cumplir los datos?
4. Cómo debe estar ordenado el resultado?
135

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

12.Identificar los estudiantes que comparten vivienda, según el

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;

2. Mostrar el nombre y número de documento de todos los estudiantes


SELECT NOMBRE, DNI
FROM ALUMNOS;

3. Ídem a la 2 pero ordenar el resultado alfabéticamente por nombre


del estudiante
SELECT NOMBRE, DNI
FROM ALUMNOS
ORDER BY NOMBRE ASC;

4. Buscar los estudiantes que se llaman Fernando


SELECT NOMBRE, DNI 146

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%';

O bien usando Subquery:

SELECT NOMBRE,CARRERA,CUATRIMESTRE
FROM MATERIA
WHERE DNI_PROFESOR IN ( SELECT DNI
FROM DOCENTES
WHERE NOMBRE LIKE '%RAMOS
RAQUEL%');

10.Identificar las materias que aún no tienen profesor asignado


149
SELECT NOMBRE,CARRERA,CUATRIMESTRE
FROM MATERIA

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;

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;

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.

SELECT LEGAJO, NOMBRE


FROM ALUMNOS
WHERE NOT EXISTS ( SELECT COD_MAT
FROM MATERIA
WHERE AÑO=3 AND CARRERA ='Ing. Sistemas'
MINUS
SELECT COD_MAT
FROM EXAMEN
WHERE NOTA>=4 AND
EXAMEN.LEGAJO = ALUMNOS.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…

SELECT LEGAJO, NOMBRE


FROM ALUMNOS
WHERE NOT EXISTS ( SELECT *
FROM MATERIA
WHERE AÑO=3 AND CARRERA ='Ing. Sistemas' AND
NOT EXISTS ( SELECT *
FROM EXAMEN
WHERE NOTA>=4 AND
EXAMEN.COD_MAT= MATERIA.COD_MAT AND
EXAMEN.LEGAJO = ALUMNOS.LEGAJO));

162

81

También podría gustarte