0% encontró este documento útil (0 votos)
6 vistas81 páginas

Modulo 5 LenguajeSQL

El documento presenta una introducción a SQL, destacando su importancia en la gestión de bases de datos relacionales y explicando sus sublenguajes: DDL, DML y DCL. Se abordan conceptos fundamentales como la creación de tablas, inserción de registros y consultas básicas utilizando comandos SQL. Además, se enfatiza el paradigma declarativo de SQL y su diferencia con los lenguajes imperativos en la programación.

Cargado por

estefi chan
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
6 vistas81 páginas

Modulo 5 LenguajeSQL

El documento presenta una introducción a SQL, destacando su importancia en la gestión de bases de datos relacionales y explicando sus sublenguajes: DDL, DML y DCL. Se abordan conceptos fundamentales como la creación de tablas, inserción de registros y consultas básicas utilizando comandos SQL. Además, se enfatiza el paradigma declarativo de SQL y su diferencia con los lenguajes imperativos en la programación.

Cargado por

estefi chan
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

TECNICATURA UNIVERSITARIA

EN PROGRAMACIÓN
A DISTANCIA

Semana 1 – Fundamentos y primeros comandos SQL


Objetivos de la semana
• Comprender qué es SQL y por qué es fundamental en la gestión de bases de
datos.
• Diferenciar el paradigma declarativo de los lenguajes imperativos.
• Conocer los sublenguajes básicos de SQL (DDL, DML, DCL).
• Crear tablas simples e insertar registros.
• Realizar consultas básicas con SELECT.

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

UPDATE, DELETE. Gracias al DML consultamos y modificamos la


información.
• DCL (Data Control Language): menos usado en los primeros pasos, regula
permisos y accesos a los objetos de la base de datos (GRANT, REVOKE).
En esta primera semana trabajaremos fundamentalmente con DDL y DML, ya
que son la base de todo.

3. Creación de tablas (DDL)


El primer paso para armar una base de datos es definir las tablas. Una tabla
es como una hoja de cálculo: tiene columnas con un nombre y un tipo de dato, y filas
que representan registros.
Ejemplo: definimos una tabla de autores y otra de libros, donde cada libro hace
referencia a un autor mediante una clave foránea (FOREIGN KEY).
CREATE TABLE Autores (
AutorID INT PRIMARY KEY,
Nombre VARCHAR(100) NOT NULL
);

CREATE TABLE Libros (


LibroID INT PRIMARY KEY,
Titulo VARCHAR(150) NOT NULL,
AutorID INT,
FOREIGN KEY (AutorID) REFERENCES Autores(AutorID)
);
Con esto ya tenemos la base para registrar autores y sus libros.

4. Primeras consultas con SELECT


El comando SELECT es el corazón de SQL. Con él pedimos información de una o
varias tablas.
• Ver todos los registros de una tabla:
SELECT * FROM Autores;
El asterisco indica “todas las columnas”.
• Seleccionar columnas específicas:
SELECT Nombre FROM Autores;
De esta forma limitamos la salida a los datos que realmente nos interesan.

Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

• Filtrar resultados con WHERE:


SELECT Titulo FROM Libros
WHERE AutorID = 1;
En este caso pedimos solo los libros del autor con identificador 1.

5. Insertar registros (INSERT)


Para que las consultas tengan sentido necesitamos cargar datos. El comando INSERT
agrega filas nuevas en una tabla.
INSERT INTO Autores (AutorID, Nombre)
VALUES (1, 'Isabel Allende');

INSERT INTO Libros (LibroID, Titulo, AutorID)


VALUES (10, 'La Casa de los Espíritus', 1);

Al ejecutar estas sentencias, la tabla de autores tendrá un registro, y la de libros un


libro asociado a ese autor.

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

Módulo 5: Lenguaje SQL


SQL (Structured Query Language) es un lenguaje diseñado para gestionar y manipular bases de datos
relacionales. Se utiliza para crear, modificar y consultar datos en tablas de bases de datos. SQL es el
idioma estándar para comunicarse con bases de datos relacionales, permitiendo tanto la gestión de la
estructura como la manipulación de los datos que contienen. Un programador necesita conocer SQL
porque casi todas las aplicaciones modernas interactúan con bases de datos para almacenar, gestionar
y recuperar información.

Estudiaremos este lenguaje como herramienta independiente en la programación destinada al uso de


distintos sistemas de gestión de bases de datos.

El módulo se compone de tres partes que abordaremos en gradualmente, la primera de introducción a


SQL con las consultas usando “SELECT” e “INSERT” simples, la segunda con el uso de “UPDATE” y
“DELETE” y finalmente la tercera parte cubre consultas combinando diferentes tablas usando “JOIN”,
“UNION” y operaciones de conjuntos sobre múltiples tablas

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.

Conceptos Fundamentales del Paradigma SQL


El lenguaje SQL toma como base conceptos que ya hemos abordado que repasamos aquí:
Modelo Relacional
● Los datos se organizan en tablas (relaciones)
● Cada tabla tiene filas (tuplas) y columnas (atributos)
● Las relaciones entre tablas se establecen mediante claves

Operaciones basadas en Conjuntos


● SQL trabaja con conjuntos de datos completos, no con registros individuales, por ejemplo,
cuando hacemos:
UPDATE productos SET precio = precio * 1.1 WHERE categoria = 'electronica';

Esta operación afecta a todos los productos de electrónica simultáneamente.

Á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

● Diferencia (EXCEPT): elementos no comunes

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.

¿Por qué tantos sub lenguajes?


Esta división tiene sentido porque de esta forma se independizan y diferencian:
● Responsabilidades: Los administradores de BD usan más DDL, los desarrolladores más DML
● Permisos: Puedes dar acceso a DML sin permitir DDL
● Momentos de tiempo: DDL se usa en diseño/mantenimiento, DML en operación diaria
● Impactos: DDL afecta estructura (más riesgoso), DML afecta contenido.

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:

DDL - Data Definition Language (Lenguaje de Definición de Datos)


Se encarga de la estructura de la base de datos, es decir de la definición de las tablas, los datos y las
bases de datos mismas. Requiere permisos diferenciados, dado que su impacto es a nivel del modelo y
no de los datos. Las operaciones en DDL son frecuentes en momentos de instalación de los sistemas
informáticos y poco frecuentes en su operación y uso habitual, aunque la modificación de funciones y
procedimientos almacenados puede estar vinculada también al mantenimiento de los sistemas.
Tareas propias de DDL son CREATE (crear), ALTER (modificar), DROP (eliminar), TRUNCATE (vaciar).
Veamos algunos ejemplos:

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

ALTER TABLE empleados ADD COLUMN telefono VARCHAR(20);

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

Veamos detalladamente el sub-lenguaje de manipulación de datos DML (Data Manipulation Language)


Como mencionamos anteriormente 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ó.

Conceptos Fundamentales del DML

¿Qué hace el DML?


