Subido por Marvin peña

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

Anuncio
23/6/2021
Introducción y resumen de la cláusula de “SQL JOIN”
SQLShack
SQL Server training
English

Introducción y resumen de la cláusula de “SQL
JOIN”
May 12, 2019 by Bojan Petrovic
La sentencia del “SQL JOIN” es uno de los componentes principales de la sentencia Select, que se uti‐
liza para extraer datos del “SQL Server”.
La palabra “Select” inicia la sentencia. A menudo es seguido por un asterisco (*) “AKA splat” como al‐
gunos lo llaman DBA.
Nota: para expandir automáticamente los comodines a las columnas explícitas, consulte How to
prevent performance problems and errors due to wildcards in SELECT statements
Esto solo significa retornar a todas las columnas. Si tenemos varias tablas, un Select asterisco captu‐
rará 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é ta‐
bla 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 estable‐
cerá 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
https://www.sqlshack.com/es/introduccion-y-resumen-de-la-clausula-de-sql-join/
1/9
23/6/2021
Introducción y resumen de la cláusula de “SQL JOIN”
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:
https://www.sqlshack.com/es/introduccion-y-resumen-de-la-clausula-de-sql-join/
2/9
23/6/2021
Introducción y resumen de la cláusula de “SQL JOIN”
USE AdventureWorks2012;
GO
SELECT p.Name AS ProductName,
NonDiscountSales = (OrderQty * UnitPrice),
Discounts = ((OrderQty * UnitPrice) * UnitPriceDiscount)
FROM Production.Product AS p
JOIN Sales.SalesOrderDetail AS sod
ON p.ProductID = sod.ProductID
ORDER BY ProductName DESC;
GO
Tome en cuenta que, si solo se especifica JOIN por sí mismo, sin una palabra clave interna en la sen‐
tencia de “SQL JOIN”, seguirá siendo un INNER JOIN. Por supuesto, puede poner la palabra clave “in‐
ner” para mayor claridad, pero si no hay una combinación de etiqueta izquierda / derecha, se estable‐
cerá 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:
SELECT *
FROM Person.Person p
LEFT JOIN Sales.PersonCreditCard pcc ON p.BusinessEntityID = pcc.BusinessEntityID
El left join devuelve todos los registros, incluso si no existen, y pone un valor Nulo si no existe:
https://www.sqlshack.com/es/introduccion-y-resumen-de-la-clausula-de-sql-join/
3/9
23/6/2021
Introducción y resumen de la cláusula de “SQL JOIN”
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 va‐
lores nulos porque esas personas no tienen información de la tarjeta de crédito:
SELECT *
FROM Person.Person p
LEFT JOIN Sales.PersonCreditCard pcc ON p.BusinessEntityID = pcc.BusinessEntityID
JOIN Sales.CreditCard cc ON pcc.CreditCardID = cc.CreditCardID;
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
https://www.sqlshack.com/es/introduccion-y-resumen-de-la-clausula-de-sql-join/
4/9
23/6/2021
Introducción y resumen de la cláusula de “SQL JOIN”
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:
SELECT *
FROM Person.Person p
LEFT JOIN Sales.PersonCreditCard pcc ON p.BusinessEntityID = pcc.BusinessEntityID
LEFT JOIN Sales.CreditCard cc ON pcc.CreditCardID = cc.CreditCardID;
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 ex‐
pandir aún más la sentencia “SQL Join” y buscar valores nulos con una cláusula Where:
SELECT *
FROM Person.Person p
LEFT JOIN Sales.PersonCreditCard pcc ON p.BusinessEntityID = pcc.BusinessEntityID
LEFT JOIN Sales.CreditCard cc ON pcc.CreditCardID = cc.CreditCardID
WHERE pcc.BusinessEntityID IS NULL;
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 per‐
https://www.sqlshack.com/es/introduccion-y-resumen-de-la-clausula-de-sql-join/
5/9
23/6/2021
Introducción y resumen de la cláusula de “SQL JOIN”
diendo / 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 ra‐
zones 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 pro‐
bable 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 ti‐
pos 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
4. 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 senten‐
cia 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,
i
i
id
l
lid d d
i t i d SQL JOIN
https://www.sqlshack.com/es/introduccion-y-resumen-de-la-clausula-de-sql-join/
i
b
P
l t
t
l
6/9
Descargar