Combinaciones
Las combinaciones en SQL son una forma de combinar filas de dos o más tablas basadas en una relación entre una o más columnas de las tablas. Las combinaciones se utilizan para recuperar datos de varias tablas en una sola consulta.
En Microsoft SQL Server, las combinaciones se pueden realizar utilizando la cláusula JOIN en una consulta SELECT. Hay varios tipos de combinaciones, incluidas las combinaciones internas, las combinaciones externas y las combinaciones cruzadas.
Supongamos contamos con las siguientes tablas el cual estaremos manejando para realizar las combinaciones:
Tabla Employees
| EmployeeID | LastName | FirstName | Title | TitleOfCourtesy | BirthDate | HireDate | Address | City | Region | PostalCode | Country | HomePhone | Extension | Photo | Notes | ReportsTo | PhotoPath |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Davolio | Nancy | Sales Representative | Ms. | 1948-12-08 | 1992-05-01 | 507 - 20th Ave. E. Apt. 2A | Seattle | WA | 98122 | USA | (206) 555-9857 | 5467 | Education includes a BA. | 2 | http://accweb/emmployees/davolio.bmp | |
| 2 | Fuller | Andrew | Vice President | Dr. | 1952-02-19 | 1992-08-14 | 908 W. Capital Way | Tacoma | WA | 98401 | USA | (206) 555-9482 | 3457 | Andrew received his BTS. | http://accweb/emmployees/fuller.bmp |
Tabla Orders
| OrderID | CustomerID | EmployeeID | OrderDate | RequiredDate | ShippedDate | ShipVia | Freight | ShipName | ShipAddress | ShipCity | ShipRegion | ShipPostalCode | ShipCountry |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 10248 | VINET | 5 | 1996-07-04 | 1996-08-01 | 1996-07-16 | 3 | 32.38 | Vins et alcools Chevalier | 59 rue de l’Abbaye | Reims | 51100 | France | |
| 10249 | TOMSP | 6 | 1996-07-05 | 1996-08-16 | 1996-07-10 | 1 | 11.61 | Toms Spezialitäten | Luisenstr. 48 | Münster | 44087 | Germany |
Combinaciones internas
Una combinación interna es una combinación que devuelve solo las filas que tienen una coincidencia en ambas tablas. En otras palabras, una combinación interna devuelve solo las filas que tienen un valor común en la columna que se está utilizando para combinar las tablas.
La sintaxis básica de una combinación interna es la siguiente:
SELECT column1, column2, ...FROM table1INNER JOIN table2ON table1.column_name = table2.column_name;Por ejemplo, para combinar las tablas Employees y Orders utilizando la columna EmployeeID, se puede utilizar la siguiente consulta:
SELECT Employees.LastName, Employees.FirstName, Orders.OrderID, Orders.OrderDateFROM EmployeesINNER JOIN OrdersON Employees.EmployeeID = Orders.EmployeeID;En esta consulta, estamos seleccionando los campos LastName y FirstName de la tabla Employees y los campos OrderID y OrderDate de la tabla Orders. Luego, estamos combinando las dos tablas utilizando la columna EmployeeID.
Donde tenemos como resultado la siguiente tabla:
| LastName | FirstName | OrderID | OrderDate |
|---|---|---|---|
| Davolio | Nancy | 10248 | 1996-07-04 |
Combinaciones externas
Una combinación externa es una combinación que devuelve todas las filas de una o ambas tablas, incluso si no hay una coincidencia entre las tablas. En otras palabras, una combinación externa devuelve todas las filas de las tablas que se están combinando, incluso si no hay un valor común en la columna que se está utilizando para combinar las tablas.
Hay dos tipos de combinaciones externas: la combinación externa izquierda y la combinación externa derecha.
Combinación externa izquierda
Una combinación externa izquierda devuelve todas las filas de la tabla de la izquierda y las filas de la tabla de la derecha que tienen una coincidencia en la columna que se está utilizando para combinar las tablas. Si no hay una coincidencia, la fila de la tabla de la derecha contendrá valores nulos.
La sintaxis básica de una combinación externa izquierda es la siguiente:
SELECT column1, column2, ...FROM table1LEFT JOIN table2ON table1.column_name = table2.column_name;Por ejemplo, para realizar una combinación externa izquierda entre las tablas Employees y Orders utilizando la columna EmployeeID, se puede utilizar la siguiente consulta:
SELECT Employees.LastName, Employees.FirstName, Orders.OrderID, Orders.OrderDateFROM EmployeesLEFT JOIN OrdersON Employees.EmployeeID = Orders.EmployeeID;En esta consulta, estamos seleccionando los campos LastName y FirstName de la tabla Employees y los campos OrderID y OrderDate de la tabla Orders. Luego, estamos combinando las dos tablas utilizando la columna EmployeeID.
Donde tenemos como resultado la siguiente tabla:
| LastName | FirstName | OrderID | OrderDate |
|---|---|---|---|
| Davolio | Nancy | 10248 | 1996-07-04 |
| Fuller | Andrew | NULL | NULL |
Combinación externa derecha
Una combinación externa derecha devuelve todas las filas de la tabla de la derecha y las filas de la tabla de la izquierda que tienen una coincidencia en la columna que se está utilizando para combinar las tablas. Si no hay una coincidencia, la fila de la tabla de la izquierda contendrá valores nulos.
La sintaxis básica de una combinación externa derecha es la siguiente:
SELECT column1, column2, ...FROM table1RIGHT JOIN table2ON table1.column_name = table2.column_name;Por ejemplo, para realizar una combinación externa derecha entre las tablas Employees y Orders utilizando la columna EmployeeID, se puede utilizar la siguiente consulta:
SELECT Employees.LastName, Employees.FirstName, Orders.OrderID, Orders.OrderDateFROM EmployeesRIGHT JOIN OrdersON Employees.EmployeeID = Orders.EmployeeID;En esta consulta, estamos seleccionando los campos LastName y FirstName de la tabla Employees y los campos OrderID y OrderDate de la tabla Orders. Luego, estamos combinando las dos tablas utilizando la columna EmployeeID.
Donde tenemos como resultado la siguiente tabla:
| LastName | FirstName | OrderID | OrderDate |
|---|---|---|---|
| Davolio | Nancy | 10248 | 1996-07-04 |
| NULL | NULL | 10249 | 1996-07-05 |
Combinaciones cruzadas
Una combinación cruzada es una combinación que devuelve el producto cartesiano de las tablas que se están combinando. En otras palabras, una combinación cruzada devuelve todas las combinaciones posibles de filas de las tablas que se están combinando.
La sintaxis básica de una combinación cruzada es la siguiente:
SELECT column1, column2, ...FROM table1CROSS JOIN table2;Por ejemplo, para realizar una combinación cruzada entre las tablas Employees y Orders, se puede utilizar la siguiente consulta:
SELECT Employees.LastName, Employees.FirstName, Orders.OrderID, Orders.OrderDateFROM EmployeesCROSS JOIN Orders;En esta consulta, estamos seleccionando los campos LastName y FirstName de la tabla Employees y los campos OrderID y OrderDate de la tabla Orders.
Donde tenemos como resultado la siguiente tabla:
| LastName | FirstName | OrderID | OrderDate |
|---|---|---|---|
| Davolio | Nancy | 10248 | 1996-07-04 |
| Fuller | Andrew | 10248 | 1996-07-04 |
| Davolio | Nancy | 10249 | 1996-07-05 |
| Fuller | Andrew | 10249 | 1996-07-05 |
En esta consulta, estamos obteniendo todas las combinaciones posibles de filas de las tablas Employees y Orders, lo que resulta en un producto cartesiano de las dos tablas.