Consultar datos (SELECT): Es el uso más frecuente. Permite extraer información específica de una o
varias tablas, usando filtros y condiciones. Por ejemplo, puedes pedir que te muestre el nombre y
apellido de todos los clientes que viven en una ciudad dete rminada.

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)

Desarrollaremos en esta primera etapa las instrucciones de selección e inserción de datos.

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

Veamos un SELECT básico, una consulta simple tiene la forma:

SELECT nombre, precio FROM productos;

Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

Para obtener todas las columnas de la tabla sin necesidad de detallar las usamos “*”

SELECT * FROM productos;

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 nombre, precio FROM productos


WHERE precio > 1000;

Y agrupamos condiciones lógicas con los operadores AND , OR, BETWEEN o IN

SELECT * FROM productos WHERE precio > 500 AND stock < 10;

SELECT * FROM productos WHERE categoria_id = 1 OR categoria_id = 3;

Podemos filtrar ciertos rangos de valores en una columna:

SELECT * FROM productos WHERE precio BETWEEN 100 AND 1000;

Podemos filtrar ciertos valores de una columna indicando una lista de ellos:

SELECT * FROM productos WHERE categoria_id IN (1, 2, 3);

Para el tratamiento de las cadenas tiene sus particularidades donde podemos usar = o LIKE

SELECT * FROM productos WHERE código = ‘RZ21000-E’;

En el caso de LIKE existe un comodín ”%” que podemos ubicar en diferentes posiciones

La posición del % determina el tipo de coincidencia que se busca.

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

Esta consulta devolverá registros como Laptop computadora, Computadora de escritorio,


Computadora personal.

Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

● C) % al principio y al final ('%patron%')

Busca valores que contienen el patrón en cualquier parte de la cadena.


Es la forma más flexible y se usa para encontrar registros donde un conjunto de caracteres se
encuentra en cualquier posición.

SELECT * FROM articulos WHERE descripcion LIKE '%oferta%';

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.

● D) Sin % (coincidencia exacta) equivalente a “=”

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.

SELECT * FROM usuarios WHERE nombre LIKE 'Juan';

Esta consulta es equivalente a usar WHERE nombre = 'Juan'.

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 el precio y descendente

SELECT nombre, precio FROM productos ORDER BY precio DESC;

Especificamos que el ordenamiento sea por categoría ascendente y luego el precio descendente

SELECT nombre, precio FROM productos


ORDER BY categoria_id ASC, precio DESC;

Establecer un límite a la cantidad de resultados a mostrar

SELECT * FROM productos ORDER BY precio DESC LIMIT 10;

Esta consulta devuelve los 10 productos más caros

Consejos y Buenas Prácticas en cuanto al ordenamiento:

● Siempre especifica ASC o DESC para claridad


● Usa nombres de columna, no posiciones numéricas
● Considera el rendimiento en tablas grandes
● Índices compuestos para ordenamiento múltiple

Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

SELECT con Subconsultas


Aquí tenemos una pequeña introducción a las sub-consultas, pero recomendamos ver el documento
especifico del módulo para ello.

Como introducir una sub-consulta simple en un filtro:

SELECT nombre, precio FROM productos WHERE precio > (SELECT AVG(precio) FROM productos);

Como introducir una sub-consulta en una columna de la consulta actual

SELECT nombre, precio, (SELECT AVG(precio) FROM productos) AS precio_promedio,


precio - (SELECT AVG(precio) FROM productos) AS diferenciaFROM 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.

¿Qué hace GROUP BY?


GROUP BY agrupa filas que tienen valores idénticos en las columnas especificadas y las convierte en
una sola fila por grupo, permitiendo aplicar funciones de agregación.
Estas funciones de agregación pueden ser promedio (AVG), suma (SUM), máximo (MAX), etc.

La siguiente consulta muestra una fila por departamento e indica el promedio de salario

SELECT departamento, AVG(salario) as salario_promedio


FROM empleados
GROUP BY departamento;

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.

SELECT columnas_agrupacion, funciones_agregacion


FROM tabla
WHERE condiciones -- Filtro ANTES del agrupamiento
GROUP BY columnas_agrupacion
HAVING condiciones_grupo -- Filtro DESPUÉS del agrupamiento
ORDER BY columnas;

Funciones de Agregación Comunes


COUNT(*) para contar filas
COUNT(nombreColumna) Cuenta los no nulos de la columna
COUNT(DISTINCT nombreColumna), Cuenta los valores únicos
SUM(salario) as masa_salarial, -- Suma total
AVG(salario) as salario_promedio, -- Promedio
MIN(fecha_ingreso) as mas_antiguo, -- Mínimo
MAX(salario) as salario_maximo, -- Máximo

Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

GROUP_CONCAT(nombre) as lista_nombres -- MySQL: concatenar

Orden de Agrupamiento: GROUP BY NO garantiza orden el orden de las columnas mostradas se lo


indicamos con ORDER BY

PARTE 2:

Operaciones de inserción

La cláusula INSERT se utiliza para agregar datos a una tabla


Un ejemplo de INSERT básico podría ser :

INSERT INTO productos (nombre, precio, stock, categoria_id)


VALUES ('Laptop Gaming', 1500.00, 5, 1);

Y una inserción de varios registros podría expresarse de esta forma

INSERT INTO productos (nombre, precio, stock, categoria_id)


VALUES
('Mouse Gamer', 50.00, 20, 2),
('Teclado Mecánico', 120.00, 15, 2),
('Monitor 4K', 400.00, 8, 3);

INSERT con Subconsultas, si los datos dependen de otra tabla podemos expresar asi :

INSERT INTO productos_descontinuados (nombre, precio, fecha_descontinuado)


SELECT nombre, precio, CURRENT_DATE
FROM productos
WHERE stock = 0 AND fecha_creacion < '2020-01-01';
INSERT con Valores por Defecto

También es posible insertar una fila sin especificar todos sus valores, en tal caso se tomarán los valores
por defecto.

INSERT INTO productos (nombre, precio) -- stock tomará valor DEFAULT


VALUES ('Producto Nuevo', 99.99);

O Insertar registro con todos los valores por defecto

INSERT INTO productos () VALUES ();

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

Restricciones NOT NULL


Valores DEFAULT
Luego inicia una transacción (si no hay una activa) y para ello:
Obtiene locks necesarios
Reserva espacio en el buffer pool
Prepara el rollback en caso de error
Si todo sale bien confirma la transacción, sino realiza el rollback
Y luego continua con otras operaciones, que no profundizaremos, esta lista es solo a modo de llamado
de atención, para que consideremos la carga de trabajo y que como programadores debemos ser
conscientemente responsables de estas actividades. Profundizare mos esto en el módulo siguiente
cuando estudiemos los sistemas de gestión de bases de datos, para comprender completamente el
impacto.

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

● Manipulación de datos: La mayoría de las funcionalidades de un sitio web dependen de datos. Un


