Bojan Petrovic

Introducción y descripción general de “SQL JOIN”

May 12, 2019 by

La sentencia del “SQL JOIN” se coloca dentro de una sentencia Select y al final se le da una condición de unión, que le indica a la base de datos cómo obtener tus datos. La columna especificada dentro de la condición de unión debe ser precedida por un nombre de la tabla si el nombre de la columna es el mismo en ambas tablas. Cuando una columna va precedida de un nombre de la tabla, se conoce como una columna calificada.

Dicho de otro modo, unirse es el proceso de poder tomar múltiples datos de varias tablas y colocarlos en un conjunto de resultados generados. El artículo será muy básico y se espera que sea fácil poder seguir ya que el objetivo aquí es poder comprender completamente la idea del “SQL JOIN”.

Las uniones puede resultar ser un tema muy complejo, y algunos las encuentran confusas y difíciles. Por ese motivo, veamos el concepto de poder recuperar datos de varias tablas en lugar de simplemente sumergirse en todos los diversos tipos de uniones. Es muy posible que algunos ni siquiera sepan qué es la unión o quizás hayan estado escribiendo consultas relacionadas con una sola tabla. Sin embargo, ahora necesitas la información de más de una tabla. De cualquier forma, estás en el lugar correcto. Entonces, gracias por unirte a nosotros (vea lo que hicimos allí) y comencemos.

Los datos se pueden estructurar en una base de datos de una manera confusa y no fácil de usar, y básicamente utilizamos el “SQL JOIN” para presentarlas en el sentido contrario. Ahora, esto se hace de una manera, para que podamos almacenar nuestros datos en una base de datos que sea la mejor estructurada para proteger la integridad de nuestros datos y este normalizado, separándolos en tablas con las relaciones adecuadas, tipos de datos, claves, índices, etc. Cuando realmente queremos generar esos datos, por ejemplo, En una página web, en una aplicación o en otra persona, necesitamos que los resultados estén organizados y estructurados, así tiene sentido para nosotros. Ese es un propósito del “SQL JOIN”, toma un desorden y lo pone de una manera que se ve organizada y bella esto se puede hacer sobre múltiples tablas.

Por ejemplo, supongamos que tenemos tres tablas diferentes con relaciones entre ellas:

No se necesita la información específica sobre qué tipo de tablas, datos estamos tratando, pero en esencia, el “SQL JOIN” tomará todo eso (Tabla 1, Tabla 2, Tabla 3) y presentará una tabla generada que está mejor estructurada y con mejor apariencia, fácil de usar y que logra tener más sentido para nosotros.

Ahora, la manera en la que se realiza esto es a través del uso de conexiones externas de clave primaria. De forma que, estas tablas tendrán relación entre ellas, tal como se muestra a continuación, esto se conoce como una conexión de clave foránea que hace referencia a una clave principal:

Dicho de otra manera, una de estas tablas es la tabla principal y otra es la tabla secundaria y queremos que el resultado final combine ambas en una tabla generada como se muestra arriba.

La relación utilizada dentro de la condición de un “SQL JOIN” a menudo se define en la base de datos (por lo general, la clave foránea y la conexión de clave primaria) pero no necesariamente tiene que ser así. Si no está ya en la base de datos, se conoce como una relación ad hoc.

Nótese que cuando hagamos esto, las columnas que están conectadas se indexarán de modo que la unión de datos sea más veloz. Este es sin embargo otro tema complejo y le recomendamos revisar los artículos a continuación que se asocian con índices que aceleran la recuperación de filas de la tabla o vista

Siguiendo con el tema, cuando se hace la unión entre tablas es una práctica común reemplazar los nombres de las columnas con nombres más sencillos de usar. Para dar un ejemplo, digamos que se tiene un comentario en un sitio web que dice “¡Este artículo es sorprendente!”, Y lo publicó un lector denominado “Michael”:

El nombre de usuario en un sitio web es con mucha probabilidad un ID de usuario que se almacena en una tabla de comentarios. Por tanto, digamos que se tienen dos tablas: tabla de Usuarios y tabla de Comentarios y existe una clave externa de la ID de Usuario que hace referencia a la ID de Usuario en la tabla de Usuarios:

Bueno, al presentar esos datos en una base de datos, quisiéramos reemplazar esa ID de usuario con el nombre de usuario real. Caso contrario, podríamos terminar con un usuario que se llame “4523” y nadie podría saber quién es. Dado que toda esta información se encuentra dentro de la tabla de Comentarios, solo es posible tomar la información de la tabla de Usuarios y colocar ese nombre de usuario en lugar de la ID de usuario.

