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 -
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 -
Ahora vamos a insertar algunos registros en las tablas.
Para nombre_alumno -
INSERTINTO student_name(id, name)VALUES(1,'Sayak');INSERTINTO student_name(id, name)VALUES(2,'Alex');INSERTINTO student_name(id, name)VALUES(3,'Sameer');INSERTINTO student_name(id, name)VALUES(4,'Rick');Con la tecnología de
Para corriente_estudiante -
INSERTINTO student_stream(id, stream)VALUES(1,'CS');INSERTINTO student_stream(id, stream)VALUES(1,'IT');INSERTINTO student_stream(id, stream)VALUES(2,'ECE');INSERTINTO student_stream(id, stream)VALUES(9,'ECE');Con la tecnología de
Las entradas de la tabla deberían ser como las siguientes en caso de que hayas ejecutado las consultas anteriores sin cambiar nada -
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 -
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
INNERJOIN student_stream AS s2
ON s1.id = s2.id;Con la tecnología de
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
INNERJOIN student_stream AS s2
USING(id);Con la tecnología de
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 -
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 -
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
LEFTJOIN student_stream AS s2
ON s1.id = s2.id;Con la tecnología de
RIGHT JOIN o Right Outer JOIN : RIGHT JOIN es exactamente lo contrario de LEFT JOIN -
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
RIGHTJOIN student_stream AS s2
ON s1.id = s2.id;Con la tecnología de
FULL JOIN o FULL Outer JOIN: FULL JOIN te permite combinar LEFT JOIN y RIGHT JOIN en una única compilación -
La consulta correspondiente sería -
SELECT s1.id, s1.name, s2.stream
FROM student_name AS s1
FULLJOIN student_stream AS s2
ON s1.id = s2.id;Con la tecnología de
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 -
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
CROSSJOIN student_stream AS s2;Con la tecnología de
Y obtienes el siguiente resultado -
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:
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 -
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'));Con la tecnología de
Del mismo modo, la consulta que realiza Anti Join, en este caso, sería -
select id, name
from student_name
where id NOTIN(select id from student_stream where stream
IN('CS','IT','ECE'));Con la tecnología de
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.
Si quiere iniciarse en SQL, nosotros le ayudamos. En este tutorial de SQL, le presentaremos las consultas SQL, una potente herramienta que nos permite trabajar con los datos almacenados en una base de datos. Verá cómo escribir consultas SQL, aprenderá sobre
Explora cómo el uso de un alias SQL simplifica tanto los nombres de las columnas como los de las tablas. Aprende por qué utilizar un alias SQL es clave para mejorar la legibilidad y gestionar uniones complejas.
Aprende a seleccionar fácilmente varias columnas de una tabla de base de datos en SQL, o a seleccionar todas las columnas de una tabla en una simple consulta.
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
pgAdminque generalmente viene con la instalación de PostgreSQL. AbramospgAdminy 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 -Observa que ambas tablas tienen en común la columna
id. Puedes utilizar las siguientes sentenciasCREATEpara crear las tablas -Ahora vamos a insertar algunos registros en las tablas.
Las entradas de la tabla deberían ser como las siguientes en caso de que hayas ejecutado las consultas anteriores sin cambiar nada -
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 -
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-En el ejemplo anterior, la columna considerada es la columna
id.INNER JOINignorará el resto de columnas cuyos valores no sean comunes en ambas tablas. Ahora vamos a ejecutar una consulta en PostgreSQL que realizaríaINNER JOINentre las dos tablas: nombre_alumno y flujo_alumno.Al ejecutar la siguiente consulta, obtendrás el resultado que se muestra en la figura anterior -
s1ys2son los alias de las dos tablas. Has utilizado la palabra claveONjunto conINNER JOIN. La consulta también puede ejecutarse utilizando la palabra claveUSING-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 -
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 -
OUTER JOIN
OUTER JOINpueden dividirse a su vez en tres tipos -JOIN IZQUIERDO o JOIN exterior izquierdo: El siguiente diagrama te da una idea aproximada de
LEFT JOINen SQL -Ten en cuenta que, a diferencia de
INNER JOIN,LEFT JOINte 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 queSameeryRickno se han inscrito en ninguna corriente. La consulta correspondiente será -RIGHT JOIN o Right Outer JOIN :
RIGHT JOINes exactamente lo contrario deLEFT JOIN-RIGHT JOINpuede ayudarte a encontrar la(s) corriente(s) en la(s) que no se ha matriculado ningún estudiante. La consulta para esto sería -FULL JOIN o FULL Outer JOIN:
FULL JOINte permite combinarLEFT JOINyRIGHT JOINen una única compilación -La consulta correspondiente sería -
Ten en cuenta que puedes ejecutar todas las consultas anteriores de
OUTER JOINutilizando la palabra claveUSING. Estudiemos ahoraCROSS JOIN.CROSS JOIN
CROSS JOINes 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ásCROSS JOINpara hacerlo. La siguiente figura presenta visualmente este concepto -Ya tienes dos tablas para probarlo. Para disponer de todas las combinaciones posibles entre las columnas
idde las tablasstudent_nameystudent_stream, puedes ejecutar la siguiente consulta -Y obtienes el siguiente resultado -
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:
Semi JoinLas 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 Joinlas consultas son exactamente lo contrario. EnAnti 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 -La consulta para realizar la
Semi Joinsería -Del mismo modo, la consulta que realiza
Anti Join, en este caso, sería -Observa el uso de
NOTen 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.