programador web debe saber cómo insertar nuevos usuarios, actualizar perfiles, eliminar
contenido obsoleto, y consultar información para mostrarla en la página. Sin SQL, no sería posible
manejar esta información.
● Fundamento del desarrollo back-end: El back-end (o "la parte de atrás" de un sitio web) es el que
se encarga de la lógica y la interacción con el servidor y la base de datos. Un desarrollador back -
end, en particular, utiliza SQL a diario para construir las API que conectan la interfaz del usuario (el
front-end) con la base de datos.
● Optimización del rendimiento: Con el tiempo, las bases de datos crecen y las consultas se vuelven
más lentas. Saber SQL permite a los programadores optimizar consultas para que la carga de la
página sea más rápida, mejorando la experiencia del usuario y la eficiencia del servidor.
● Comprensión de los ORM: Muchos frameworks web utilizan ORM (Object-Relational Mappers),
que son herramientas que permiten interactuar con la base de datos usando código del lenguaje
de programación (como Python o JavaScript) en lugar de SQL puro. Sin embargo, para usar un
ORM de manera efectiva, un desarrollador debe entender los conceptos subyacentes de las bases
de datos y cómo las consultas SQL funcionan, especialmente para solucionar problemas y
optimizar el rendimiento.
● Seguridad: El conocimiento de SQL es crucial para prevenir vulnerabilidades de seguridad como la
inyección SQL, que es un ataque común donde los piratas informáticos insertan código malicioso
en un formulario web para acceder a la base de datos o destruirla.

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.

Desarrollado en los años 70 en IBM, se ha convertido en el lenguaje


universal para la manipulación de datos estructurados.

Permite consultar datos de forma eficiente


Facilita la modificación de información almacenada
Posibilita la administración completa de la base de datos
Relevancia de SQL en el Mundo Actual

¿Por qué aprender SQL?


SQL sigue siendo la tecnología fundamental en el ecosistema de datos a
pesar del auge de soluciones NoSQL.

Presente en prácticamente todas las empresas


Habilidad altamente demandada en el mercado laboral
Base para otros lenguajes y tecnologías de datos
Esencial para roles como analista de datos, desarrollador y DBA

Arquitectura de una Base de


Datos Relacional
Tablas
Estructuras que almacenan datos en filas y columnas. Cada tabla
representa una entidad (usuarios, productos, etc.).

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

SELECT - La Consulta Fundamental


Sintaxis Básica

SELECT columna1, columna2, ...


FROM tabla
WHERE condición;

La sentencia SELECT es la más utilizada en SQL y permite recuperar


datos de una o más tablas según criterios específicos.

Ejemplo Práctico

SELECT nombre, edad, email


FROM alumnos
WHERE carrera = 'Informática'
AND edad > 20;
Operadores y Filtros en Consultas
SELECT
Operadores de Comparación
Permiten establecer condiciones precisas para filtrar datos.

Igualdad: = (igual), <> o != (diferente)


Comparación: > (mayor), < (menor), >= (mayor o igual), <= (menor o igual)
Pertenencia: IN (dentro de lista), NOT IN (fuera de lista)

Operadores Lógicos
Combinan múltiples condiciones para crear filtros complejos.

AND: ambas condiciones deben cumplirse


OR: al menos una condición debe cumplirse
NOT: niega una condición

Patrones de Texto
Búsqueda flexible de texto con comodines.

LIKE '%texto%': contiene "texto" en cualquier posición


LIKE 'texto%': comienza con "texto"
LIKE '%texto': termina con "texto"

INSERT - Agregando Nuevos Datos


Sintaxis y Ejemplos

INSERT INTO tabla (columna1, columna2, ...)


VALUES (valor1, valor2, ...);

La sentencia INSERT permite agregar nuevos registros a una tabla existente.

Ejemplo Práctico

INSERT INTO alumnos


(nombre, apellido, edad, carrera)
VALUES
('Lucía', 'García', 22, 'Informática');

También es posible insertar múltiples registros en una sola operación:

INSERT INTO alumnos (nombre, edad)


VALUES
('Carlos', 19),
('María', 21);
UPDATE - Modificando Datos Existentes

Sintaxis y Uso
UPDATE tabla
SET columna1 = valor1, columna2 = valor2, ...
WHERE condición;

La sentencia UPDATE modifica registros existentes que cumplan con


determinada condición.

¡Atención! Si se omite la cláusula WHERE, el cambio afectará a todos los


registros de la tabla.

Ejemplo Práctico
UPDATE alumnos
SET
edad = 23,
email = '[Link]@[Link]'
WHERE nombre = 'Lucía' AND apellido = 'García';

DELETE - Eliminando Registros

Sintaxis y Consideraciones

DELETE FROM tabla


WHERE condición;
La sentencia DELETE elimina registros de una tabla que
cumplan con la condición especificada.
Advertencia: Si se omite WHERE, se eliminarán todos los
registros. Esta operación generalmente no se puede deshacer
sin una copia de seguridad.

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.

SELECT [Link], c.nombre_carrera


FROM alumnos a
INNER JOIN carreras c
ON a.id_carrera = [Link];

LEFT JOIN
Devuelve todos los registros de la tabla izquierda y los que coinciden de la derecha.

SELECT [Link], c.nombre_carrera


FROM alumnos a
LEFT JOIN carreras c
ON a.id_carrera = [Link];

RIGHT JOIN
Devuelve todos los registros de la tabla derecha y los que coinciden de la izquierda.

SELECT [Link], c.nombre_carrera


FROM alumnos a
RIGHT JOIN carreras c
ON a.id_carrera = [Link];

Modelo de Datos de Ejemplo


Para nuestros ejemplos, utilizaremos un modelo simplificado de gestión académica:

Tabla: alumnos Tabla: carreras Tabla: asignaturas

id (PK): Identificador único id (PK): Identificador único id (PK): Identificador único


nombre: Nombre del alumno nombre_carrera: Nombre de la nombre: Nombre de la asignatura
apellido: Apellido del alumno carrera créditos: Número de créditos
edad: Edad del alumno duración: Duración en años id_carrera (FK): Carrera asociada
id_carrera (FK): Referencia a departamento: Departamento
carrera responsable
Implementación de JOINS en
Consultas Complejas
Ejemplo de Consulta con Múltiples JOINS

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.

Subconsultas - Consultas Anidadas

¿Qué son las subconsultas?


Las subconsultas son consultas SQL anidadas dentro de otra consulta
principal. Permiten realizar operaciones complejas utilizando el resultado
de una consulta como parte de otra.

Pueden utilizarse en diversas cláusulas como:

En la cláusula WHERE
En la cláusula FROM (subconsulta como tabla)
En la cláusula SELECT

Ejemplo Práctico

-- Alumnos con edad superior a la media


SELECT nombre, edad
FROM alumnos
WHERE edad > (
SELECT AVG(edad)
FROM alumnos
);
Funciones de Agregación en SQL
¿Qué son las funciones de agregación?

Las funciones de agregación realizan cálculos sobre conjuntos de valores y devuelven un único resultado.

Funciones para contar registros

COUNT()
Cuenta el número de filas o valores no nulos.

SELECT COUNT(*)
FROM alumnos;

Funciones para cálculos numéricos

