Saltar al contenido principal

Alias, Subconsultas y Relaciones


1. Uso de alias para columnas y tablas

¿Qué son los alias en SQL?

En SQL, los alias son nombres temporales que se asignan a tablas o columnas dentro de una consulta. Son especialmente útiles para mejorar la legibilidad de las consultas complejas o para crear nombres más descriptivos y fáciles de entender.

Un alias solo existe durante la ejecución de la consulta y no afecta a la base de datos original.

¿Por qué usar alias?

El uso de alias permite:

  • Simplificar el código: Especialmente en consultas complejas donde se usan múltiples tablas o subconsultas.
  • Mejorar la legibilidad: Puedes poner nombres más comprensibles a las columnas o tablas.
  • Evitar ambigüedad: En consultas con varias tablas que contienen columnas con el mismo nombre, los alias ayudan a diferenciar esas columnas.

¿Cómo se usan los alias?

Alias para columnas

Los alias para columnas permiten dar nombres más significativos o abreviados a los resultados de las columnas. Se asignan utilizando la palabra clave AS.

Ejemplo:

SELECT first_name AS nombre, last_name AS apellido
FROM empleados;

En este ejemplo, first_name y last_name son las columnas originales de la tabla empleados, pero en los resultados se mostrarán como nombre y apellido, respectivamente.

Si prefieres, puedes omitir la palabra AS y escribir el alias directamente:

SELECT first_name nombre, last_name apellido
FROM empleados;

Alias para tablas

Los alias para tablas son útiles cuando estamos trabajando con múltiples tablas y queremos hacer que el código sea más limpio y fácil de leer. Los alias de tablas son especialmente comunes cuando se utilizan joins (uniones) entre varias tablas.

Ejemplo:

SELECT e.first_name, e.last_name, d.department_name
FROM empleados e
JOIN departamentos d ON e.department_id = d.department_id;

En este caso:

  • La tabla empleados ha sido asignada al alias e.
  • La tabla departamentos ha sido asignada al alias d.

Esto hace que las referencias a las columnas sean más breves y claras, evitando tener que escribir nombres largos de tablas repetidamente.

Recuerda que los alias no tienen que ser únicos, pero deben ser consistentes dentro de una consulta.

Alias en subconsultas

Los alias también son útiles cuando se trabaja con subconsultas (consultas dentro de otras consultas). En este caso, el alias permite referirse de manera más sencilla a los resultados de la subconsulta.

Ejemplo:

SELECT e.first_name, e.last_name
FROM empleados e
WHERE e.department_id IN (SELECT department_id FROM departamentos WHERE department_name = 'TI');

En este ejemplo, la subconsulta obtiene los department_id de la tabla departamentos con el alias d, y luego se utiliza ese resultado en la consulta principal para obtener los empleados que pertenecen a ese departamento.

Buenas prácticas al usar alias

  • Claridad: Usa alias descriptivos.
  • Consistencia: Sé consistente con su uso.
  • Evitar conflictos: No uses palabras reservadas.

Actividad de alias

  1. Objetivo: Crea una consulta que utilice alias tanto para columnas como para tablas. Utiliza una subconsulta para filtrar resultados.
  2. Requerimientos:
    • Usa alias para las tablas clientes, pedidos y productos.
    • Selecciona el nombre del cliente, el total del pedido y el nombre del producto.
    • Filtra los resultados por productos que superen un precio determinado.
SELECT c.nombre_cliente, p.total_pedido, pr.nombre_producto
FROM clientes c
JOIN pedidos p ON c.cliente_id = p.cliente_id
JOIN productos pr ON p.producto_id = pr.producto_id
WHERE pr.precio > 50;

2. Subconsultas en WHERE y FROM

¿Qué es una subconsulta SQL?

Una subconsulta (o consulta anidada) es una instrucción SELECT que se encuentra dentro de otra consulta SQL. Se usa para obtener resultados intermedios o criterios dinámicos y puede aparecer en distintas partes de una consulta, como WHERE, FROM o SELECT.

Características:

  • Se ejecuta antes que la consulta principal.
  • Puede devolver un valor, una lista o una tabla temporal.
  • Mejora la modularidad y legibilidad del código SQL.

¿Para qué sirve una subconsulta?

  • Filtrar registros usando datos de otra tabla.
  • Realizar cálculos agregados sin varias consultas separadas.
  • Evitar uniones complejas, cuando no se requieren.
  • Construir tablas temporales para operaciones avanzadas.
  • Comparar valores dinámicamente.

Tipos de subconsultas según su ubicación

Subconsulta en WHERE

Filtra registros según el resultado de otra consulta.

SELECT nombre
FROM empleados
WHERE departamento_id IN (
SELECT id
FROM departamentos
WHERE region = 'Norte'
);

Filtra empleados cuyo departamento_id pertenece a departamentos en la región 'Norte'.

Subconsulta en FROM

Actúa como una tabla temporal dentro de la consulta principal.

SELECT d.region, COUNT(e.id) AS total_empleados
FROM (
SELECT id, region
FROM departamentos
WHERE region IN ('Norte', 'Sur')
) AS d
JOIN empleados e ON e.departamento_id = d.id
GROUP BY d.region;