Es así la forma en que funciona “SQL Join” de manera conceptual. Se tiene que pensar conceptualmente ya que es importante comprender que este artículo solo debería ayudarte a ti a poder comprender los conceptos de un tipo diferente de “SQL Join”. Es por ese motivo que obtuvimos estos ejemplos artificiales en vez de escribir consultas reales. Además, las uniones se pueden realizar de manera diferente desde un sistema de administración de bases de datos a otro sistema de administración de bases de datos. Todo lo que se requiere saber es cómo funcionan las uniones y cuáles son los resultados esperados. Una vez hecho esto, cuando empiece a trabajar con MySQL, SQL Server, la base de datos de Oracle, etc., con suerte podrá descubrir la forma en que se hacen las uniones. Finalmente, lo más importante cuando se trata de uniones es saber de antemano cuáles serán los resultados, porque si entiendes las uniones, ya las podrás escribir adecuadamente.

Tome en cuenta que todo esto es un lenguaje de manipulación de datos (DML). Este lenguaje es diferente que lenguaje de definición de datos o del lenguaje de descripción de datos (DDL). Estas son dos partes importantes referentes al concepto de SQL y cuando se trata de uniones SQL, es importante saber que ya tenemos la definición de una base de datos. Esto simplemente significa que la base de datos ya puede haber sido diseñada y estructurada con la columna y las filas, pero ahora, estamos manipulando esos datos para que se vean de cierta manera. Por lo tanto, al consultar los datos mediante join, no se está cambiando realmente la estructura de la base de datos en sí. Estás solamente cambiando la presentación de esa base de datos.

Unir datos mediante join de varias tablas depende mucho del diseño de la base de datos. Una base de datos puede ser estructurada para que tenga un diseño amigable, pero en realidad no funciona ya que no está normalizada, existen datos que se repiten, etc. Un ejemplo simple es una tabla llamada “Comentarios”:

Supongamos que dentro de esta tabla se tienen tres comentarios por el nombre de usuario “Michael”.

Si le muestra esto a alguien que no está familiarizado con las bases de datos, él o ella probablemente dirá que el usuario Michael publicó un comentario “¡Este artículo es increíble!”. El mismo usuario llega a publicar otro comentario y así sucesivamente. Sin embargo, esta no es la mejor manera de poder almacenar los datos debido a la integridad de los datos y también a repetir los datos que mencionamos anteriormente. En el presente ejemplo ficticio, se tiene el mismo nombre de usuario tres veces. La mejor forma de resolver esto sería usar un ID de usuario y deshacerse del “Nombre de usuario” y “Michael” y tener algo similar a lo que se ve en el siguiente gráfico, esto para que podamos aplicar la lógica de “SQL JOIN”:

Aquí simplemente se tiene una tabla de Usuarios con la columna “UserID” que tiene todas nuestras ID de usuario para cada persona individual. De esta forma comenzamos con este diseño amigable, pero en realidad, no funciona debido a que no está normalizado, hay datos que se repiten, etc. La única desventaja en este caso es que se ve bonito a primera vista. Una vez que tengamos eso, podemos dividirlo y normalizarlo de tal manera que tengamos dos tablas.

Lo que hay que hacer después es tomar esas piezas del rompecabezas y volver a juntarlas en un “SQL JOIN” para poder obtener el resultado final. En esencia, lo que queremos hacer es replicar la tabla original que teníamos anteriormente, mediante el uso de joins de nuestra base de datos normalizada y recrearla. Este ID de usuario “12” en la tabla de “Comentarios” se conectará con el ID de usuario 12 en la tabla “Usuarios” que se asocia con el nombre “Michael”.

Existen diferentes tipos de “SQL JOIN” como: INNER JOINS, OUTER JOINS, CROSS JOINS, etc., y le recomendamos encarecidamente que consulte los artículos detallados a continuación que cubren no solo los aspectos básicos, sino que también muestran ejemplos reales de recuperación de datos:


Bojan Petrovic
T-SQL

Acerca de Bojan Petrovic

Bojan aka “Boksi”, an AP graduate in IT Technology focused on Networks and electronic technology from the Copenhagen School of Design and Technology, is a software analyst with experience in quality assurance, software support, product evangelism, and user engagement. He has written extensively on both the SQL Shack and the ApexSQL Solution Center, on topics ranging from client technologies like 4K resolution and theming, error handling to index strategies, and performance monitoring. Bojan works at ApexSQL in Nis, Serbia as an integral part of the team focusing on designing, developing, and testing the next generation of database tools including MySQL and SQL Server, and both stand-alone tools and integrations into Visual Studio, SSMS, and VSCode. View all posts by Bojan Petrovic

168 Views