SUM() AVG()
Calcula la suma de los valores de una columna numérica. Calcula el promedio de los valores de una columna numérica.

SELECT SUM(créditos) SELECT AVG(edad)


FROM asignaturas; FROM alumnos;

Funciones para valores extremos

MAX() MIN()
Encuentra el valor máximo de una columna. Encuentra el valor mínimo de una columna.

SELECT MAX(calificación) SELECT MIN(calificación)


FROM matriculas; FROM matriculas;

GROUP BY - Agrupación de Resultados


Agrupando Datos

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;

Filtrado con HAVING

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

Simplifican consultas complejas


Mejoran la seguridad ocultando tablas base
Proporcionan abstracción de datos
Facilitan la compatibilidad con versiones anteriores

Sintaxis y Ejemplo

CREATE VIEW nombre_vista AS


SELECT ...;

-- Vista de alumnos activos


CREATE VIEW vista_alumnos_activos AS
SELECT nombre, apellido, carrera
FROM alumnos
WHERE estado = 'activo';

-- Consultar la vista
SELECT * FROM vista_alumnos_activos;

Índices - Optimizando el Rendimiento


¿Qué son los índices?

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

Índices de clave primaria (automáticos)


Índices únicos
Índices compuestos (múltiples columnas)
Índices de texto completo

Creación de Índices

CREATE INDEX idx_apellido


ON alumnos(apellido);

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

Recursos para Seguir Aprendiendo

Próximos Pasos

Para profundizar en SQL, recomendamos:


Practicar con bases de datos de ejemplo.
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

Lenguaje SQL – Material complementario


1. Fundamentos de SQL y Estructura
SQL (Structured Query Language) es el lenguaje estándar para interactuar con bases de datos
relacionales. Su objetivo principal es permitir la gestión y manipulación de datos, definiendo la
estructura de la base de datos y controlando el acceso a la información.

SQL se divide en varias categorías de comandos:

• DML (Data Manipulation Language): Se usa para manipular los datos dentro de las
tablas. Incluye comandos como SELECT, INSERT, UPDATE y DELETE.

• DDL (Data Definition Language): Se utiliza para definir la estructura de la base de


datos. Incluye comandos como CREATE, ALTER y DROP para tablas, vistas, índices, etc.

• DCL (Data Control Language): Controla el acceso a los datos. Los comandos principales
son GRANT y REVOKE para otorgar o quitar permisos.

• TCL (Transaction Control Language): Gestiona las transacciones de datos. Los


comandos principales son COMMIT y ROLLBACK.

2. Sentencias Básicas de Manipulación de Datos


Las sentencias DML son las más comunes y fundamentales para cualquier tarea con bases de
datos.

SELECT
La sentencia SELECT se usa para consultar y recuperar datos de una o más tablas. Es la base de
cualquier consulta.

• Sintaxis básica: SELECT columna1, columna2 FROM tabla;

• Recuperar todas las columnas: SELECT * FROM tabla;

• Filtros con WHERE: Se usa para filtrar filas basándose en una condición. Ejemplo:
SELECT * FROM empleados WHERE salario > 50000;

• Ordenar resultados con ORDER BY: Ordena el conjunto de resultados. Ejemplo:


SELECT nombre FROM productos ORDER BY precio DESC;

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.

• Sintaxis básica: UPDATE tabla SET columna1 = nuevo_valor WHERE condicion;

• Ejemplo: UPDATE productos SET precio = 15.50 WHERE id_producto = 101;

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.

• Sintaxis básica: DELETE FROM tabla WHERE condicion;

• Ejemplo: DELETE FROM empleados WHERE id_empleado = 205;

3. Consultas Avanzadas en SQL


Para manejar tareas más complejas, SQL ofrece herramientas avanzadas que permiten
combinar y analizar datos de formas sofisticadas.

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.

• Ejemplo: SELECT nombre FROM empleados WHERE id_departamento IN (SELECT


id_departamento FROM departamentos WHERE ubicacion = 'Ventas');

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.

• COUNT(): Cuenta el número de filas.

• SUM(): Calcula la suma total de una columna numérica.

• AVG(): Calcula el promedio de una columna numérica.

• MAX(): Encuentra el valor más alto en una columna.

• MIN(): Encuentra el valor más bajo en una columna.

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.

o Ejemplo: SELECT departamento, COUNT(*) FROM empleados GROUP BY


departamento;

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.

• Creación de una vista: CREATE VIEW vista_empleados_salarios AS SELECT nombre,


salario FROM empleados WHERE salario > 60000;

• 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

Semana 2 – CRUD completo


Objetivos de la semana
• Consolidar el manejo de SQL como lenguaje para trabajar con datos de
manera profesional.
• Aprender a realizar las cuatro operaciones básicas del CRUD: Crear, Leer,
Actualizar y Borrar.
• Utilizar filtros avanzados para consultas más precisas.
• Comprender cómo se calculan resúmenes estadísticos a través de funciones
de agregación.
• Entender el rol del GROUP BY para agrupar información y obtener resultados
significativos.

1. Repaso de la semana anterior


En la primera semana aprendimos a crear tablas con CREATE TABLE,
insertar datos con INSERT y consultarlos de forma básica con SELECT.
Ese fue el primer paso: poner en marcha la base de datos y comenzar a usarla.
Pero en la vida real, una base de datos está en constante cambio. Se agregan
registros, otros se modifican, algunos dejan de tener sentido y deben eliminarse.
Además, muchas veces no necesitamos mirar cada registro individualmente,
sino obtener un resumen de lo que está pasando (ej. cuántos libros tiene cada autor,
o cuál es el promedio de ventas).
De todo eso se ocupa el contenido de esta semana.

2. Consultas más elaboradas con SELECT


El comando SELECT es mucho más que “traer todo de una tabla”. Nos permite
seleccionar con precisión qué registros queremos.
• Operadores lógicos (AND, OR): sirven para combinar condiciones.
SELECT * FROM Libros
WHERE Precio > 500 AND AutorID = 2;
Este ejemplo devuelve los libros de un autor específico que superen cierto precio.

Bases de datos I
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

• Listas con IN: práctico cuando tenemos varias opciones posibles.


SELECT * FROM Libros
WHERE AutorID IN (1, 3, 5);
Se lee como “el AutorID debe ser 1, 3 o 5”.
• Búsqueda por patrón con LIKE: permite trabajar con coincidencias
parciales.
SELECT * FROM Clientes
WHERE Email LIKE '%[Link]';
El símbolo % funciona como “comodín” que representa cualquier cantidad de
caracteres.

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;

Esto devuelve un solo número: la cantidad de libros en la tabla.

5. Agrupamiento con GROUP BY


Aquí llegamos a una herramienta muy poderosa.
¿Para qué sirve?
El GROUP BY permite agrupar registros que comparten un mismo valor en una
columna y calcular un resumen para cada grupo.
Ejemplo típico: cuántos libros tiene cada autor.
Caso práctico
Supongamos la tabla Libros:

LibroID Titulo Precio AutorID

