Saltar al contenido principal
InicioTutorialesSQL

Introducción a las uniones SQL

En este tutorial, aprenderás la mecánica de las uniones en SQL y sus diferentes tipos.
Actualizado 11 sept 2024  · 9 min leer

Durante tu análisis de datos en SQL, a menudo necesitarás consultar varias tablas y unirlas para obtener los resultados deseados. Unir tablas para analizar datos también es una habilidad necesaria para un científico de datos. En este tutorial, conocerás los distintos tipos de uniones que puedes realizar en PostgreSQL. Primero estudiarás los conceptos preliminares de las uniones en SQL, y después aprenderás sobre los distintos tipos de uniones y cuáles son sus sintaxis en PostgreSQL. Terminarás este tutorial ejecutando varios tipos de consultas de unión utilizando dos tablas. Para poder seguirlo, debes estar familiarizado con los fundamentos de SQL y con la forma de escribir consultas sencillas en PostgreSQL. Si buscas recursos para aprenderlos, los siguientes pueden ser útiles -

Comencemos.

Configurar el entorno de la base de datos en PostgreSQL

Antes de estudiar los fundamentos de las uniones SQL, sería una buena idea crear algunas tablas para tus análisis. Necesitarás al menos dos tablas que tengan al menos una columna en común. Aunque puedes ejecutar consultas autounidas en la misma tabla, vamos a ignorar este hecho por el momento.

Puedes realizar todas las operaciones SQL en una herramienta llamada pgAdmin que generalmente viene con la instalación de PostgreSQL. Abramos pgAdmin y creemos una base de datos (ponle el nombre que quieras) para crear las tablas si no tienes una base de datos existente con la que proceder. A continuación, puedes crear las dos tablas siguientes con las especificaciones dadas -

  • student_name (id, name)
  • student_stream (id, stream)

Observa que ambas tablas tienen en común la columna id. Puedes utilizar las siguientes sentencias CREATE para crear las tablas -

  • Para nombre_alumno -
    CREATE TABLE student_name
    (
    id smallint,
    name "char"[]
    );
    
  • Para corriente_estudiante -
    CREATE TABLE student_stream
    (
    id smallint,
    stream "char"[]
    );
    

Ahora vamos a insertar algunos registros en las tablas.

  • Para nombre_alumno -
INSERT INTO student_name(id, name) VALUES (1, 'Sayak');

INSERT INTO student_name(id, name) VALUES (2, 'Alex');

INSERT INTO student_name(id, name) VALUES (3, 'Sameer');

INSERT INTO student_name(id, name) VALUES (4, 'Rick');
  • Para corriente_estudiante -
INSERT INTO student_stream(id, stream) VALUES (1, 'CS');

INSERT INTO student_stream(id, stream) VALUES (1, 'IT');

INSERT INTO student_stream(id, stream) VALUES (2, 'ECE');

INSERT INTO student_stream(id, stream) VALUES (9, 'ECE');

Las entradas de la tabla deberían ser como las siguientes en caso de que hayas ejecutado las consultas anteriores sin cambiar nada -

tablas nombre_alumno y corriente_alumno

Ya tienes listas dos tablas sencillas. Pasemos ahora a estudiar los fundamentos de las uniones SQL.

Uniones SQL - Conceptos básicos

Las uniones SQL te permiten unir dos o más tablas (a veces sólo una) utilizando identificadores comunes. Toma como ejemplo las dos tablas anteriores que has creado: ambas tablas tienen en común la columna id. Puedes cuestionarte la necesidad de unir en SQL. Discutámoslo brevemente.

Debido a las restricciones de normalización, puede que no tengas toda la información necesaria presente en una sola tabla. La normalización no sólo es deseable, sino también necesaria para mantener la coherencia, reducir la redundancia y evitar varias inserciones y anomalías de actualización. Considera de nuevo las dos tablas anteriores. Supongamos que quieres averiguar las ramas en las que se ha matriculado Sayak. Para obtener la respuesta a esta pregunta, tendrás que unir las dos tablas (también se pueden utilizar subconsultas, pero no lo consideremos ahora) y luego proceder en consecuencia.

Para que dos tablas se unan tiene que haber algo en común entre ambas. ¿Significa esto que ambas tablas tienen que tener al menos una columna con el mismo nombre? ¿O qué es exactamente esta afección?

Puede que las tablas que quieras unir no tengan una columna con el mismo nombre, pero lógicamente deben ser iguales, es decir, sus tipos de datos deben ser los mismos. No puedes unir dos tablas que tengan una columna con el mismo nombre pero diferentes tipos de datos. Estudiemos ahora los distintos tipos de uniones SQL.

Diferentes tipos de uniones SQL

En esta sección, estudiarás varios tipos de Uniones SQL -

  • INNER JOIN
    • Autounión
  • OUTER JOIN
    • LEFT JOIN
    • UNIÓN A LA DERECHA
    • JOIN COMPLETO
  • CROSS JOIN
  • Semi-unión y Anti-unión

PostgreSQL proporciona palabras clave independientes para los tipos de uniones mencionados en mayúsculas. Estudiemos cada una de ellas una por una. Para ello, primero estudiarás las uniones visualmente, y luego ejecutarás las respectivas consultas de unión en PostgreSQL.

INNER JOIN

Echa un vistazo al siguiente diagrama para comprender visualmente INNER JOIN -

Diagrama de unión interna

En el ejemplo anterior, la columna considerada es la columna id. INNER JOIN ignorará el resto de columnas cuyos valores no sean comunes en ambas tablas. Ahora vamos a ejecutar una consulta en PostgreSQL que realizaría INNER JOIN entre las dos tablas: nombre_alumno y flujo_alumno.