Genera estadísticas de empleados por región, utilizando una tabla intermedia derivada.

Comparación rápida

UbicaciónUso principalVentaja
WHEREFiltrar datosSintaxis simple, directa
FROMCrear conjuntos intermediosPermite agrupar, unir, analizar

Ejemplo combinado (ambas formas)

SELECT e.nombre, e.cargo
FROM empleados e
WHERE e.departamento_id IN (
SELECT d.id
FROM (
SELECT id, region
FROM departamentos
WHERE region = 'Norte'
) AS d
JOIN empleados e2 ON e2.departamento_id = d.id
GROUP BY d.id
HAVING COUNT(e2.id) > 5
);

Aquí se usa una subconsulta en FROM para aislar departamentos de la región 'Norte' y luego se filtran en WHERE solo los que tienen más de 5 empleados.

Buenas prácticas

  • Usa EXISTS en lugar de IN si esperas muchos resultados.
  • Evita subconsultas correlacionadas en grandes volúmenes.
  • Indexa las columnas usadas en subconsultas.
  • Considera usar CTEs (WITH) para mayor claridad en consultas complejas.

3. Relacionar tablas con uso (JOIN, INNER, LEFT)

¿Qué es un JOIN?

Un JOIN es una instrucción de SQL que permite combinar datos de dos o más tablas en un único conjunto de resultados. Lo hace uniendo filas que tienen un valor en común en una o más columnas.

En otras palabras:

Un JOIN relaciona tablas mediante una condición de igualdad entre columnas (generalmente una llave primaria en una tabla y una llave foránea en la otra), y fusiona columnas de ambas tablas en el resultado final.

JOIN no crea una nueva tabla, solo combina temporalmente los resultados para mostrar la información unificada.

¿Por qué usar JOIN?

  • Para obtener información relacionada de varias tablas en una sola consulta
  • Reduce la duplicación de datos y mejora la normalización
  • Facilita reportes complejos con múltiples entidades
  • Optimiza consultas en bases de datos bien estructuradas

Usos comunes de JOIN

  • Unir clientes con sus pedidos
  • Relacionar estudiantes con cursos matriculados
  • Combinar productos con categorías
  • Mostrar usuarios junto con sus perfiles o roles

Tipos de JOIN más comunes

Todos los ejemplos parten de dos tablas: Clientes y Pedidos, unidas por la columna id_cliente.

Tabla Clientes
id_clientenombre
1Juan
2María
3Pedro
Tabla Pedidos
id_pedidoid_clienteproducto
1011Teclado
1022Ratón
1031Monitor

INNER JOIN

Devuelve solo los registros que coinciden en ambas tablas.

SELECT Clientes.nombre, Pedidos.producto
FROM Clientes
INNER JOIN Pedidos
ON Clientes.id_cliente = Pedidos.id_cliente;

Resultado:

nombreproducto
JuanTeclado
MaríaRatón
JuanMonitor

Pedro no aparece porque no tiene pedidos.

LEFT JOIN

Devuelve todos los registros de la tabla izquierda y los que coinciden en la derecha. Si no hay coincidencia, se rellena con NULL.

SELECT Clientes.nombre, Pedidos.producto
FROM Clientes
LEFT JOIN Pedidos
ON Clientes.id_cliente = Pedidos.id_cliente;

Resultado:

nombreproducto
JuanTeclado
JuanMonitor
MaríaRatón
PedroNULL

Se conservan todos los clientes, incluso los que no tienen pedidos.

RIGHT JOIN

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

SELECT Clientes.nombre, Pedidos.producto
FROM Clientes
RIGHT JOIN Pedidos
ON Clientes.id_cliente = Pedidos.id_cliente;

Resultado:

nombreproducto
JuanTeclado
MaríaRatón
JuanMonitor

No hay diferencia si todos los pedidos tienen cliente.

FULL JOIN

Devuelve todos los registros cuando hay coincidencia en una de las tablas o en ambas. Si no hay coincidencia, se rellenan con NULL.

SELECT Clientes.nombre, Pedidos.producto
FROM Clientes
FULL JOIN Pedidos
ON Clientes.id_cliente = Pedidos.id_cliente;

Resultado:

nombreproducto
JuanTeclado
MaríaRatón
JuanMonitor
PedroNULL

Se visualiza toda la información, incluso cuando no hay coincidencia en alguna tabla.

Ejemplo práctico de INNER JOIN

Relacionar empleados con su departamento:

SELECT empleados.nombre, departamentos.nombre AS departamento
FROM empleados
INNER JOIN departamentos
ON empleados.id_departamento = departamentos.id;

Actividad propuesta

Realiza una consulta con LEFT JOIN que relacione una tabla usuarios con comentarios.
Debe mostrar todos los usuarios, aunque no hayan hecho comentarios.

SELECT usuarios.nombre, comentarios.texto
FROM usuarios
LEFT JOIN comentarios
ON usuarios.id = comentarios.id_usuario;