1 La Casa de los Espíritus 500 1

2 Paula 400 1

3 Rayuela 600 2

4 Bestiario 350 2

5 Cien Años de Soledad 700 3

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

Esto muestra cuánto cuestan en promedio los libros de cada autor.


¿Qué pasa si no usamos GROUP BY?
Si ejecutáramos:
SELECT AutorID, COUNT(*) FROM Libros;
Obtenemos un error: “Columna AutorID no está en GROUP BY ni en una función de
agregación”.
Esto pasa porque cuando hay agregaciones, todas las demás columnas deben
agruparse explícitamente.

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

• Siempre con WHERE: salvo en casos muy específicos, nunca ejecutar


UPDATE o DELETE sin condición.
• Nombrar resultados: usar alias (AS) para que las columnas agregadas
tengan nombres más claros.
• Insertar de manera explícita: indicar siempre las columnas en INSERT.

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

Semana 3 – Consultas avanzadas: JOIN, subconsultas y


vistas
Objetivos de la semana

• Comprender la importancia de combinar información de varias tablas en


una base de datos relacional.
• Aprender a usar los distintos tipos de JOIN (INNER, LEFT, RIGHT).
• Introducir el concepto y uso de las subconsultas.
• Conocer las vistas (VIEW) como herramienta para simplificar consultas.
• Aplicar lo aprendido en ejercicios integradores.

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

LibroID Titulo AutorID

1 La Casa de los Espíritus 1

2 Rayuela 2

3 Bestiario 2

Consulta:
SELECT [Link], [Link]
FROM Libros
INNER JOIN Autores ON [Link] = [Link];
Resultado:

Titulo Nombre

La Casa de los Espíritus Isabel Allende

Rayuela Julio Cortázar

Bestiario Julio Cortázar

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

Isabel Allende La Casa de los Espíritus

Julio Cortázar Rayuela

Julio Cortázar Bestiario

Isabel Allende NULL

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

Resultado (suponiendo datos de ejemplo):

Titulo Precio

Rayuela 600

Cien Años de Soledad 700

La subconsulta calcula el promedio de precios, y la consulta principal filtra con ese


valor.

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

Ahora podemos usarla como si fuera una tabla:


SELECT * FROM LibrosPorAutor;

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

Módulo 5: Lenguaje SQL


Como dijimos anteriormente SQL es el idioma estándar para comunicarse con bases de datos relacionales,
permitiendo tanto la gestión de la estructura como la manipulación de los datos que contienen . Un
programador necesita conocer SQL porque casi todas las aplicaciones modernas 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. En esta última semana veremos consultas combinando diferentes tablas
usando “JOIN”, “UNION” y operaciones de conjuntos sobre múltiples tablas

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:

SELECT [Link], [Link]


FROM Autores AS A
INNER JOIN Libros AS L
ON [Link] = [Link];

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

Tipo de Lógica de la ¿Qué Registros se Devuelven? ¿Cuándo se Presentan Valores


JOIN Unión NULL?

INNER Intersección de Solo los registros con valores Nunca.


JOIN conjuntos coincidentes en ambas tablas

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.

Veamos algunos ejemplos:

LEFT JOIN Manteniendo la Tabla "Izquierda"

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

SELECT [Link], [Link]


FROM Autores AS A
LEFT JOIN Libros AS L
ON [Link] = [Link];

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.

RIGHT JOIN: Manteniendo la Tabla "Derecha"

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

Ejemplo Listar todos los libros y el nombre de su autor correspondiente.

SELECT [Link], [Link]


FROM Autores AS A
RIGHT JOIN Libros AS L
ON [Link] = [Link];

Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

Obtener información de facturación

Supongamos que tenemos las tablas de siguiente diagrama

Para encontrar ciudades donde se vende un producto

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

Incluimos los datos de las sucursales a la consulta y un rango de fechas

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;

Para listar el Top 10 de ciudades de un producto

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

La Consulta Final (Encontrar los Faltantes)


La forma más clara de hacerlo es usando un LEFT JOIN entre la lista de cursos obligatorios y la de cursos
aprobados. Donde no haya coincidencia (es decir, curso_aprobado.id_curso IS NULL), significará que el curso
falta.

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.

Cómo se usa UNION ALL


La sintaxis básica es bastante sencilla. Solo necesitas escribir una sentencia SELECT, seguida de la palabra clave
UNION ALL, y luego otra sentencia SELECT. Puedes encadenar tantas consultas como necesites.

SELECT columna1, columna2, ...


FROM tabla1
WHERE condicion1
UNION ALL
SELECT columna1, columna2, ...
FROM tabla2
WHERE condicion2;

Imagina que tienes dos tablas: empleados_ventas y empleados_marketing. Quieres obtener una lista completa
de todos los empleados de ambos departamentos.

SELECT nombre, apellido, 'Ventas' AS departamento


FROM empleados_ventas
UNION ALL
SELECT nombre, apellido, 'Marketing' AS departamento
FROM empleados_marketing;

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.

Si no cumples estas restricciones, el motor de base de datos devolverá un error.

¿Cuándo usar UNION ALL en lugar de UNION?


Usa UNION ALL cuando sabes que no hay (o no te importa si hay) filas duplicadas y necesitas un rendimiento
más rápido. El proceso de eliminar duplicados de UNION requiere un procesamiento adicional que consume
más recursos. Usa UNION solo cuando sea fundamental eliminar las filas duplicadas.

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

SELECT columna1, columna2, ...


FROM (
-- Tu primera consulta SELECT
SELECT columna1, columna2, ... FROM tabla1
UNION ALL
-- Tu segunda consulta SELECT
SELECT columna1, columna2, ... FROM tabla2
) AS T
GROUP BY columna1, columna2, ...;

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.

SELECT DISTINCT columna1, columna2, ...


FROM tabla1
UNION ALL
SELECT DISTINCT columna1, columna2, ...
FROM tabla2;

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

SELECT * FROM CTE_Nombre2;

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.

Joins Versátiles con CTEs


Una de las mayores ventajas de las CTEs es que puedes usarlas como si fueran tablas reales en tus JOINs, lo
que permite una lógica de consulta más avanzada y legible. Por ejemplo, puedes unir un CTE con una tabla
principal o con otro CTE.

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

departamentos d ON e.id_departamento = [Link]


WHERE
[Link] > 50000
),
proyectos_activos AS (
SELECT
p.nombre_proyecto,
p.lider_proyecto
FROM
proyectos p
WHERE
[Link] = 'Activo'
)
SELECT
[Link],
[Link],
ed.nombre_departamento,
pa.nombre_proyecto
FROM
empleados_departamento ed
INNER JOIN
proyectos_activos pa ON [Link] = pa.lider_proyecto;

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.

Diferencias Clave: JOIN vs. UNION


Característica JOIN UNION

Combinar columnas de diferentes Combinar filas de diferentes


Propósito
tablas basándose en una condición. conjuntos de resultados.

Dirección Unión horizontal (más columnas). Unión vertical (más filas).