Al ejecutar la siguiente consulta, obtendrás el resultado que se muestra en la figura anterior -

SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
INNER JOIN student_stream AS s2
ON s1.id = s2.id;

s1 y s2 son los alias de las dos tablas. Has utilizado la palabra clave ON junto con INNER JOIN. La consulta también puede ejecutarse utilizando la palabra clave USING -

SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
INNER JOIN student_stream AS s2
USING (id);

La Autounión te permite realizar uniones de la misma tabla. Pero, ¿dónde puede ser una buena opción? Supongamos que tienes una tabla formada por las siguientes columnas -

  • País
  • Continente

Ahora quieres alistar dos países de forma que sus continentes sean iguales. La siguiente figura debería darte una idea de los resultados esperados -

resultado de la autounión (forma de tabla)

OUTER JOIN

OUTER JOIN pueden dividirse a su vez en tres tipos -

JOIN IZQUIERDO o JOIN exterior izquierdo: El siguiente diagrama te da una idea aproximada de LEFT JOIN en SQL -

Diagrama de la unión izquierda en SQL

Ten en cuenta que, a diferencia de INNER JOIN, LEFT JOIN te trae los registros de la tabla izquierda (según el orden que especifiques en tu consulta) para los que no había ninguna entrada coincidente en la tabla derecha. Esto, a su vez, te indica que Sameer y Rick no se han inscrito en ninguna corriente. La consulta correspondiente será -

SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
LEFT JOIN student_stream AS s2
ON s1.id = s2.id;

RIGHT JOIN o Right Outer JOIN : RIGHT JOIN es exactamente lo contrario de LEFT JOIN -

diagrama de right join en SQL

RIGHT JOIN puede ayudarte a encontrar la(s) corriente(s) en la(s) que no se ha matriculado ningún estudiante. La consulta para esto sería -

SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
RIGHT JOIN student_stream AS s2
ON s1.id = s2.id;

FULL JOIN o FULL Outer JOIN: FULL JOIN te permite combinar LEFT JOIN y RIGHT JOIN en una única compilación -

Diagrama de la unión completa en SQL

La consulta correspondiente sería -

SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
FULL JOIN student_stream AS s2
ON s1.id = s2.id;

Ten en cuenta que puedes ejecutar todas las consultas anteriores de OUTER JOIN utilizando la palabra clave USING. Estudiemos ahora CROSS JOIN.

CROSS JOIN

CROSS JOIN es esencialmente el producto cartesiano entre dos elementos expresados mediante SQL. Supón que necesitas tener todas las combinaciones posibles entre dos tablas o incluso en una sola tabla. Necesitarás CROSS JOIN para hacerlo. La siguiente figura presenta visualmente este concepto -

Esquema de unión en cruz

Ya tienes dos tablas para probarlo. Para disponer de todas las combinaciones posibles entre las columnas id de las tablas student_name y student_stream, puedes ejecutar la siguiente consulta -

SELECT s1.id, s2.id
FROM student_name AS s1
CROSS JOIN student_stream AS s2;

Y obtienes el siguiente resultado -

Tabla de todas las combinaciones posibles

Veamos ahora los otros dos tipos de unión para los que PostgreSQL no proporciona ninguna palabra clave directa.

Semi-unión y Anti-unión

Consideremos las tablas que creaste anteriormente en el tutorial:

Tabla original

Semi Join Las consultas se ejecutan generalmente en forma de subconsultas en las que se recogen filas de la primera tabla con respecto a una condición (o un conjunto de condiciones) que coincide en la segunda tabla. Supongamos que la tabla de la izquierda es la primera tabla, y la tabla de la derecha es la segunda tabla.

Anti Join las consultas son exactamente lo contrario. En Anti Join, se recogen filas de la primera tabla con respecto a una condición (o un conjunto de condiciones) que no coincide en la segunda tabla. Aquí tienes un diagrama para que lo entiendas visualmente -

Esquemas semiunión y antiunión

La consulta para realizar la Semi Join sería -

select id, name
from student_name
where id IN
(select id from student_stream where stream
IN ('CS', 'IT', 'ECE'));

Del mismo modo, la consulta que realiza Anti Join, en este caso, sería -

select id, name
from student_name
where id NOT IN
(select id from student_stream where stream
IN ('CS', 'IT', 'ECE'));

Observa el uso de NOT en la consulta anterior.

Lleva tu destreza con las uniones SQL al siguiente nivel

Eso es todo por este tutorial. En este tutorial has estudiado un montón de tipos diferentes de Uniones SQL y también te has familiarizado con sus sintaxis PostgreSQL. Si quieres practicar algunos ejercicios desafiantes de Unir datos en SQL, deberías seguir el curso Unir datos en SQL de DataCamp. De hecho, se utilizaron materiales del curso como referencia para hacer este tutorial.

Hazme llegar tus preguntas en la sección Comments.

Temas

Cursos de SQL

Certificación disponible

Course

Unir datos en SQL

4 hr
132.9K
Aumenta tus conocimientos de SQL y aprende a unir tablas, aplicar la teoría de conjuntos relacionales y trabajar con subconsultas.
See DetailsRight Arrow
Start Course
Certificación disponible

Course

SQL intermedio

4 hr
210.9K
Acompañado en cada paso con consultas prácticas, este curso te enseña todo lo que necesitas saber para analizar datos utilizando tu propio código SQL ¡hoy mismo!
Ver másRight Arrow