Documentos de Académico
Documentos de Profesional
Documentos de Cultura
relacionales y SQL
Elaborado por: María del Pilar Villamil y Daniel Galindo Ruiz
Algunas referencias de apoyo
* SQL Primer: An Accelerated Introduction to SQL Basics
Rahul Batra
Published by Apress, 2018
Se sugieren para práctica de SQL los capítulos a partir del capítulo 5.
Este libro está disponible de forma digital en la biblioteca de la Universidad. Puede
acceder a él haciendo clic sobre este texto.
* MySQL 8 Cookbook
Karthik Appigatla
Published by Packt Publishing
Insert,
Generalidades Update, Joins Modelos
Delete E/R
SQL - Group
SQL- DDL DML by -
básico Having
MODELO RELACIONAL:
DEFINICIÓN BÁSICA
Existen varios Sistemas Manejadores de Bases de Datos Relacionales (SMBDR), entre los que se
encuentra MySQL, el cual usaremos en este curso. Un SMBDR es un sistema responsable del manejo de
datos de forma transparente al usuario que permite entre otras funcionalidades crear y manipular la
información almacenada en tablas garantizando, en caso de requerirse, un manejo transaccional.
A continuación, veremos nuestra primera instrucción SQL: "CREATE". Esta instrucción crea una tabla en la
base de datos y de ne restricciones sobre la información que se guardará en dicha tabla. Para crear la
tabla del ejemplo anterior, usaríamos la siguiente instrucción, cuyo resultado es la creación de una tabla
vacía, con las columnas como se ve a la derecha de la instrucción.
Una restricción de integridad es una regla que se de ne en una o más columnas de una tabla, con el propósito de
que los datos que se guarden en dichas columnas, guarden integridad y con abilidad al cumplir dicha restricción.
En el ejemplo de creación de la tabla de clientes, ya incluímos algunas restricciones o reglas, como lo fueron las
longitudes máximas de las columnas de "Nombre", "Email" y "Teléfono". Pero podemos agregar más restricciones
como las siguientes:
Llave primaria ("PRIMARY KEY" en SQL): La columna que tiene esta restricción contiene el valor que hace de
llave primaria de la tabla. Una llave primaria identi ca una la de manera única. Implícitamente, una llave
primaria es única y no nula.
Llave foránea ("FOREIGN KEY" en SQL): La columna que tiene esta restricción contiene el valor de una llave
única, ya existente en una tabla, típicamente una llave primaria. Una llave foránea por si sola no tiene
restricción de unicidad ni de no nulidad.
No nulo ("NOT NULL" en SQL): Indica que no pueden haber valores vacíos o nulos en la columna.
No duplicado ("UNIQUE" en SQL): Indica que los valores guardados en esa columna son únicos y que no
pueden repetirse en diferentes las.
Retomemos el comando CREATE que vimos previamente y agreguemos un par de restricciones y una secuencia
sobre la tabla de clientes, para mejorar la integridad y calidad de datos que vayamos a guardar ahí:
Antes de continuar, mostraremos algunos ejemplos de cómo afectan las restricciones de integridad el
comportamiento de los datos en la tabla de clientes. A la izquierda hay una tabla de clientes creada sin restricciones
y a la derecha hay restricciones, en la tabla con restricciones. Pon el cursor sobre los recuaros de color que hay sobre
las tablas para ver explicaciones breves.
Veamos ahora la forma de crear una llave foránea y su signi cado. Queremos representar que en la tabla de ventas
el idCliente es el identi cador de un cliente válido. Esto es, un cliente que previamente se ingresó a la tabla de
clientes. Es así como en la sentencia de creación de la tabla de ventas lo expresamos de la siguiente manera:
CREATE TABLE ventas (
NumVenta INT PRIMARY KEY Esta última la representa la llave foránea (FK)
, IdCliente INT NOT NULL creada sobre el campo IdCliente de la tabla de
, IdProducto INT NOT NULL ventas. De esta forma, todo idCliente de esa tabla
, Valor FLOAT NOT NULL debe existir en el campo ID de la tabla de clientes
, FOREIGN KEY (IdCliente) REFERENCES Clientes(ID); para poder registrar la venta.
Esto funciona, si en la tabla de clientes se de nió en el campo ID la restricción de llave primaria (PRIMARY KEY).
Recuerda que una FK no exige que el campo sea NOT NULL, por eso en este ejemplo lo expresamos
especí camente en la columna IdCliente con la restricción NOT NULL.
Tabla de ventas Tabla de clientes
ID Nombre Email Teléfono
NumVenta IdCliente IdProducto Valor
PK NN NN, U NN
PK FK FK,NN NN
01 Juan Perez jp@mail.com 734984
2345 01 45 100000
02 María Paz mp@mail.com 4237789
2347 02 32 367000
03 Pepe Rodríguez pr@mail.com 9902354
MODELO RELACIONAL:
INSERT
Ahora podemos pasar a realizar otras operaciones sobre tablas: "INSERT" para agregar una nueva la o registro,
"UPDATE" para actualizar valores en las y "DELETE" para eliminar las. Aquí seguiremos trabajando con la tabla
"clientes", más especí camente, con la tabla que creamos con restricciones y secuencia, asumiendo que está
vacía.
Primero vamos a agregar las en la tabla. Para ello usamos INSERT así:
Como adición al tema de eliminar datos, también es importante mencionar que puedes eliminar tablas completas.
Esto se hace con "DROP", por ejemplo, para borrar la tabla "clientes", usaríamos:
DROP TABLE clientes;
Este comando funciona si no existen otras tablas que tengan relación con la tabla de clientes.
Un comando similar al "DELETE" es "TRUNCATE TABLE" que internamente hace el drop table y create table, lo que
lo hace más eficiente. Sin embargo, una vez ejecutado no es posible recuperar el contenido con un comando de
ROLLBACK.
TRUNCATE TABLE clientes;
MODELO RELACIONAL:
SELECT
Hasta ahora hemos visto cómo crear una tabla con restricciones y secuencias, también aprendimos a agregar,
actualizar y eliminar las en una tabla. Ahora podemos pasar a aprender cómo hacer consultas sobre una o más
tablas. SQL permite realizar consultas al buscar información basada en proyecciones y selecciones.
Las proyecciones corresponden a lo que se desea como respuesta de la consulta (o query), es decir, las columnas
resultado. Las selecciones son restricciones a aplicar sobre las columnas de las tablas, para así determinar cuáles
las obtener.
Veamos un ejemplo básico para ilustrar lo anterior. Usaremos el comando "SELECT" sobre la tabla de clientes (con
una columna adicional - Fecha), que hemos venido trabajando, de la siguiente manera:
SELECT Nombre FROM clientes WHERE Email LIKE "%mail.com" AND ID > 1;
SELECT Email FROM clientes WHERE ID > 1 OR Nombre LIKE "% Perez";
Hemos visto cómo realizar consultas sobre datos de una tabla, con diferentes operadores en la condición
de selección. Hay otro concepto que complementa las consultas, que es el de vistas. Una vista es una
consulta SQL que retorna una tabla como ya hemos visto en la diapositiva anterior. De entrada, esto parece
no tener ninguna utilidad, porque sería repetir una consulta SQL que ya sabes hacer.
Sin embargo, las vistas tienen sus ventajas. Dos ventajas principales son:
1. Ahorran la necesidad de repetir la misma consulta (o query en inglés) en la base de datos. Esto es
especialmente útil cuando se necesitan hacer consultas complejas.
2. Ayudan a mantener con dencialidad de información, pues hay tablas que tienen datos sensibles y que
no deberían poder verse por ciertas personas. Por ejemplo en una empresa, las tablas de clientes contienen
sus direcciones de residencia, las cuales solo los trabajadores del departamento de Recursos Humanos
deberían poder ver. Con una vista se puede generar una tabla de clientes que no contenga la columna con
las direcciones de residencia y sería esa tabla con la que trabajarían los demás departamentos de la
empresa.
MODELO RELACIONAL:
JOIN
Hemos visto cómo realizar consultas sobre datos de una tabla, con diferentes operadores en la condición
de selección y adicionalmente, hemos visto cómo crear vistas a partir de tablas de la base de datos. Ahora
vamos a ver cómo realizar consultas sobre más de una tabla, aprovechando el hecho de que estamos
usando un modelo relacional, es decir, que relaciona datos varias tablas.
Para ello, usaremos el operador "JOIN" o "INNER JOIN" (son equivalentes pero se acostumbra a usar
INNER JOIN) y algunos de sus derivados: "LEFT OUTER JOIN" y "RIGHT OUTER JOIN". Para ello, vamos a
usar una tabla nueva llamada "ventas", que contiene la información de ventas realizadas por la empresa a
sus clientes. Observa la columna "IdCliente" en la nueva tabla, es una columna de llave foránea que
contiene llaves primarias de clientes en la otra tabla, lo cual permite relacionar una venta con un cliente.
Antes de entrar a los detalles del lenguaje, comprendamos de forma grá ca el signi cado de cada uno de
los tipos de JOIN.
Veamos las tablas de clientes y ventas únicamente con la columna relacionada con el cliente en una
representación de conjuntos. Haz clic en el más del tipo de join que quieres entender mejor.
Tabla de clientes
Tabla de ventas
Tabla de clientes
Tabla de ventas
INNER JOIN
ID (PK) IdCli(FK)
01 01
02 ID idCli 02
03 01 01 04
02 02
Tabla de clientes
Tabla de ventas
LEFT JOIN
ID (PK) IdCli(FK)
01 ID idCli 01
02 01 01
02
03 02 02
03 - 04
ID (PK) 01 IdCli(FK)
Tabla de clientes 03 02 Tabla de ventas
04
MODELO RELACIONAL:
RIGHT OUTER JOIN
Tabla de clientes
RIGHT JOIN Tabla de ventas
ID (PK) IdCli(FK)
01 ID IdCli 01
02 01 01
02
03 02 02
- 04 04
ID (PK) 01 IdCli(FK)
Tabla de clientes 03 02 Tabla de ventas
04
MODELO RELACIONAL:
FULL OUTER JOIN
Tabla de clientes
Tabla de ventas
ID (PK) ID IdCli
01 01 IdCli(FK)
01 02 02 01
02 03 - 02
03 - 04
04
ID (PK) 01 IdCli(FK)
Tabla de clientes 03 02 Tabla de ventas
04
MODELO RELACIONAL:
JOIN
Sabiendo que existe una relación entre las tablas, veamos cómo funcionan en detalle
los tipos de JOIN:
INNER JOIN: Une las columas de las tablas según valores que coincidan en ambas
tablas.
ID idCli
01 01
02 02
03 - LEFT OUTER JOIN: Une todas las columnas de la tabla de la izquierda con las
columnas de la tabla de la derecha según los valores que coincidan. Las las que no
coinciden aparecen como resultado pero los datos de la columnas asociadas a la tabla
donde no existen quedan sin valor(NULL).
ID IdCli
01 01
RIGHT OUTER JOIN: Une todas las columnas de la tabla de la derecha con las columnas 02 02
- 04
de la tabla de la izquierda según los valores que coincidan. Las las que no coinciden
aparecen como resultado pero los datos de la columnas asociadas a la tabla donde no
existen quedan sin valor(NULL).
FULL OUTER JOIN: Une todas las columnas de la tabla de la izquierda con las
columnas de la tabla de la derecha según los valores que coincidan. Las las que no
coinciden en alguna de las tablas, aparecen como resultado pero los datos de la
columnas asociadas a la tabla donde no existen quedan sin valor(NULL).
.
MODELO RELACIONAL:
GROUP BY, HAVING
Ahora, vamos a ver cómo hacer operaciones dentro de las columnas para generar nuevo
conocimiento a partir de los datos guardados en ellas. Para ello, usaremos "GROUP BY" y también
"HAVING". Usaremos una tabla de ventas con una la adicional:
2345 01 45 100000
2347 02 32 367000
2348 04 71 60500
2349 04 72 90000
En la nueva versión de la tabla de ventas, tenemos dos compras realizadas por un mismo cliente (de
id 4).
MODELO RELACIONAL:
GROUP BY, HAVING
Veamos un ejemplo de la función GROUP BY, con el cual obtenemos el total de las ventas de cada
cliente:
Veamos un ejemplo de la función GROUP BY, acompañada de la expresión "HAVING" con la cual
obtenemos los identi cadores de los clientes cuyos gastos en compras suman más de $100.000:
04 150500
NumVenta IdCliente IdProducto Valor
PK FK FK,NN NN
2345 01 45 100000 IdCliente totalVentas
2347 02 32 367000
02 367000
2348 04 71 60500
2349 04 72 90000 04 150500
MODELO ENTIDAD/RELACIÓN
Veamos cómo leer el siguiente modelo entidad/relación. En este punto lo más importante son las relaciones
entre las entidades y su forma. En este caso, la terminación en tres líneas signi ca cardinalidad de muchos.
Mientras que una línea simple, signi ca cardinalidad de 1. Así las relaciones que observamos son de 1 a
muchos.
La línea vertical en la relación signi ca que al llevar este modelo conceptual al modelo relacional basado en
tablas, se hereda la FK como parte de la PK de la entidad que tiene múltiplicidad muchos. Hay otro punto
importante que se debe aclarar y es que en un modelo relacional al interior de una tabla, no es permitido
tener atributos multivalor. Esto signi ca que NO es posible tener como atributo una lista o colección de
elementos.
Teniendo esta teoría, ¿cómo queda el modelo de tablas que representa este modelo conceptual? .. Vamos a
verlo en la siguiente página.
Id Id
audio_004
Id
MODELO ENTIDAD/RELACIÓN
Id
45 1 01 1 4 1'
47 6 01 19800203 1 5 500.
47 7 01 19851004 2 3 800'
47 8 01 20000101 3 4 2'
audio_005
MODELO ENTIDAD/RELACIÓN
A practicar lo visto !
Objetivo.
Comprender el manejo de las relaciones de un modelo conceptual a un modelo físico.
Tu misión.
Jefe Determinar cuál de las entidades en su representación de tablas, hereda la llave
primaria de la otra entidad.
NO SÉ
EMPLEADO DEPENDENCIA NO SÉ
MODELO ENTIDAD/RELACIÓN
Intenta nuevamente!!
Piensa en el espacio utilizado por esa nueva columna en Empleados -idDependencia- ya que puede tener
muchos valores en Nulo. En este ejemplo, supongamos que Marta Rosas es la jefe de Recursos Humanos y
que los otros empleados no son jefes de ninguna despendencia ya que que en la actualidad no se ha
designado el jefe de mercadeo. Eso lleva a que tenga sentido que Juan Perez y Martina Hernández no tengan
valor en la columna idDependencia.
Empleados
Dependencias
Codigo Nombre FechaNac IdDependencia
Número Nombre
PK NN FK
PK NN
2345 Juan Perez
Jefe 02 RRHH
2347 Marta Rosas 19800203 02
Pedro 04 Mercadeo
2348 19851004
Páramo
Martina
2349 20000101
Hernández
MODELO ENTIDAD/RELACIÓN
Pedro 04 Mercadeo
2348 19851004
Páramo
Martina
2349 20000101
Hernández
MODELO ENTIDAD/RELACIÓN
Correcto. Fíjate que tienes una relación de 1 a 1 y en este caso la Dependencia manejaría el código
del empleado que es Jefe y si aún no lo tiene asignado esa columna no tendrá valor (Null).
Empleados
Codigo Nombre FechaNac Dependencias