Todas las SELECT deben tener


Las tablas pueden tener
Esquema el mismo número de columnas y
estructuras totalmente diferentes.
tipos de datos compatibles.

Siempre usa una condición ON para


Condición Nunca usa una condición ON.
relacionar las tablas.

Muestra los datos relacionados tal UNION sí elimina duplicados del


Duplicados cual, no elimina filas duplicadas de las resultado final. UNION ALL los
tablas originales. mantiene.

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.

Cómo Diferenciar Cuándo Usar INNER, LEFT o RIGHT JOIN

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

• Características fundamentales de las subconsultas


• Uso de operadores específicos con subconsultas
• Guía para el Uso Efectivo de Subconsultas
Concepto y
propósito de las
subconsultas en
SQL

Definición de
subconsulta y
consulta principal

Concepto de subconsulta

Una subconsulta es una consulta


dentro de otra que se evalúa primero
para proporcionar resultados.

Función de la consulta principal

La consulta principal utiliza los


resultados de la subconsulta para
filtrar o calcular datos finales.
Ventajas de
utilizar
subconsultas
Simplificación de Consultas

Las subconsultas reducen la


complejidad al integrar varias
consultas en una sola estructura
coherente.

Mejora de Legibilidad

Facilitan la comprensión del código


al organizar mejor las consultas y sus
resultados parciales.

Reutilización de Resultados

Permiten usar resultados intermedios


sin ejecutar múltiples consultas
independientes.

Diferencia entre
subconsulta y consulta
tradicional

Consulta Tradicional

Una consulta tradicional se ejecuta


de forma independiente y devuelve
resultados sin depender de otra
consulta.

Subconsulta

La subconsulta se ejecuta dentro de


otra consulta y puede afectar sus
resultados, siendo correlacionada o
no correlacionada.
Sintaxis y
proceso de
ejecución de una
subconsulta

La subconsulta se ejecuta una vez y antes de la consulta principal.


El resultado de ella es usado por la consulta principal externa.
Estructura y formato
correcto de una
subconsulta
Delimitación con paréntesis

Las subconsultas deben estar siempre entre


paréntesis para ser reconocidas correctamente en
la consulta principal.

Ubicación en cláusulas permitidas

Las subconsultas pueden ubicarse en las cláusulas


WHERE, FROM o SELECT dentro de una consulta
principal.

Respeto a la sintaxis SQL

Es fundamental respetar la sintaxis SQL para que la


subconsulta funcione correctamente dentro de la
consulta principal.

Orden de
ejecución entre
subconsulta y
consulta externa
Ejecución de la Subconsulta

La subconsulta se ejecuta primero


para obtener los datos o resultados
necesarios para la consulta externa.

Uso de Resultados en Consulta


Externa

La consulta externa utiliza los


resultados de la subconsulta para
completar su procesamiento y
obtener el resultado final.
Importancia de los
paréntesis en la
sintaxis
Función de los Paréntesis

Los paréntesis delimitan subconsultas,


asegurando que el motor SQL interprete
correctamente la jerarquía.

Jerarquía y Orden de Ejecución

El uso correcto de paréntesis garantiza el


orden adecuado en la ejecución de
consultas anidadas.

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.

lógicas complejas Construcción de Lógicas Complejas


Se pueden aplicar filtros avanzados combinando múltiples
condiciones para un análisis específico.

Ubicación flexible
en cláusulas SQL
Subconsultas en cláusula WHERE

Permite filtrar resultados basados en


condiciones específicas evaluadas por la
subconsulta en la cláusula WHERE.

Subconsultas en cláusula FROM

Facilita la creación de tablas derivadas para


análisis complejos usando subconsultas
dentro de FROM.

Subconsultas en cláusula SELECT

Permite calcular valores dinámicos para


cada fila mediante subconsultas en la
cláusula SELECT.

Subconsultas en cláusula HAVING

Usa subconsultas para aplicar condiciones a


grupos de resultados en la cláusula HAVING.
Tipos de resultados de
retorno: mono-registro
y multi-registro
Resultado Mono-registro

Las subconsultas mono-registro devuelven un único


valor o fila según la lógica de la consulta.

Resultado Multi-registro

Las subconsultas multi-registro pueden devolver


múltiples valores o filas basadas en los criterios de
búsqueda.

Uso de
operadores
específicos con
subconsultas
Operadores IN, NOT
IN, ANY y ALL

Operadores para comparaciones múltiples

IN y NOT IN comparan valores con conjuntos


para incluir o excluir registros fácilmente.

Uso de ANY y ALL

ANY verifica si algún valor cumple la


condición, ALL exige que todos los valores la
cumplan.

El operador EXISTS
y su utilidad

Verificación de existencia

EXISTS comprueba si existe al menos un registro que


cumple con la condición en una subconsulta.

Optimización de consultas

Utilizar EXISTS mejora el rendimiento al evitar búsquedas


innecesarias de datos completos.

Condiciones booleanas eficientes

EXISTS permite construir condiciones booleanas


basadas en la presencia o ausencia de datos específicos.
Aplicación del
operador NOT en
condiciones

Función del operador NOT

El operador NOT se utiliza para invertir el


resultado de una condición lógica en consultas.

Uso con EXISTS

NOT combinado con EXISTS permite excluir


registros que existen según una subconsulta.

Uso con IN

NOT junto con IN filtra datos que no están en


una lista determinada por la subconsulta.

Guía para el
Uso Efectivo de
Subconsultas
Directrices para
sintaxis y
operadores en
subconsultas
Sintaxis clara

Una sintaxis clara facilita la comprensión y el


mantenimiento de las subconsultas en bases
de datos.

Uso correcto de paréntesis

El uso preciso de paréntesis asegura la


correcta ejecución y agrupación de las
subconsultas.

Selección adecuada de operadores

Elegir operadores apropiados garantiza que


las subconsultas realicen las operaciones
deseadas eficazmente.

Subconsultas
mono-registro y
multi-registro:
características y
ejemplos

Subconsultas Mono-registro

Retornan un único valor, perfectas para


comparaciones directas en consultas
SQL.

Subconsultas Multi-registro

Retornan conjuntos de valores, usadas


para comparaciones múltiples en bases
de datos.
Empleo de
subconsultas en la
cláusula FROM

Tablas Derivadas Temporales

Las subconsultas en FROM crean tablas derivadas


temporales para organizar datos de manera
eficiente.

Facilita Consultas Complejas

Permite realizar consultas complejas al dividir el


procesamiento en pasos manejables.

Reorganización de Datos

Subconsultas reorganizan y preparan los datos


antes del análisis final, mejorando la precisión.

Guía Uso de
Subconsultas

•Encierre las subconsultas entre paréntesis.


•No añada una cláusula ORDER BY a una
subconsulta.
•Utilice operadores a nivel de fila para subconsultas
que devuelvan solo una fila-->MONOREGISTRO.
•Utilice operadores que actúan sobre varios
registros para subconsultas que devuelven más de
una fila → MULTI REGISTRO.
Subconsultas Mono
registro

