Modulo 5 LenguajeSQL
Modulo 5 LenguajeSQL
EN PROGRAMACIÓN
A DISTANCIA
1. ¿Qué es SQL?
El Structured Query Language (SQL) es el lenguaje estándar para trabajar con
bases de datos relacionales. Fue creado en los años 70 y, desde entonces, se convirtió
en la forma más extendida de almacenar y consultar información.
A diferencia de otros lenguajes de programación, SQL no nos obliga a
describir paso a paso lo que debe hacer la computadora. En lugar de eso, expresamos
directamente qué información necesitamos, y el motor de la base de datos se
encarga de planificar la mejor forma de obtenerla.
Por ejemplo, en un lenguaje imperativo (como Python) deberíamos recorrer
una lista de registros con un bucle, verificar condiciones y armar una nueva lista con
los resultados. En SQL, en cambio, con una sola instrucción SELECT podemos
expresar la misma necesidad sin preocuparnos por el procedimiento exacto.
2. Sublenguajes de SQL
SQL no es un único bloque monolítico, sino que se organiza en “sub -lenguajes” que
agrupan distintos tipos de operaciones:
• DDL (Data Definition Language): se ocupa de definir la estructura de la
base de datos. Incluye comandos como CREATE, ALTER, DROP. Con DDL
diseñamos las tablas, especificamos sus columnas, claves primarias y
foráneas.
• DML (Data Manipulation Language): se centra en los datos que viven
dentro de esas estructuras. Sus comandos principales son SELECT, INSERT,
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
6. Actividad práctica
1. Crear una tabla llamada Clientes con los campos: ClienteID (clave primaria),
Nombre, Email.
2. Insertar al menos tres registros.
3. Hacer un SELECT para mostrar todos los clientes.
4. Hacer un SELECT que muestre solo los clientes con un email que termine en
@[Link].
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
PARTE 1:
Introducción a SQL
El paradigma de SQL
SQL se basa en el paradigma declarativo, que es fundamentalmente diferente de los lenguajes de
programación tradicionales. En SQL no se indica “cómo” hacer algo paso a paso de la forma en que
estamos acostumbrados en los algoritmos de programación, sino que se describe “qué” se necesita
obtener, por ello se dice que es declarativo.
Álgebra Relacional
SQL implementa operaciones matemáticas sobre conjuntos:
● Selección (WHERE): filtra filas
● Proyección (SELECT): elige columnas
● Unión (UNION): combina resultados
● Intersección (INTERSECT): elementos comunes
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Naturaleza Descriptiva
Describes el resultado que buscas, no el algoritmo para obtenerlo. El motor de base de datos decide la
estrategia óptima de ejecución. Es importante comprender que tiene grandes diferencias con la
programación imperativa, que debemos de pensar de forma diferente según estas características
distintivas
● Sin orden inherente: Las tablas son conjuntos, no listas ordenadas
● Idempotencia: La misma consulta siempre produce el mismo resultado
● Composición: Puedes anidar consultas y combinar operaciones
● Optimización automática: El motor decide cómo ejecutar tu consulta de forma eficiente
SQL está compuesto de sub-lenguajes destinados a diferentes operaciones en la gestión de las bases de
datos. A saber: DDL es lenguaje de definición de datos (Data Definition Language) se encarga de la
estructura de la base de datos, DML es el lenguaje de manipulación de datos (Data Manipulation
Language) se encarga de manipular los datos dentro de las estructuras ya creadas. Es como el "operario"
que trabaja con el contenido de las tablas que el DDL ya construyó y es el que principalmente
abordaremos en este módulo, finalmente, DCL es el Lenguaje de Control de Datos (Data Control
Language) destinado a permisos y seguridad.
La nomenclatura con "Language" refleja que cada uno tiene su propio conjunto de reglas, sintaxis y
propósito específico dentro del ecosistema SQL.
Estudiaremos DDL y DCL detalladamente en los módulos siguientes, pero hagamos aquí una
introducción para cubrir lo elemental:
Crear tabla
CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(50),
salario DECIMAL(10,2)
);
Modificar estructura
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Eliminar tabla
DROP TABLE empleados;
Veremos con mayor profundidad este el lenguaje en el módulo siguiente, pero cabe mencionar que
todo lo referido relacionado con la creación de esquemas , tablas y columnas, índices, relaciones entre
tablas, vistas y otras relacionadas están abarcadas en DDL.
PARTE 2:
Introducción a DML
Insertar datos (INSERT): Se utiliza para agregar nuevos registros (filas) a una tabla. Por ejemplo,
cuando un nuevo usuario se registra en una página web, su información se inserta en una tabla de
usuarios.
Actualizar datos (UPDATE): Permite modificar los datos de registros existentes en una tabla. Por
ejemplo, si un usuario cambia su dirección, se usa UPDATE para actualizar el campo de dirección en su
registro.
Borrar datos (DELETE): Se utiliza para eliminar registros de una tabla. Por ejemplo, si un usuario
cancela su cuenta, se puede borrar su registro de la base de datos.
● Consulta datos existentes (SELECT)
● Insertar nuevos datos (INSERT)
● Actualiza datos existentes (UPDATE)
● Elimina datos específicos (DELETE)
SELECT
SELECT es el comando m usado y uno de los más complejos en SQL, tiene un gran potencial y para
dominarlo debemos ir desde los básico gradualmente a lo más complejo
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Para obtener todas las columnas de la tabla sin necesidad de detallar las usamos “*”
Filtros
Las operaciones con SELECT generalmente trabajan sobre un sub-conjunto de valores o parte de una
tabla que cumple cortas condiciones, y muchas veces sobre una única fila, de allí la importancia de
definir condiciones apropiadas dentro de los SELECT, para ello generalmente usamos WHERE
SELECT * FROM productos WHERE precio > 500 AND stock < 10;
Podemos filtrar ciertos valores de una columna indicando una lista de ellos:
Para el tratamiento de las cadenas tiene sus particularidades donde podemos usar = o LIKE
En el caso de LIKE existe un comodín ”%” que podemos ubicar en diferentes posiciones
● A) % al final ('patron%')
Busca valores que comiencen con un patrón específico. Esto es útil para encontrar todos los
registros que inician con un conjunto de caracteres.
SELECT * FROM clientes WHERE nombre LIKE 'Mar%';
Esta consulta devolverá registros con nombres como María, Mario, Marta, etc.
● B) % al principio ('%patron')
Busca valores que terminan con un patrón específico. Se utiliza para encontrar registros que
finalizan con un determinado conjunto de caracteres.
SELECT * FROM productos WHERE nombre LIKE '%computadora';
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Esta consulta devolvería artículos que tienen la palabra oferta en su descripción, sin importar si
está al principio, en medio o al final.
Aunque no se use el comodín, LIKE también puede usarse para una coincidencia exacta, aunque
el operador “=” es el más común para este fin.
Ordenamiento
En las consultas suele ser muy importante el orden en que se presentan los datos, más allá de los
casos simples y especificar si el orden es ascendente o descendente, es posible aplicar un límite a la
cantidad de filas presentadas, también utilizar funciones y operaciones sobre los datos y ordenar de
acuerdo con esos resultados. Veamos algunos ejemplos
Especificamos que el ordenamiento sea por categoría ascendente y luego el precio descendente
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
SELECT nombre, precio FROM productos WHERE precio > (SELECT AVG(precio) FROM productos);
Agrupación
En muchas oportunidades vamos a necesitar datos agrupados la clausula ORDER BY es la encargada de
realizar esta tarea en una consulta.
La siguiente consulta muestra una fila por departamento e indica el promedio de salario
La sintaxis básica de la cláusula implica la existencia de una función de agregación y el detalle de las
columnas luego del GROUP BY, debes indicar todas las columnas no agrupadas del SELECT en la
cláusula GROUP BY y el orden definitivo será establecido en ORDER BY.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
PARTE 2:
Operaciones de inserción
INSERT con Subconsultas, si los datos dependen de otra tabla podemos expresar asi :
También es posible insertar una fila sin especificar todos sus valores, en tal caso se tomarán los valores
por defecto.
Atención: Debemos tener en cuenta que la cláusula INSERT es mucho más compleja de lo que parece,
el software de la base de datos debe realizar una serie de operaciones adicionales a agregar el dato a
la tabla, debemos considerar que si existen claves foráneas es ne cesario validarlas, si existen índices
también deben actualizarse, etc.
Por ejemplo, MYSQL antes de insertar verifica:
Permisos del usuario
Sintaxis de la consulta
Existencia de la tabla y columnas
Tipos de datos compatibles
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
PARTE 3:
Conclusiones
Un programador necesita conocer SQL porque las aplicaciones interactúan con bases de datos para
almacenar, gestionar y recuperar información. SQL es el lenguaje estándar para comunicarse con estas
bases de datos relacionales.
Razones clave
Base de Datos
Fundamentos de SQL:
Lenguaje para Bases de
Datos Relacionales
Una introducción completa al Structured Query Language.
¿Qué es SQL?
Definición y Propósito
SQL (Structured Query Language) es el lenguaje estándar para gestionar
bases de datos relacionales.
Claves
Identificadores únicos (claves primarias) y referencias a otras tablas
(claves foráneas) que establecen relaciones.
Relaciones
Conexiones lógicas entre tablas (uno a uno, uno a muchos, muchos
a muchos) que modelan la realidad.
Tipos de Sentencias SQL
DML
DDL
Data Manipulation Language
Data Definition Language
SELECT: Consultar datos
CREATE: Crear objetos
INSERT: Insertar registros
ALTER: Modificar estructura
UPDATE: Actualizar datos
DROP: Eliminar objetos
DELETE: Eliminar registros
TCL
DCL
Transaction Control Language
Data Control Language
COMMIT: Confirmar cambios
GRANT: Otorgar permisos
ROLLBACK: Deshacer cambios
REVOKE: Revocar permisos
SAVEPOINT: Puntos de guardado
Ejemplo Práctico
Operadores Lógicos
Combinan múltiples condiciones para crear filtros complejos.
Patrones de Texto
Búsqueda flexible de texto con comodines.
Ejemplo Práctico
Sintaxis y Uso
UPDATE tabla
SET columna1 = valor1, columna2 = valor2, ...
WHERE condición;
Ejemplo Práctico
UPDATE alumnos
SET
edad = 23,
email = '[Link]@[Link]'
WHERE nombre = 'Lucía' AND apellido = 'García';
Sintaxis y Consideraciones
Ejemplo Práctico
DELETE FROM alumnos
WHERE edad < 18;
Recomendación: antes de ejecutar DELETE, verifique los datos
con SELECT.
JOINS - Uniendo Tablas
INNER JOIN
Devuelve registros cuando hay coincidencias en ambas tablas.
LEFT JOIN
Devuelve todos los registros de la tabla izquierda y los que coinciden de la derecha.
RIGHT JOIN
Devuelve todos los registros de la tabla derecha y los que coinciden de la izquierda.
SELECT
[Link],
[Link],
c.nombre_carrera,
[Link] AS asignatura,
[Link]ón
FROM alumnos a
INNER JOIN carreras c ON a.id_carrera = [Link]
INNER JOIN matriculas m ON [Link] = m.id_alumno
INNER JOIN asignaturas asig ON m.id_asignatura = [Link]
WHERE c.nombre_carrera = 'Informática'
ORDER BY [Link], [Link], [Link];
Esta consulta recupera todos los alumnos de Informática junto con las asignaturas en las
que están matriculados y sus calificaciones, ordenando los resultados alfabéticamente.
En la cláusula WHERE
En la cláusula FROM (subconsulta como tabla)
En la cláusula SELECT
Ejemplo Práctico
Las funciones de agregación realizan cálculos sobre conjuntos de valores y devuelven un único resultado.
COUNT()
Cuenta el número de filas o valores no nulos.
SELECT COUNT(*)
FROM alumnos;
SUM() AVG()
Calcula la suma de los valores de una columna numérica. Calcula el promedio de los valores de una columna numérica.
MAX() MIN()
Encuentra el valor máximo de una columna. Encuentra el valor mínimo de una columna.
La cláusula GROUP BY permite agrupar filas con valores idénticos en la columna especificada,
aplicando funciones de agregación a cada grupo.
SELECT
carrera,
COUNT(*) as total_alumnos
FROM alumnos
GROUP BY carrera;
La cláusula HAVING filtra los resultados agrupados, mientras que WHERE filtra antes de la
agrupación.
SELECT
carrera,
COUNT(*) as total_alumnos
FROM alumnos
GROUP BY carrera
HAVING COUNT(*) > 10;
Vistas (Views) - Consultas Predefinidas
¿Qué son las vistas?
Las vistas son consultas SQL almacenadas que actúan como tablas virtuales. No contienen
datos físicamente, sino que muestran datos de otras tablas de forma dinámica.
Ventajas
Sintaxis y Ejemplo
-- Consultar la vista
SELECT * FROM vista_alumnos_activos;
Los índices son estructuras de datos especiales que mejoran la velocidad de recuperación de
datos, similar a un índice en un libro.
Tipos de Índices
Creación de Índices
Los índices aceleran las consultas pero pueden ralentizar las operaciones de escritura (INSERT,
UPDATE, DELETE).
Buenas Prácticas en SQL
Optimización de Consultas Seguridad y Prevención Legibilidad y Mantenimiento
Selecciona solo las columnas Usa consultas parametrizadas para Usa indentación consistente
necesarias (evita SELECT *) evitar inyección SQL Incluye comentarios para explicar
Utiliza índices adecuadamente Implementa control de acceso con consultas complejas
Limita los resultados con WHERE GRANT/REVOKE Utiliza nombres descriptivos para
cuando sea posible Realiza copias de seguridad tablas y columnas
Usa JOINs en lugar de subconsultas regularmente Mantén un estilo coherente
cuando sea adecuado Prueba las sentencias DELETE/UPDATE (mayúsculas para palabras clave)
con SELECT primero
Próximos Pasos
• DML (Data Manipulation Language): Se usa para manipular los datos dentro de las
tablas. Incluye comandos como SELECT, INSERT, UPDATE y DELETE.
• DCL (Data Control Language): Controla el acceso a los datos. Los comandos principales
son GRANT y REVOKE para otorgar o quitar permisos.
SELECT
La sentencia SELECT se usa para consultar y recuperar datos de una o más tablas. Es la base de
cualquier consulta.
• Filtros con WHERE: Se usa para filtrar filas basándose en una condición. Ejemplo:
SELECT * FROM empleados WHERE salario > 50000;
INSERT
La sentencia INSERT se utiliza para agregar nuevas filas de datos a una tabla.
• Sintaxis básica: INSERT INTO tabla (columna1, columna2) VALUES (valor1, valor2);
• Insertar todas las columnas: Si se insertan valores en todas las columnas de la tabla en
el mismo orden en que fueron definidas, no es necesario especificar los nombres de
las columnas. Ejemplo: INSERT INTO empleados VALUES ('Juan', 'Pérez', 60000);
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
UPDATE
La sentencia UPDATE se usa para modificar los datos existentes en una o más filas de una
tabla. Es crucial usar la cláusula WHERE para evitar actualizar todas las filas de la tabla.
DELETE
La sentencia DELETE se usa para eliminar filas existentes de una tabla. Al igual que con
UPDATE, se debe usar WHERE para evitar borrar todas las filas.
JOINS
Como se describió en el material anterior, los JOIN se usan para combinar filas de dos o más
tablas basándose en una columna relacionada entre ellas. Los tipos principales son INNER
JOIN, LEFT JOIN y RIGHT JOIN. Por ejemplo, para obtener el nombre de un empleado y el
nombre de su departamento desde dos tablas distintas (empleados y departamentos), se
usaría un JOIN.
Subconsultas (Subqueries)
Las subconsultas son consultas anidadas dentro de otra consulta. Pueden ser utilizadas en
cláusulas como WHERE, FROM o SELECT para filtrar o seleccionar datos de manera más
dinámica.
Funciones de Agregación
Estas funciones realizan un cálculo en un conjunto de valores y devuelven un único valor. Son
comunes para resumir datos.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
• GROUP BY: Se utiliza para agrupar filas que tienen los mismos valores en columnas
específicas, lo que permite que las funciones de agregación operen en cada grupo.
Vistas (Views)
Las vistas son tablas virtuales que no almacenan datos, sino que representan el resultado de
una consulta SQL almacenada. Son útiles para simplificar consultas complejas, restringir el
acceso a datos y mejorar la seguridad.
• Una vez creada, puedes consultar la vista como si fuera una tabla normal: SELECT *
FROM vista_empleados_salarios;
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
3. Operaciones CRUD
SQL nos da comandos para modificar datos ya existentes, no solo para insertarlos.
Aquí es donde aparecen errores comunes si no se tiene cuidado.
a) INSERT múltiple
Hasta ahora insertamos un registro por vez. También se pueden agregar varios
juntos:
INSERT INTO Autores (AutorID, Nombre)
VALUES
(2, 'Julio Cortázar'),
(3, 'Gabriel García Márquez');
Esto ahorra tiempo y reduce la cantidad de sentencias ejecutadas.
b) UPDATE
Sirve para modificar información.
UPDATE Libros
SET Precio = 600
WHERE LibroID = 10;
Advertencia: si olvidamos el WHERE, se actualizarán todos los registros de la tabla.
c) DELETE
Elimina registros de forma permanente.
DELETE FROM Libros
WHERE LibroID = 10;
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Igual que en UPDATE, nunca debe ejecutarse sin WHERE, salvo que queramos vaciar
toda la tabla (y eso casi nunca es el caso).
4. Funciones de agregación
En lugar de mirar cada registro uno por uno, muchas veces queremos ver un
resumen numérico de los datos. Ahí aparecen las funciones de agregación:
• COUNT(*): cuántos registros hay.
• SUM(Precio): suma de valores de una columna.
• AVG(Precio): promedio de los valores de una columna.
• MAX(Precio), MIN(Precio): el mayor y el menor de una columna.
Ejemplo:
SELECT COUNT(*) AS CantidadLibros FROM Libros;
2 Paula 400 1
3 Rayuela 600 2
4 Bestiario 350 2
Consulta:
SELECT AutorID, COUNT(*) AS CantidadLibros
FROM Libros
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
GROUP BY AutorID;
Resultado:
AutorID CantidadLibros
1 2
2 2
3 1
Ahora cada autor aparece una sola vez con el total de libros asociados.
Otro ejemplo con promedio de precios:
SELECT AutorID, AVG(Precio) AS PrecioPromedio
FROM Libros
GROUP BY AutorID;
Resultado:
AutorID PrecioPromedio
1 450
2 475
3 700
6. Buenas prácticas
• Probar antes: si vas a hacer un DELETE o UPDATE, primero ejecutá un
SELECT con la misma condición para verificar que afecta a los registros
correctos.
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
7. Actividad práctica
1. Insertar tres clientes nuevos en la tabla Clientes.
2. Consultar los clientes cuyo nombre empiece con “A”.
3. Actualizar el email de un cliente.
4. Eliminar un cliente específico con DELETE.
5. Insertar varios libros para distintos autores y luego:
o Mostrar cuántos libros tiene cada autor (COUNT + GROUP BY).
o Calcular el precio promedio de los libros por autor (AVG + GROUP BY).
o Mostrar el autor que tiene el libro más caro (MAX + GROUP BY).
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
1. Introducción
Hasta ahora trabajamos con consultas sobre una sola tabla. Pero en una base de
datos real, los datos están distribuidos en varias tablas que se relacionan entre sí.
Por ejemplo: en una librería no alcanza con una tabla de Libros. También
necesitamos tablas de Autores, Clientes, Pedidos, etc.
La potencia de SQL está en poder combinar esas tablas para responder preguntas
más complejas.
2. JOINs
El JOIN permite unir dos o más tablas en una sola consulta, en base a una columna
común.
a) INNER JOIN (o simplemente JOIN)
Trae solo los registros que tienen coincidencia en ambas tablas.
Ejemplo con tablas:
Autores
AutorID Nombre
1 Isabel Allende
2 Julio Cortázar
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Libros
2 Rayuela 2
3 Bestiario 2
Consulta:
SELECT [Link], [Link]
FROM Libros
INNER JOIN Autores ON [Link] = [Link];
Resultado:
Titulo Nombre
b) LEFT JOIN
Devuelve todos los registros de la tabla izquierda, aunque no tengan coincidencia
en la tabla derecha.
Ejemplo: si tenemos un autor que todavía no publicó libros, igual aparecerá en la
consulta.
SELECT [Link], [Link]
FROM Autores
LEFT JOIN Libros ON [Link] = [Link];
Resultado:
Nombre Titulo
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
c) RIGHT JOIN
Es similar al LEFT, pero devuelve todos los registros de la tabla derecha.
En muchos motores de BD (como MySQL) se usa menos, porque suele alcanzarnos
con LEFT JOIN reorganizando el orden de las tablas.
3. Subconsultas
Una subconsulta es una consulta dentro de otra. Sirve para calcular un dato
intermedio y usarlo como condición o como columna.
Ejemplo: listar los libros cuyo precio sea mayor al promedio.
SELECT Titulo, Precio
FROM Libros
WHERE Precio > (
SELECT AVG(Precio) FROM Libros
);
Titulo Precio
Rayuela 600
4. Vistas (VIEW)
Las vistas son como “consultas guardadas” que se pueden reutilizar como si fueran
tablas.
Sirven para simplificar consultas complejas y dar acceso seguro a ciertos datos.
Ejemplo: crear una vista con el total de libros por autor.
CREATE VIEW LibrosPorAutor AS
SELECT AutorID, COUNT(*) AS CantidadLibros
FROM Libros
GROUP BY AutorID;
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Resultado:
AutorID CantidadLibros
1 1
2 2
5. Ejercicio
1. Hacer un INNER JOIN entre Autores y Libros para mostrar el nombre del
autor y el título de cada libro.
2. Hacer un LEFT JOIN que muestre todos los autores, incluso los que no
tienen libros.
3. Crear una subconsulta que muestre los libros más caros que el promedio de
precios.
4. Crear una vista llamada AutoresConLibros que muestre el nombre del
autor y la cantidad de libros que tiene.
Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Semana 3
PARTE 1:
Combinando datos
En una base de datos relacional, la información se distribuye en múltiples tablas para evitar la redundancia y
optimizar el almacenamiento. Los JOINs son un mecanismo esencial de SQL que permite combinar datos de
dos o más tablas en una única consulta, basándose en una relación lógica entre ellas, generalmente una clave
foránea que referencia a una clave primaria. Este proceso nos permite obtener información completa que
reside en tablas separadas.
La sentencia UNION por su parte permite ofrecer como resultado un conjunto de columnas que puede tener
orígenes en tablas distintas o, respetando algunos criterios, en instrucciones SELECT diferentes.
La combinación de estas dos formas de consulta es también posible, lo que ofrece una gran posibilidad de
combinaciones para obtener resultados.
Sentencia JOIN
Comencemos con la sentencia que permite juntar en una consulta datos de diferentes tablas. En general el
proceso de normalización busca evitar la redundancia de datos y la creación de tablas de manera eficiente.
Esta sentencia permite recuperar los datos distribuidos en diferentes tablas, utilizando para ello alguna
columna o más columnas comunes entre tablas.
La sintaxis general es la siguiente:
SELECT <columnas_a_seleccionar>
FROM <tabla_izquierda>
JOIN <tabla_derecha>
ON <condicion_de_union>;
Donde en FROM se coloca la tabla de origen, en JOIN se indica la tabla relacionada y dentro de ON se
especifican las columnas que deben coincidir. El resultado es la combinación de columnas seleccionadas de
las tablas indicadas en nuevas filas, que pueden tener datos redundantes.
Supongamos que tenemos una tabla con autores de libros que tiene como clave principal una columna
AutorID y otra tabla de Libros que tiene la columna AutorID para relacionarlos.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
La consulta:
Devuelve las columnas nombre de autor y título del libro, asociando cada autor con sus respectivos libros.
Aquí se combinan las columnas de dos tablas diferentes y la columna que las relaciona es AutorID, que está
presente en ambas tablas. Si existe algún autor que no tenga libros en la tabla, no aparece en esta consulta.
Pero JOIN tiene algunas variantes de comportamientos según se los datos que se necesite recuperar. Puedes
querer mantener los datos de la tabla origen aun cuando no tengas coincidencias en la tabla relacionado o
viceversa. Entonces veamos una comparación entre ellos
LEFT Todos los de la Todos los registros de la tabla En los campos de la tabla
JOIN izquierda + izquierda y los que coinciden en derecha cuando no hay
Coincidentes la derecha. coincidencia.
RIGHT Todos los de la Todos los registros de la tabla En los campos de la tabla
JOIN derecha + derecha y los que coinciden en la izquierda cuando no hay
Coincidentes izquierda. coincidencia.
El LEFT JOIN (también conocido como LEFT OUTER JOIN) devuelve todos los registros de la tabla izquierda,
junto con los registros coincidentes de la tabla derecha. Si no hay una coincidencia en la tabla de la derecha
para un registro de la izquierda, los campos de la tabla derecha se rellenan con valores NULL
Sintaxis:
SELECT <columnas_a_seleccionar>
FROM <tabla_izquierda>
LEFT JOIN <tabla_derecha>
ON <condicion_de_union>;
Ejemplo Listar todos los autores y los títulos de sus libros publicados, si tienen.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Resultado: Esta consulta devolverá todos los autores de la tabla Autores. Para los autores que tienen libros,
se mostrará el título del libro correspondiente. Para los que no, el campo Titulo mostrará NULL.
El RIGHT JOIN (también conocido como RIGHT OUTER JOIN) es la contraparte simétrica del LEFT JOIN.
Devuelve todos los registros de la tabla derecha, junto con los registros coincidentes de la tabla izquierda.6 Si
no hay coincidencia en la tabla de la izquierda, los campos de la tabla izquierda se rellenan con valores NULL.
Sintaxis:
SELECT <columnas_a_seleccionar>
FROM <tabla_izquierda>
RIGHT JOIN <tabla_derecha>
ON <condicion_de_union>;
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
SELECT DISTINCT
[Link],
[Link],
[Link],
COUNT(fi.item_id) AS total_ventas,
SUM([Link]) AS cantidad_total_vendida
FROM productos p
INNER JOIN factura_items fi ON p.producto_id = fi.producto_id
INNER JOIN facturas f ON fi.factura_id = f.factura_id
INNER JOIN clientes c ON f.cliente_id = c.cliente_id
INNER JOIN ubicaciones u ON c.codigo_postal = u.codigo_postal
WHERE [Link] = 'Laptop Gaming' -- Producto específico
GROUP BY u.codigo_postal, [Link], [Link], [Link]
ORDER BY cantidad_total_vendida DESC;
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
SELECT
[Link],
[Link],
COUNT(DISTINCT f.cliente_id) AS clientes_diferentes,
SUM([Link]) AS unidades_vendidas,
SUM([Link]) AS ingresos_totales
FROM productos p
INNER JOIN factura_items fi ON p.producto_id = fi.producto_id
INNER JOIN facturas f ON fi.factura_id = f.factura_id
INNER JOIN clientes c ON f.cliente_id = c.cliente_id
INNER JOIN ubicaciones u ON c.codigo_postal = u.codigo_postal
WHERE [Link] LIKE '%Laptop%' -- Productos que contengan "Laptop"
AND f.fecha_factura BETWEEN '2024-01-01' AND '2024-12-31'
GROUP BY u.codigo_postal, [Link], [Link]
HAVING unidades_vendidas > 5 -- Solo ciudades con más de 5 unidades vendidas
ORDER BY ingresos_totales DESC;
SELECT
[Link] AS producto,
[Link],
[Link],
[Link],
SUM([Link]) AS total_vendido,
COUNT(DISTINCT f.factura_id) AS facturas_diferentes,
COUNT(DISTINCT f.cliente_id) AS clientes_diferentes,
ROUND(SUM([Link]), 2) AS ingresos_total
FROM productos p
INNER JOIN factura_items fi ON p.producto_id = fi.producto_id
INNER JOIN facturas f ON fi.factura_id = f.factura_id
INNER JOIN clientes c ON f.cliente_id = c.cliente_id
INNER JOIN ubicaciones u ON c.codigo_postal = u.codigo_postal
WHERE p.producto_id = 1
GROUP BY p.producto_id, [Link], u.codigo_postal, [Link], [Link], [Link]
ORDER BY total_vendido DESC
LIMIT 10;
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Veamos otro ejemplo, en este caso obtener lo que falta, consideremos que tenemos las siguientes tablas, donde
cursos necesarios relaciona los cargos con los distintos cursos que correspondan al mismo.
Necesitamos encontrar que capacitaciones le faltan aprobar con nota superior a 8 un empleado para satisfacer
los requisitos del cargo que ocupa.
Para ello tenemos que determinar todos los cursos que cada empleado DEBERÍA tener (según su cargo) y
comparar esa lista con los cursos que REALMENTE tiene aprobados (calificación >= 8).
Comencemos analizando las partes de la consulta, primero obteniendo los curso s que debería tener un empleado
según el cargo que tiene.
SELECT
e.id_empleado,
[Link] AS nombre_empleado,
c.id_cargo,
cn.id_curso
FROM empleados e
INNER JOIN cursos_necesarios cn ON e.id_cargo = cn.id_cargo;
Esta consulta nos da una lista de todos los (empleado, curso) que son obligatorios.
Ahora, obtenemos los cursos que cada empleado ya aprobó (calificación >= 8).
SELECT
cr.id_empleado,
cr.id_curso
FROM cursos_realizados cr
WHERE [Link] >= 8;
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
SELECT
emp.id_empleado,
[Link] AS nombre_empleado,
car.nombre_cargo,
cur.id_curso,
cur.nombre_curso,
[Link] -- Mostramos la calificación si existe, aunque sea baja
FROM empleados emp -- Unimos para obtener el nombre del cargo
INNER JOIN cargos car ON emp.id_cargo = car.id_cargo -- Unimos para obtener todos los cursos obligatorios para el cargo
del empleado
INNER JOIN cursos_necesarios cn ON emp.id_cargo = cn.id_cargo -- Unimos para obtener el nombre del curso
INNER JOIN cursos cur ON cn.id_curso = cur.id_curso -- LEFT JOIN CRUCIAL: Traemos los cursos realizados que
coincidan (empleado + curso) y que estén aprobados. Si no existe, los valores serán NULL.
LEFT JOIN cursos_realizados cr ON emp.id_empleado = cr.id_empleado
AND cn.id_curso = cr.id_curso
AND [Link] >= 8
-- FILTRO: Nos quedamos solo con los registros donde NO HAY un curso aprobado.
WHERE cr.id_curso IS NULL;
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Parte 2
La sentencia UNION
Para entender UNION ALL, piensa en ella como una herramienta para combinar los resultados de dos o más
consultas SELECT en un solo conjunto de resultados. A diferencia de UNION, que elimina las filas duplicadas,
UNION ALL incluye todas las filas de cada consulta, incluso si son idénticas.
Imagina que tienes dos tablas: empleados_ventas y empleados_marketing. Quieres obtener una lista completa
de todos los empleados de ambos departamentos.
En este ejemplo, la columna 'Ventas' (y 'Marketing') se agrega a la salida para identificar a qué departamento
pertenece cada empleado.
Restricciones Importantes
Para que UNION ALL funcione correctamente, hay dos reglas cruciales que debes seguir:
Mismo número de columnas: Cada consulta SELECT que combines debe tener exactamente el mismo número
de columnas.
Tipos de datos compatibles: Las columnas correspondientes en cada consulta deben tener tipos de datos
compatibles entre sí. Por ejemplo, la primera columna de la primera consulta debe ser compatible con la
primera columna de la segunda consulta, y así sucesivamente.
Usando GROUP BY
Puedes usar la cláusula GROUP BY en una sola consulta para agrupar filas idénticas y, de esta forma, obtener
un conjunto de resultados sin duplicados. Es una forma efectiva de combinar la lógica de varias consultas en
una sola.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
En este caso, aunque se usa UNION ALL internamente para combinar los resultados, es el GROUP BY final el
que se encarga de la eliminación de duplicados.
Usando DISTINCT
El operador DISTINCT se utiliza para eliminar filas duplicadas de una única consulta SELECT. Si bien no es una
alternativa directa para combinar varias consultas como lo hace UNION, puedes usarlo en una subconsulta o
una CTE (Common Table Expression) para filtrar duplicados antes de la unión o en la unión misma.
Este ejemplo no elimina los duplicados entre los dos conjuntos de resultados combinados, solo dentro de cada
conjunto antes de la unión. Para eliminar los duplicados después de la unión, usarías UNION.
Sentencia WITH
Puedes definir múltiples subconsultas dentro de una sola sentencia WITH. Cada subconsulta se convierte en
un CTE con su propio nombre, y puedes unirlas usando UNION o UNION ALL en la consulta principal.
Expresión Común de Tabla (CTE): Cada subconsulta precedida por WITH y seguida de su propio nombre se
convierte en una Expresión Común de Tabla (CTE), que es un conjunto de resultados temporal y con nombre.
La sintaxis es simple:
WITH
CTE_Nombre1 AS (
-- Primera subconsulta aquí
SELECT columna1, columna2, ...
FROM tablaA
),
CTE_Nombre2 AS (
-- Segunda subconsulta aquí
SELECT columna1, columna2, ...
FROM tablaB
)
-- Consulta principal que combina los CTEs
SELECT * FROM CTE_Nombre1
UNION ALL
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Consideremos que necesitamos consolidar la información de ventas de productos vendidos en tiendas físicas
y en línea para un informe.
WITH
VentasFisicas AS (
SELECT
producto_id,
SUM(cantidad) AS total_vendido
FROM
ventas_tienda_fisica
GROUP BY
producto_id
),
VentasOnline AS (
SELECT
producto_id,
SUM(cantidad) AS total_vendido
FROM
ventas_online
GROUP BY
producto_id
)
SELECT
producto_id,
total_vendido
FROM
VentasFisicas
UNION ALL
SELECT
producto_id,
total_vendido
FROM
VentasOnline;
En esta consulta, VentasFisicas y VentasOnline son CTEs que agrupan las ventas por producto. La consulta
principal luego usa UNION ALL para combinarlas en un único resultado.
SQL
WITH
empleados_departamento AS (
SELECT
[Link],
[Link],
d.nombre_departamento
FROM
empleados e
INNER JOIN
10
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
En este caso, se definen dos CTEs: uno para empleados de alto salario y otro para proyectos activos. La consulta
principal luego realiza un JOIN entre estos dos CTEs para encontrar empleados que son líderes de proyectos
activos. Este método es mucho más fácil de leer y depurar que anidar múltiples subconsultas.
11
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
PARTE 3:
Conclusiones.
Como en muchos aspectos de las distintas profesiones, lo mas importante resulta conocer las herramientas
disponibles, conocer los casos en que son mejores unas que otras y como contribuyen a obtener los resulta dos
esperados. Sera necesario evaluar el costo-beneficio de utilizar unas u otras en cada caso. Aquí resumimos las
características, para identificar la mejor opción según las condiciones de uso.
Crea una "tabla ancha" con Crea una "tabla larga" con registros
Resultado
información de varias fuentes. de varias consultas.
Resumen en una Imagen Mental
• JOIN: Imagina dos hojas de cálculo (Excel) una al lado de la otra. Unes la información de una fila de la primera
hoja con la información correspondiente de la segunda hoja, usando un ID como pegamento.
• UNION: Imagina dos listas de nombres en dos hojas diferentes. Quieres juntar todos los nombres en una sola
lista larga, poniendo la segunda lista debajo de la primera.
La elección depende completamente de la pregunta que quieras hacerle a tus datos. Aquí tienes una guía
infalible:
1. INNER JOIN: "Solo lo que coincide"
• Pregunta clave: "¿Qué elementos de la Tabla A tienen una relación confirmada con la Tabla B?"
• Usalo cuando: Solo te interesan los registros que existen en ambas tablas. Es el más común y generalmente el
más eficiente.
12
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
• Ejemplo práctico: "Lista todos los pedidos que han sido pagados." (Un pedido sin pago no te interesa para este
reporte).
2. LEFT JOIN: "Todo de A, y lo que coincida de B"
• Pregunta clave: "Muéstrame todos los elementos de la Tabla A, y si tienen algo en la Tabla B, dame ese dato
también. Si no, déjalo en blanco."
• Usalo cuando: Tu foco principal es la primera tabla (la de la izquierda), y la segunda es información opcional o
complementaria. Es extremadamente útil para encontrar "lo que falta".
• Ejemplo práctico 1 (info opcional): "Lista todos los clientes y, si tienen un pedido, muestra su fecha." (Un cliente
sin pedidos seguirá apareciendo en la lista).
• Ejemplo práctico 2 (encontrar faltantes): "¿Qué clientes NUNCA han hecho un pedido?" (Usas WHERE tabla_b.id
IS NULL).
3. RIGHT JOIN: "Todo de B, y lo que coincida de A"
• Pregunta clave: "Muéstrame todos los elementos de la Tabla B, y si tienen algo en la Tabla A, dame ese dato
también."
• Usalo cuando: Es exactamente el caso inverso al LEFT JOIN. En la práctica, se usa MUCHO MENOS. ¿Por qué?
Porque simplemente puedes cambiar el orden de las tablas y usar un LEFT JOIN. Es más intuitivo pensar siempre
en la tabla principal de la que quieres todos los registros y ponerla primero.
Consejo: Casi siempre puedes evitar el RIGHT JOIN reorganizando tus tablas. En lugar de A RIGHT JOIN B,
escribe B LEFT JOIN A. El resultado es el mismo, pero es mucho más fácil de leer y entender.
13
Base de Datos
Subconsultas
Sintaxis, ejecución y
características
esenciales
Conceptos clave para consultas eficaces en bases de datos
Temario
• Concepto y propósito de las subconsultas en SQL
• Sintaxis y proceso de ejecución de una subconsulta
Definición de
subconsulta y
consulta principal
Concepto de subconsulta
Mejora de Legibilidad
Reutilización de Resultados
Diferencia entre
subconsulta y consulta
tradicional
Consulta Tradicional
Subconsulta
Orden de
ejecución entre
subconsulta y
consulta externa
Ejecución de la Subconsulta
Características
fundamentales
de las
subconsultas
Anidación y Uso de Subconsultas
Las subconsultas permiten anidar consultas dentro de otras para
construcción de construir análisis detallados.
Ubicación flexible
en cláusulas SQL
Subconsultas en cláusula WHERE
Resultado Multi-registro
Uso de
operadores
específicos con
subconsultas
Operadores IN, NOT
IN, ANY y ALL
El operador EXISTS
y su utilidad
Verificación de existencia
Optimización de consultas
Uso con IN
Guía para el
Uso Efectivo de
Subconsultas
Directrices para
sintaxis y
operadores en
subconsultas
Sintaxis clara
Subconsultas
mono-registro y
multi-registro:
características y
ejemplos
Subconsultas Mono-registro
Subconsultas Multi-registro
Reorganización de Datos
Guía Uso de
Subconsultas
• Se utilizan operadores de
comparación (=, >, >=, <, <= y <>).
Ejemplo:
Subconsultas Multi
registro
El operador NOT puede ser utilizado con los operadores IN, ANY y ALL.
Ejemplo subc. Multi
registro
Conclusión
Importancia de las Sintaxis y ejecución
subconsultas
Las subconsultas incrementan la Conocer la sintaxis correcta y la
capacidad analítica al permitir consultas ejecución eficiente es clave para diseñar
complejas y específicas en bases de consultas robustas y efectivas.
datos.
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Subconsultas (Subquery)
Una subconsulta SQL es una consulta anidada dentro de otra consulta SQL, que se utiliza para realizar
operaciones que requieren varios pasos o una lógica compleja y cuando la consulta depende de los
resultados de otra consulta.
Una subconsulta permite que las consultas SQL sean más modulares al gestionar tareas que, de otro
modo, requerirían varias consultas independientes.
La sintaxis de una subconsulta varía en función de dónde se utilice en la sentencia SQL principal, como
dentro de las cláusulas SELECT, FROM o WHERE. Las subconsultas suelen ir entre paréntesis ( ), lo que
indica que se trata de una consulta independiente. Se pueden encontrar en la sentencia SELECT, INSERT,
UPDATE o DELETE (o en otra subconsulta).
Los distintos tipos se agrupan en función de las distintas necesidades de recuperación de datos y se
adaptan a ellas. Puedes elegir entre las siguientes subconsultas en función de la operación que quieras
realizar:
• Subconsultas escalares
• Subconsultas de columna y fila
• Subconsultas de tablas (tablas derivadas)
Subconsultas escalares
Las subconsultas escalares devuelven un único valor, como una fila y una columna. Suelen utilizarse
cuando se espera un único valor, como en cálculos, comparaciones o asignaciones en las cláusulas
SELECT o WHERE o HAVING.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Subconsultas de columna
Las subconsultas de columna devuelven una sola columna, pero varias filas. Estas subconsultas se
utilizan a menudo con operadores como IN, = ANY o EXISTS, donde la consulta externa compara valores
de varias filas.
Subconsultas de fila
Las subconsultas de fila devuelven una única fila que contiene varias columnas. Estas subconsultas se
suelen utilizar con operadores de comparación que pueden comparar una fila de datos, como los
operadores = o ANY, cuando se esperan varios valores.
Las subconsultas de tabla, o tablas derivadas, devuelven una tabla completa de varias filas y columnas.
Se suelen utilizar en la cláusula FROM como tabla temporal dentro de una consulta.
Subconsultas no correlacionadas
Las subconsultas no correlacionadas son independientes de la consulta externa y se ejecutan primero.
El resultado de la subconsulta se pasa a la consulta externa. Las subconsultas no correlacionadas se
suelen utilizar para cálculos y filtros escalares o a nivel de columna.
Subconsultas correlacionadas
Estas subconsultas dependen de la consulta externa, es decir, se ejecutan una vez por cada fila de la
consulta externa.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Operadores básicos de comparación (>, >=, <, <=, !=, <>, =).
Predicado ALL, ANY y SOME
Predicado IN y NOT IN
Predicado EXISTS y NOT EXISTS
Los operadores básicos de comparación los vamos a utilizar para realizar comparaciones
con subconsultas que devuelven un único valor, es decir, una columna y una fila.
ALL, ANY y SOME se utilizan con los operadores de comparación (>, >=, <, <=, !=, <>, =) y nos permiten
comparar una expresión con el conjunto de valores que devuelve una subconsulta.
ALL, ANY y SOME los vamos a utilizar para realizar comparaciones con subconsultas que pueden
devolver varios valores, es decir, una columna y varias filas.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Operadores IN y NOT IN
IN y NOT IN nos permiten comprobar si un valor está o no incluido en un conjunto de valores, que
puede ser el conjunto de valores que devuelve una subconsulta.
IN y NOT IN los vamos a utilizar para realizar comparaciones con subconsultas que pueden devolver
varios valores, es decir, una columna y varias filas.
• En particular, las correlacionadas pueden ser muy lentas con grandes volúmenes.
• Algunas bases de datos no optimizan tan bien como un JOIN.
• No se pueden reutilizar fácilmente (a diferencia de las vistas o CTEs).
• Si se anidan demasiado, se vuelve difícil de leer.
Base de Datos
Subconsultas
correlacionadas en
bases de datos
Definición y características de
las subconsultas
correlacionadas
Dependencia de consulta principal
Las subconsultas correlacionadas dependen de valores de la consulta
exterior para ejecutarse correctamente.
Ejecución repetida
La subconsulta se ejecuta repetidamente para cada fila procesada por la
consulta externa.
Impacto en el rendimiento
Las subconsultas correlacionadas pueden reducir el rendimiento en
bases de datos grandes debido a múltiples ejecuciones.
Ventajas y desventajas
frente a subconsultas
independientes
Ejemplos prácticos de
subconsultas correlacionadas
Definición de Subconsulta Correlacionada
Las subconsultas correlacionadas dependen de valores de la consulta
principal para filtrar datos relacionados entre tablas.
Aplicaciones prácticas
Útiles para análisis avanzados y reportes personalizados que requieren
datos relacionados dinámicos.
Subconsultas
Correlacionadas
Consulta SQL:
SELECT i1.parte_nro, [Link], i1.codigo_deposito
FROM inventario i1
WHERE [Link] > (SELECT AVG([Link])
FROM inventario i2
WHERE i2.codigo_deposito =
i1.codigo_deposito);
Consulta SQL:
SELECT [Link], [Link],
sum([Link])
FROM proyectos T1, `proy_equipo_hs` T2
WHERE [Link] = [Link]
group by [Link], [Link]
and [Link] IN (SELECT [Link]
FROM `proy_equipo_hs` T3
WHERE [Link] = [Link]
)
order by [Link];
Inconvenientes de Funcionamiento
• Rendimiento: Para las subconsultas correlacionadas,
SQL evalúa la consulta interna una vez para cada
registro en la consulta externa.
• Escalabilidad: Cuando los tamaños de las tablas se
hacen más grandes, el proceso toma más tiempo.
• Alternativas: Si una subconsulta correlacionada toma
una cantidad excesiva de tiempo, considera usar una
alternativa.
• Una opción es cargar una tabla temporal con
resultados intermedios y luego procesar la tabla
temporal directamente contra la tabla principal con
una subconsulta simple.
• Aunque esta alternativa puede ser menos elegante,
puede resultar mucho más rápida.
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Vistas (Views)
Una vista (o view, en inglés) es una consulta almacenada que se comporta como una tabla virtual. Esto
significa que, aunque no almacena datos físicamente, permite acceder a información como si se tratara
de una tabla. Internamente, una vista es una instrucción SELECT predefinida que se ejecuta cada vez que
se consulta la vista.
Desde el punto de vista del usuario, una vista actúa como una tabla con filas y columnas. Sin embargo,
los datos no están duplicados: se obtienen dinámicamente a partir de las tablas reales cada vez que se
accede a la vista.
En MySQL, las vistas se crean con la sentencia CREATE VIEW y pueden usarse en consultas del mismo
modo que una tabla.
Las vistas se utilizan por diversas razones, tanto funcionales como de diseño. Algunas de las principales
ventajas de su uso son:
● Simplificación de consultas complejas: Una vista puede encapsular una consulta con múltiples
joins, filtros y cálculos, facilitando su reutilización sin repetir código.
● Seguridad y control de acceso: Es posible otorgar permisos a ciertos usuarios para consultar una
vista, sin darles acceso directo a las tablas subyacentes. De este modo, se pueden ocultar
columnas sensibles o restringir filas visibles.
● Separación entre lógica y presentación: Las vistas permiten abstraer la estructura de los datos,
facilitando que los usuarios trabajen con una representación más intuitiva sin conocer el modelo
físico.
● Reutilización y mantenimiento: Al centralizar la lógica de consulta en una vista, se facilita su
mantenimiento. Si la lógica cambia, solo es necesario actualizar la vista, sin modificar todas las
consultas que la utilizan.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
En MySQL, las vistas no pueden tener índices propios ni claves primarias, ya que no
almacenan datos.
● Cuando se necesita reutilizar consultas complejas o frecuentes en varios lugares del sistema.
● Para restringir el acceso a ciertas columnas o filas sin modificar la tabla original.
● En aplicaciones donde se busca una interfaz de datos más clara o más adaptada a un tipo
específico de usuario.
● En procesos de análisis de datos, para presentar reportes agregados o filtrados.
● Para ocultar la complejidad del modelo físico, ofreciendo una capa intermedia más intuitiva
para usuarios finales o desarrolladores.
Las vistas permiten trabajar con los datos a un nivel lógico superior, sin necesidad de
conocer detalles del almacenamiento físico o del modelo completo de relaciones.
En MySQL, una vista se define utilizando la instrucción CREATE VIEW, seguida del nombre de la vista y
una consulta SELECT que especifica el contenido de la misma. La estructura general es:
Esta consulta se ejecuta cada vez que se consulta la vista, y no se almacenan físicamente los datos. La
vista se comporta como una tabla virtual basada en los datos actuales de las tablas subyacentes.
MySQL requiere que las vistas estén basadas en consultas válidas. No se pueden crear
vistas con parámetros dinámicos ni que incluyan subconsultas que usen variables del
usuario.
Reglas de nomenclatura
Al crear una vista, se deben seguir las mismas reglas que para nombrar tablas o columnas:
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
En una vista, se pueden (y muchas veces se deben) renombrar las columnas usando alias con la cláusula
AS. Esto es útil para hacer que los nombres sean más claros o evitar ambigüedad cuando se combinan
varias tablas.
También se puede asignar alias a las vistas cuando se usan en consultas mixtas:
Tipos de Vistas
Las vistas en MySQL pueden clasificarse en función de su complejidad, estructura interna y restricciones
sobre su actualización. Conocer estos tipos permite definir correctamente qué tipo de vista utilizar
según el problema que se quiere resolver o simplificar.
Vistas Simples
Ventajas:
Vistas Complejas
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Limitaciones:
● Por lo general no son actualizables, ya que MySQL no puede determinar cómo aplicar cambios a
las tablas base de forma segura.
● Están pensadas para consultas de lectura complejas.
Cuando una vista es actualizable, podemos usar la cláusula WITH CHECK OPTION para restringir las
modificaciones que violen la condición establecida en la vista.
Esto garantiza que cualquier INSERT o UPDATE hecho a través de la vista respete el filtro de la misma.
WITH CHECK OPTION se utiliza para evitar que las operaciones de inserción o
actualización hechas a través de una vista violen las condiciones del WHERE que define
esa vista.
Sirve para mantener la integridad lógica de la vista, especialmente útil en sistemas donde
ciertos perfiles de usuario solo deben ver o modificar subconjuntos de la información.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Vistas Anidadas
Una vista anidada es una vista que utiliza otras vistas como parte de su definición. Esto permite
modularizar consultas complejas en bloques más pequeños y reutilizables.
Ventajas:
Las vistas son objetos virtuales de una base de datos que permiten encapsular consultas complejas bajo
un nombre accesible. Su uso aporta múltiples beneficios en diseño, mantenimiento y seguridad, pero
también conlleva ciertas limitaciones que deben tenerse en cuenta.
1. Ocultamiento de complejidad
○ Permiten simplificar el acceso a estructuras complejas. Por ejemplo, una vista puede
encapsular múltiples JOIN, filtros y funciones agregadas, facilitando su uso por parte de
otros usuarios o aplicaciones.
2. Mayor seguridad
○ Las vistas pueden restringir el acceso a columnas sensibles sin necesidad de crear
nuevas tablas.
○ Por ejemplo, se puede crear una vista que omita campos como salarios o direcciones y
otorgar permisos solo sobre esa vista.
3. Reutilización de consultas
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
○ En lugar de repetir constantemente una misma consulta compleja, se puede crear una
vista que la encapsule y usarla tantas veces como sea necesario.
○ Esto reduce errores y facilita el mantenimiento.
4. Simplificación de reportes y análisis
○ Las vistas permiten presentar los datos ya filtrados, agrupados o transformados según
los requerimientos del área que los consume, como informes gerenciales, dashboards o
reportes académicos.
Una vista es actualizable cuando permite que las operaciones de modificación de datos como INSERT,
UPDATE y DELETE se realicen a través de ella, afectando directamente a la tabla (o tablas)
subyacente(s).
Sin embargo, no todas las vistas lo son. Una vista solo será actualizable si se cumplen ciertas
condiciones que aseguren que la modificación puede realizarse sin ambigüedad.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Si una vista no cumple con estas condiciones, solo podrá utilizarse para consultar datos, no para
modificarlos.
Cuando se crea una vista que incluye un WHERE, puede usarse la cláusula WITH CHECK
OPTION para evitar que se inserten o modifiquen datos que violen la condición de la vista.
En MySQL, una vez que una vista ha sido creada, puede modificarse o eliminarse según sea necesario. A
continuación, se presentan las distintas formas en que se pueden gestionar vistas existentes.
Esta sentencia reemplaza una vista existente por una nueva definición. Es útil cuando queremos
cambiar:
Ventajas:
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Una vez eliminada, ya no puede ser utilizada ni por consultas ni por otras vistas que la referencian.
Si una vista es eliminada con DROP VIEW, cualquier consulta, procedimiento almacenado,
trigger u otra vista que dependiera de ella dejará de funcionar y arrojará error en tiempo de
ejecución.
Recomendaciones
● Usar CREATE OR REPLACE VIEW para modificar vistas en lugar de DROP + CREATE, ya que evita
problemas con permisos y dependencias.
● Documentar las vistas dependientes en sistemas grandes.
En bases de datos, llamamos consultas mixtas a aquellas que combinan vistas con tablas reales dentro
de una misma instrucción SELECT, JOIN, WHERE, etc.
Estas consultas permiten aprovechar la simplificación y abstracción que ofrecen las vistas, junto con la
flexibilidad de acceder directamente a las tablas reales cuando sea necesario.
Las vistas no almacenan datos: son una forma de encapsular una consulta compleja para que otros
usuarios puedan acceder a ella fácilmente. Al combinarlas con tablas reales, se logra:
Supongamos que ya tenemos una vista vista_alumnos_basica que muestra id, nombre, apellido y
id_carrera de la tabla alumnos.
Ahora combinamos esa vista con la tabla real carreras para mostrar el nombre completo del alumno y el
nombre de su carrera:
Las consultas mixtas son muy útiles en entornos donde se requiere generar:
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Ventajas clave:
Una vista almacenada (también conocida como vista materializada) es un tipo especial de vista que
almacena físicamente los datos que devuelve una consulta, en lugar de recalcularlos cada vez que se
accede. Esto mejora el rendimiento cuando se trata de consultas complejas o datos que no cambian con
frecuencia.
Las vistas no solo sirven para simplificar consultas complejas, sino también para restringir el acceso a
los datos de forma controlada. Esto convierte a las vistas en una poderosa herramienta de seguridad
dentro de una base de datos.
Como mencionamos anteriormente, una vista puede mostrar solo una parte específica de la
información de una tabla, omitiendo columnas sensibles o aplicando filtros. Esto permite que ciertos
usuarios accedan a los datos que necesitan sin ver información confidencial.
En MySQL, se pueden asignar permisos directamente sobre una vista, sin necesidad de dar acceso a la
tabla base. Esto permite un control más detallado y seguro.
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
Este comando permite que el usuario pueda consultar la vista, pero no necesariamente la tabla
alumnos.
Privacidad de datos
Auditorías
Crear vistas que solo muestren logs o datos relevantes para control, sin permitir modificar la
información.
Esto se logra creando diferentes vistas para cada grupo de usuarios, y asignando permisos según el
perfil.
Recomendaciones
Las vistas son herramientas muy útiles para simplificar consultas y mejorar la seguridad en las bases de
datos, pero para sacarles el máximo provecho es importante seguir ciertas buenas prácticas en su
diseño y uso.
10
Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA
● Es recomendable agregar comentarios que expliquen qué información ofrece la vista y para qué
se utiliza.
● Esto ayuda a futuros desarrolladores y administradores a entender su función sin necesidad de
analizar el código SQL.
● Las vistas que dependen de otras vistas (vistas anidadas) pueden generar consultas muy
complejas y dificultar la optimización.
● Siempre que sea posible, crear vistas que se basen directamente en tablas o que tengan niveles
mínimos de anidamiento.
● Esto mejora el rendimiento y facilita el control.
● Las vistas ejecutan la consulta definida cada vez que se usan, por lo que es fundamental que su
definición sea eficiente.
● Evitar usar subconsultas innecesarias o funciones costosas dentro de la vista.
● Indexar adecuadamente las tablas base para acelerar los joins y filtros que usa la vista.
● Vistas operativas: se usan dentro del sistema para procesos diarios, con datos actuales y pocas
agregaciones.
● Vistas analíticas: diseñadas para reportes y análisis, que pueden incluir agrupaciones, cálculos y
datos históricos.
● Mantener esta separación ayuda a evitar que consultas analíticas pesadas afecten el
rendimiento del sistema operativo.
11
Base de Datos