Bojan Petrovic

Introducción y resumen de la cláusula de “SQL JOIN”

May 12, 2019 by

La sentencia del “SQL JOIN” es uno de los componentes principales de la sentencia Select, que se utiliza para extraer datos del “SQL Server”.

La palabra “Select” inicia la sentencia. A menudo es seguido por un asterisco (*) “AKA splat” como algunos lo llaman DBA.

Esto solo significa retornar a todas las columnas. Si tenemos varias tablas, un Select asterisco capturará todas las columnas de todas las tablas, por ejemplo, unir varias tablas usando la sentencia de “SQL JOIN”, que es el tema principal de este artículo.

Empezaremos con la definición. Join es el proceso de tomar datos de varias tablas y colocarlos en una vista generada. Por tanto, una instrucción de “SQL JOIN” en un comando Select combina las columnas entre una o más tablas en una base de datos relacional y retorna a un conjunto de datos.

“El FROM” también es parte esencial de la instrucción Select y es aquí donde se especifica de qué tabla estamos extrayendo los datos. La parte de join es donde queremos unir datos de varias tablas y tenemos tres tipos diferentes de combinaciones:

  • Inner join – esta es la opción predeterminada. Si no se especifica el tipo de unión, se establecerá de manera predeterminada como la unión interna. Esto implica que si estamos uniendo dos tablas en una columna común, solo retornaran los datos que coincidan en ambas tablas

  • Left join – este tipo de unión significa que solo retornan todos los datos de la tabla de la mano izquierda, solo si los datos coinciden con la tabla de la mano derecha

  • Right join – este tipo de unión es el caso opuesto al anterior. Implica que solo retornaran los datos de la tabla de la mano derecha, solo si los datos coinciden con la tabla de la mano izquierda

Select usando Inner Join

Vayamos hasta SQL Server Management Studio (SSMS) y verifiquemos cómo se puede trabajar con la instrucción de “SQL JOIN” utilizando ejemplos del mundo real. A continuación, mostramos un ejemplo de cómo unir tablas en una columna común. En nuestra base de datos de ejemplo AdventureWorks2012, tenemos la tabla “Producto” que tiene una columna “ProductID” y en la tabla “SalesOrderDetail”, también se tiene una columna “ProductID”. Entonces, si deseamos averiguar las ventas totales y los descuentos para cada producto y sacar el nombre, debemos unir estos dos en esta columna común:

Tome en cuenta que, si solo se especifica JOIN por sí mismo, sin una palabra clave interna en la sentencia de “SQL JOIN”, seguirá siendo un INNER JOIN. Por supuesto, puede poner la palabra clave “inner” para mayor claridad, pero si no hay una combinación de etiqueta izquierda / derecha, se establecerá por defecto una combinación interna:

Select usando LEFT JOIN

Ahora, démosle un vistazo al LEFT OURTER JOIN que nos ofrece todo desde la tabla de la izquierda y solo los registros que coinciden en la tabla de la derecha. En nuestro ejemplo, la siguiente consulta nos dará algunas personas que no han realizado ninguna compra:

El left join devuelve todos los registros, incluso si no existen, y pone un valor Nulo si no existe:

El conjunto de resultados indica que retornaron 19972 registros, y se tiene un grupo de valores nulos en la columna “BusinessEntityID”. Las filas que tienen nulos son personas que no realizaron ninguna compra.

Se puede extender de la consulta anterior y agregar otra sentencia de “SQL JOIN” para poder incluir a las personas con la información de la tarjeta de crédito. Tome en cuenta que se acaba de especificar la palabra clave Join, que es una combinación interna de forma predeterminada y eliminará todos los valores nulos porque esas personas no tienen información de la tarjeta de crédito:

Esta vez, la consulta hace retornar 19118 registros en lugar de 19972 anteriores:

De esta forma es como “SQL Join” con “Left tag” puede ayudarnos. Si deseamos incluir los registros y contar con el recuento completo de personas, incluso si ellas no han realizado compras, simplemente se unen a la segunda cláusula:

Se puede ver que todos los que no han hecho una compra tienen un registro nulo para la tabla de “Tarjeta de crédito” y la tabla de “Tarjeta de crédito de persona” desde que nos fuimos con ellos:

Adicionalmente, se puede elegir a todas aquellas personas que no han realizado una compra al expandir aún más la sentencia “SQL Join” y buscar valores nulos con una cláusula Where:

Si se ejecuta esto, se obtienen 854 registros o como se mencionó anteriormente, todos aquellos que no hayan realizado una compra:

Por tanto, este fue un ejemplo de un LEFT JOIN utilizado para crear una hoja de ventas en la que se desea ver absolutamente cada compra, ya se tenga alguna compra o no, pero siempre quisimos que se mostraran los registros. La diferencia clave entre INNER JOIN y LEFT JOIN es que no estamos perdiendo / omitiendo registros.

Select usando Right Join

Ahora, la cláusula RIGHT JOIN es exactamente lo opuesto a LEFT JOIN. Básicamente hacen lo mismo. La izquierda es derecha y la derecha es izquierda y se puede obtener el mismo efecto simplemente cambiando las tablas. Los RIGHT JOIN no están en omitidas, simplemente no son tan comunes. Por razones de consistencia, es una práctica común utilizar LEFT JOIN en lugar de uniones derechas.

Conclusión y prácticas comunes

Se han cubierto las tres uniones principales: inner, left y right join. Esos tres JOIN son los que se usan con mayor frecuencia. Incluso si tú eres un novato en el mundo de la base de datos, es altamente probable que hayas encontrado bastante diferentes tipos de SQL JOIN.

Además de esto, también verás tipos de combinaciones Externas y Cruzadas. La Outer join tiene 3 tipos diferentes:

  1. Left outer join – recupera registros si están presentes en la tabla izquierda
  2. Right outer join – recupera registros si están presentes en la tabla derecha
  3. Full outer join – recupera registros si están presentes en cualquiera de las dos tablas

  1. Cross join – como indica su nombre, hace [n X m] donde se una todo combinado con todo. Es un escenario donde simplemente listamos las tablas para unir (en la cláusula From de la sentencia Select), usando comas para separarlas

Puntos a tener en cuenta:

    Si solo se especifica Join, entonces por defecto es una Inner join
  • Un Outer join debe ser LEFT / RIGHT / FULL. No puedes simplemente decir Outer join y dejarlo de esa forma solamente
  • Puede eliminar la palabra clave Outer y simplemente decir say Left join, Right join o Full join

Espero que el uso de los diagramas de Venn para poder explicar los diferentes tipos de Join sea útil, pero no siempre coinciden con la realidad de sintaxis de SQL JOIN en mis pruebas. Por lo tanto, le sugiero que no confíe en por completo y que experimente escribiendo las consultas y comparando los resultados.

Espero que este artículo haya sido lo suficientemente informativo para ustedes y les agradezco la lectura.


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