• Devuelven un único registro.

• Se utilizan operadores de
comparación (=, >, >=, <, <= y <>).

Ejemplo:

Subconsultas Multi
registro

Devuelven más de un registro

Se utilizan comparadores multiregistro:

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

Módulo 5: Subconsultas - Apunte

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.

Generalmente, una subconsulta se puede reemplazar por combinaciones.

Una subconsulta permite que las consultas SQL sean más modulares al gestionar tareas que, de otro
modo, requerirían varias consultas independientes.

La función de las subconsultas en SQL incluye lo siguiente:

• Filtrar registros basándose en datos de tablas relacionadas.

• Agregando datos y realizando cálculos dinámicamente.

• Cruzar datos entre tablas para obtener información específica.

• Seleccionar filas condicionalmente sin necesidad de uniones explícitas o lógica de código


externa

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.

Subconsultas de tablas (tablas derivadas)

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 que podemos usar en las subconsultas


Los operadores que podemos usar en las subconsultas son los siguientes:

Operadores básicos de comparación (>, >=, <, <=, !=, <>, =).
Predicado ALL, ANY y SOME
Predicado IN y NOT IN
Predicado EXISTS y NOT EXISTS

Operadores básicos de comparación


Los operadores básicos de comparación (>,>=, <, <=, !=, <>, =) se pueden usar cuando queremos
comparar una expresión con el valor que devuelve una subconsulta.

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.

Operadores ALL, ANY y SOME

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.

Operadores EXISTS / NOT EXISTS


El operador EXISTS comprueba si un valor o un registro está en una subconsulta. Cuando se incluye en
una cláusula WHERE, el operador EXISTS devolverá los registros filtrados de la consulta. La evaluación
de subconsultas es importante en SQL, ya que mejora el rendimiento de las consultas y permite evaluar
consultas complejas.

Ventajas de las Subconsultas

• Permiten descomponer lógicas complejas en partes más legibles.


• Reutilización de condiciones o cálculos (por ejemplo, promedios).
• En muchos casos evita múltiples uniones cuando solo se necesita filtrar.
• Puedes limitar el alcance de ciertas operaciones.

Desventajas de las Subconsultas

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

Usos comunes en SQL


Se utilizan para comparaciones complejas, búsquedas condicionales y
validaciones en bases de datos.
Flexibilidad de subconsultas correlacionadas
Las subconsultas correlacionadas permiten resolver problemas
complejos con mayor precisión y contexto.

Impacto en el rendimiento
Las subconsultas correlacionadas pueden reducir el rendimiento en
bases de datos grandes debido a múltiples ejecuciones.

Eficiencia de subconsultas independientes


Las subconsultas independientes son generalmente más eficientes,
ideales para consultas menos complejas.

Elección según contexto


La elección entre subconsultas depende de las necesidades
específicas y el contexto del problema.

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.

Ejemplo con salarios


Seleccionar empleados con salarios superiores al promedio de su
departamento usando subconsultas correlacionadas.

Aplicaciones prácticas
Útiles para análisis avanzados y reportes personalizados que requieren
datos relacionados dinámicos.
Subconsultas
Correlacionadas

Entendiendo las consultas que se


autoreferencian

¿Qué es una Subconsulta Correlacionada?


• En una subconsulta correlacionada, las consultas principales y subordinadas extraen datos de la
misma tabla.
• La consulta interna realiza una función de agregado (ej. una estadística) y alimenta esta
información a la consulta externa, que la utiliza como base para una comparación.
• La subconsulta se ejecuta repetidamente, una vez por cada fila seleccionada por la consulta
externa.
• Esto significa que la subconsulta se ejecuta para cada fila de la tabla principal y utiliza los
valores de la fila actual para filtrar los resultados de la subconsulta.
Ejemplo Práctico 1 - Inventario
• Escenario: Listar registros de inventario para
artículos con precios superiores al promedio de un
depósito.
• La consulta externa pasa la información del
depósito a la consulta interna.
• La consulta interna envía el promedio de nuevo a
la consulta externa.

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

Nota: Las dos consultas usan alias de tabla "I1" y


"I2". Aunque se refieren a la misma tabla, el uso del
alias permite tratarlas como dos entidades
separadas.

Ejemplo Práctico 2 - Proyectos y Presupuesto (Parte 1)

Escenario: Listar los proyectos cuyo 50% de horas trabajadas han


superado el presupuesto asignado.

Consideraciones para el costo de la hora:


Si la hora para ejecutar los proyectos se paga $350.
Si la hora para ejecutar los proyectos se paga $550.
Si la hora para ejecutar los proyectos se paga $1000.

Consulta SQL (Ejemplo con $350/hora):

SELECT [Link], [Link], [Link]


FROM proyectos T1
WHERE ([Link]) < (SELECT sum(hstrabajadas*350)/2
FROM `proy_equipo_hs` T3
WHERE [Link] = [Link]
)
ORDER BY [Link];
• Sugerencia de formato:
• format(atributo, decimales) para salida
numérica con decimales y separador de miles.
• concat("$ ", atributo) para agregar el signo $ a la
salida.
• Ejemplo: Concat(‘$ ‘,format([Link], 2)).

Ejemplo Práctico 2 - Proyectos y Presupuesto (Parte 2)


Consulta SQL (Ejemplo con $550/hora y formato aplicado):

