Operaciones de conjuntos
Las operaciones de conjuntos en SQL se utilizan para combinar los resultados de dos o más consultas en un solo conjunto de resultados. Las operaciones de conjuntos más comunes son UNION, UNION ALL, INTERSECT y EXCEPT.
En Microsoft SQL Server, las operaciones de conjuntos se pueden realizar utilizando las cláusulas UNION, UNION ALL, INTERSECT y EXCEPT. Cada una de estas cláusulas tiene un propósito específico y se utiliza para combinar los resultados de las consultas de diferentes maneras.
Las siguientes tablas se utilizarán para facilitar la comprensión de las operaciones de conjuntos:
Tabla Employees
| EmployeeID | LastName | FirstName |
|---|---|---|
| 1 | Davolio | Nancy |
| 2 | Fuller | Andrew |
| 3 | Leverling | Janet |
| 4 | Peacock | Margaret |
Tabla Orders
| OrderID | OrderDate | EmployeeID |
|---|---|---|
| 10248 | 1996-07-04 | 1 |
| 10249 | 1996-07-05 | 2 |
| 10250 | 1996-07-08 | 3 |
| 10251 | 1996-07-08 | 3 |
Operaciones de conjuntos
UNION
La cláusula UNION se utiliza para combinar los resultados de dos o más consultas en un solo conjunto de resultados. La cláusula UNION elimina automáticamente los duplicados del conjunto de resultados combinado.
La sintaxis básica de la cláusula UNION es la siguiente:
SELECT column1, column2, ...FROM table1UNIONSELECT column1, column2, ...FROM table2;Por ejemplo, para combinar los resultados de las tablas Employees y Orders, se puede utilizar la siguiente consulta:
SELECT EmployeeID, LastName, FirstNameFROM EmployeesUNIONSELECT EmployeeID, NULL AS LastName, NULL AS FirstNameFROM Orders;En esta consulta, estamos seleccionando los campos EmployeeID, LastName y FirstName de la tabla Employees y combinándolos con los campos EmployeeID, NULL como LastName y NULL como FirstName de la tabla Orders.
Donde tenemos como resultado la siguiente tabla:
| EmployeeID | LastName | FirstName |
|---|---|---|
| 1 | Davolio | Nancy |
| 2 | Fuller | Andrew |
| 3 | Leverling | Janet |
| 4 | Peacock | Margaret |
| NULL | NULL | NULL |
UNION ALL
La cláusula UNION ALL se utiliza para combinar los resultados de dos o más consultas en un solo conjunto de resultados. A diferencia de la cláusula UNION, la cláusula UNION ALL no elimina los duplicados del conjunto de resultados combinado.
La sintaxis básica de la cláusula UNION ALL es la siguiente:
SELECT column1, column2, ...FROM table1UNION ALLSELECT column1, column2, ...FROM table2;Por ejemplo, para combinar los resultados de las tablas Employees y Orders utilizando la cláusula UNION ALL, se puede utilizar la siguiente consulta:
SELECT EmployeeID, LastName, FirstNameFROM EmployeesUNION ALLSELECT EmployeeID, NULL AS LastName, NULL AS FirstNameFROM Orders;En esta consulta, estamos seleccionando los campos EmployeeID, LastName y FirstName de la tabla Employees y combinándolos con los campos EmployeeID, NULL como LastName y NULL como FirstName de la tabla Orders.
Donde tenemos como resultado la siguiente tabla:
| EmployeeID | LastName | FirstName |
|---|---|---|
| 1 | Davolio | Nancy |
| 2 | Fuller | Andrew |
| 3 | Leverling | Janet |
| 4 | Peacock | Margaret |
| 1 | NULL | NULL |
| 2 | NULL | NULL |
| 3 | NULL | NULL |
| 3 | NULL | NULL |
INTERSECT
La cláusula INTERSECT se utiliza para combinar los resultados de dos o más consultas y devolver solo los registros que se encuentran en todos los conjuntos de resultados.
La sintaxis básica de la cláusula INTERSECT es la siguiente:
SELECT column1, column2, ...FROM table1INTERSECTSELECT column1, column2, ...FROM table2;Por ejemplo, para encontrar los empleados que también tienen pedidos en la tabla Orders, se puede utilizar la siguiente consulta:
SELECT EmployeeID, LastName, FirstNameFROM EmployeesINTERSECTSELECT EmployeeID, NULL AS LastName, NULL AS FirstNameFROM Orders;En esta consulta, estamos seleccionando los campos EmployeeID, LastName y FirstName de la tabla Employees y combinándolos con los campos EmployeeID, NULL como LastName y NULL como FirstName de la tabla Orders.
Donde tenemos como resultado la siguiente tabla:
| EmployeeID | LastName | FirstName |
|---|---|---|
| 1 | Davolio | Nancy |
| 2 | Fuller | Andrew |
| 3 | Leverling | Janet |
EXCEPT
La cláusula EXCEPT se utiliza para combinar los resultados de dos o más consultas y devolver solo los registros que se encuentran en el primer conjunto de resultados pero no en el segundo conjunto de resultados.
La sintaxis básica de la cláusula EXCEPT es la siguiente:
SELECT column1, column2, ...FROM table1EXCEPTSELECT column1, column2, ...FROM table2;Por ejemplo, para encontrar los empleados que no tienen pedidos en la tabla Orders, se puede utilizar la siguiente consulta:
SELECT EmployeeID, LastName, FirstNameFROM EmployeesEXCEPTSELECT EmployeeID, NULL AS LastName, NULL AS FirstNameFROM Orders;En esta consulta, estamos seleccionando los campos EmployeeID, LastName y FirstName de la tabla Employees y combinándolos con los campos EmployeeID, NULL como LastName y NULL como FirstName de la tabla Orders.
Donde tenemos como resultado la siguiente tabla:
| EmployeeID | LastName | FirstName |
|---|---|---|
| 4 | Peacock | Margaret |
| 1 | Davolio | Nancy |
| 2 | Fuller | Andrew |