SELECT [Link], [Link], concat('$


',format([Link],2))
FROM proyectos T1
WHERE ([Link]) < (SELECT
sum(hstrabajadas*550)/2
FROM `proy_equipo_hs` T3
WHERE [Link] = [Link]
)
ORDER BY [Link];
Consideraciones para el costo de la hora (recordatorio):
• Si la hora para ejecutar los proyectos se paga $350.
• Si la hora para ejecutar los proyectos se paga $550.
• Si la hora para ejecutar los proyectos se paga
$1000.
Otro Caso de Uso - Horas Trabajadas por Proyecto
Escenario: Mostrar el Total de horas trabajadas, por
nroproyecto y nombreproyecto, de todos los proyectos
que tienen equipos de trabajo asignados.

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

Módulo 5: Vistas - Apunte

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.

Diferencias entre una vista y una tabla

Característica Tabla Vista

Almacenamiento Almacena físicamente los No almacena datos; consulta


datos virtual

Actualización directa Sí, mediante INSERT, Solo si es una vista


UPDATE, DELETE actualizable

Velocidad de acceso Más rápida al consultar Puede ser más lenta si es


grandes volúmenes de datos compleja

Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

Persistencia de datos Sí, los datos permanecen Los datos se generan al


hasta ser modificados consultar

Independencia lógica Baja Alta, se puede modificar sin


afectar tablas

En MySQL, las vistas no pueden tener índices propios ni claves primarias, ya que no
almacenan datos.

Se recomienda usar vistas en las siguientes situaciones:

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

Sintaxis para crear vistas en MySQL

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:

● El nombre debe comenzar con una letra o guion bajo.

Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

● Puede incluir letras, números y guiones bajos.


● No debe contener espacios ni caracteres especiales.
● No debe coincidir con palabras reservadas del lenguaje SQL.
● En bases de datos sensibles a mayúsculas (como en Linux), se recomienda usar nombres en
minúsculas para evitar errores.

Alias de columnas y vistas

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

Las vistas simples son aquellas que:

● Se basan en una sola tabla.


● No utilizan funciones de agregación (SUM, AVG, COUNT, etc.).
● No incluyen GROUP BY, DISTINCT, UNION, LIMIT, HAVING, ni subconsultas.
● Pueden ser, en muchos casos, actualizables (es decir, se pueden usar para modificar datos de la
tabla base).

Ventajas:

● Son más fáciles de mantener.


● Suelen permitir INSERT, UPDATE y DELETE directamente desde la vista.

Vistas Complejas

Las vistas complejas son aquellas que:

Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

● Involucran más de una tabla (JOINs).


● Usan funciones de agregación o agrupación (GROUP BY, SUM, etc.).
● Incluyen subconsultas, expresiones, filtros avanzados o transformaciones de datos.

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.

Vistas con WITH CHECK OPTION

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.

● Muestra solo alumnos que pertenecen a la carrera 2.


● Restringe las modificaciones (INSERT o UPDATE) que no cumplan esa condición.
● Garantiza la consistencia de los datos: todo cambio hecho a través de esta vista debe respetar
el WHERE id_carrera = 2.

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:

● Mejora la legibilidad del código SQL.


● Favorece la reutilización de lógica de negocio.
● Facilita el mantenimiento del sistema.

La segunda vista (vista_mayores_carrera_3) usa como fuente a otra vista


(vista_alumnos_mayores_18), cumpliendo así con el concepto de vista anidada de forma clara y
didáctica.

Ventajas y Limitaciones de las Vistas

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.

Ventajas de las Vistas

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.

Limitaciones de las Vistas

1. No todas las vistas son actualizables


○ En MySQL, solo algunas vistas permiten operaciones INSERT, UPDATE o DELETE, y
deben cumplir con ciertas condiciones:
■ No tener funciones agregadas (SUM, AVG, etc.).
■ No incluir DISTINCT, GROUP BY, HAVING, UNION, LIMIT, JOIN complejos, ni
subconsultas en el SELECT.
■ No derivar de más de una tabla sin clave primaria clara.
○ En esos casos, la vista se vuelve de solo lectura.
2. Pérdida de rendimiento en vistas complejas
○ Las vistas no almacenan datos físicamente, por lo tanto, cada vez que se consultan se
ejecuta la consulta base.
○ Si la vista es muy compleja o mal optimizada, puede afectar negativamente el
rendimiento.
3. No poseen índices propios
○ A diferencia de las tablas, las vistas no tienen índices porque no almacenan datos.
○ El rendimiento depende de los índices definidos en las tablas subyacentes.
4. No almacenan datos físicamente
○ Las vistas son estructuras virtuales: su contenido se genera dinámicamente al momento
de la consulta.
○ Esto implica que no se pueden utilizar como almacenamiento intermedio, ni como
"caché" permanente de resultados.

Actualización de Datos a través de Vistas

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.

En MySQL, una vista puede considerarse actualizable siempre que:

● Se basa en una sola tabla.


● No contiene funciones de agregación (SUM, AVG, COUNT, etc.).

Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

● No tiene cláusulas DISTINCT, GROUP BY, HAVING, UNION.


● No utiliza subconsultas en la lista de selección.
● No utiliza LIMIT u ORDER BY (en versiones anteriores a MySQL 8).
● No renombra columnas con alias complejos que impidan mapear los nombres a la tabla original.
● Todas las columnas requeridas para insertar o actualizar están incluidas en la vista.

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.

Modificación y Eliminación de Vistas

REPLACE: modificar una 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:

● Las columnas seleccionadas.


● Filtros o condiciones.
● Joins con otras tablas o vistas.

Ventajas:

● No es necesario eliminar la vista previamente.


● Conserva el nombre de la vista.
● Se actualiza automáticamente con la nueva definición.

DROP VIEW: eliminar una vista

Para eliminar una vista de la base de datos se utiliza:

Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

También se pueden eliminar varias vistas a la vez:

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.

Consultas Mixtas con Tablas y Vistas

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:

● Reutilizar lógica compleja sin repetirla.


● Unir información resumida con datos detallados.
● Construir reportes dinámicos y legibles.

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

● Reportes dinámicos y resumidos.


● Informes filtrados por criterios específicos.
● Dashboards interactivos (por ejemplo, en herramientas como Power BI, Tableau o aplicaciones
web).

Ventajas clave:

● Modularidad: si se cambia la definición de la vista, se actualizan automáticamente los reportes


sin modificar todas las consultas.
● Seguridad: se puede restringir el acceso directo a las tablas sensibles, exponiendo solo lo
necesario a través de vistas.
● Claridad: se separa la lógica de negocio (en la vista) del diseño del reporte (en la consulta mixta).

Vistas almacenadas en MySQL

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.

Diferencias entre Vista virtual y Vista almacenada

Característica Vista virtual Vista almacenada

Almacenamiento No almacena datos físicos Sí, almacena los datos en


disco

Actualización automática Siempre actualiza al Puede requerir actualización


consultar manual o programada

Rendimiento en consultas Depende de la complejidad Más rápida si no cambia


de la consulta frecuentemente

Consumo de espacio No ocupa espacio extra Requiere almacenamiento


adicional

Permisos y Seguridad sobre Vistas

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.

Casos de uso comunes

Privacidad de datos

Evitar mostrar información sensible como edades, direcciones, sueldos, etc.

Auditorías

Crear vistas que solo muestren logs o datos relevantes para control, sin permitir modificar la
información.

Control por rol

● Los administradores acceden a todas las columnas.


● Los docentes ven solo nombre y apellido.
● Un departamento determinado accede a créditos o información académica.

Esto se logra creando diferentes vistas para cada grupo de usuarios, y asignando permisos según el
perfil.

Recomendaciones

● Crear vistas dedicadas para cada perfil de acceso.


● No otorgar permisos sobre tablas a usuarios que no lo requieran.
● Si una vista requiere actualización, considerar la opción de usar WITH CHECK OPTION para
validar los datos permitidos.

Buenas Prácticas en el Uso de Vistas

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.

Usar nombres descriptivos y consistentes

● El nombre de una vista debe reflejar claramente su contenido y propósito.


● Evitar abreviaturas confusas o nombres genéricos como vista1 o datos.
● Por ejemplo: vista_alumnos_activos, vista_reportes_ventas_anuales.

Esto facilita la comprensión y mantenimiento del esquema de la base de datos.

10

Base de Datos
TECNICATURA UNIVERSITARIA
EN PROGRAMACIÓN
A DISTANCIA

Documentar el propósito de cada vista

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

Evitar anidamientos innecesarios

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

Optimizar las consultas usadas dentro de vistas

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

Separar vistas operativas y analíticas

● 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

También podría gustarte