Cláusula UNION en Select

Cláusula UNION en consultas

  • El operador UNION permite combinar resultados de varias consultas con SELECT en un único resultado.
  • Todas las instrucciones Select deben tener la misma cantidad de campos y todos los campos deben ser datos compatibles.
  • Los nombres de los campos del conjunto de resultados son iguales a los especificados en la primera consulta.
  • Los resultados que se repiten son eliminados al hacer una combinación de select usando Union.
  • Tenga en cuenta la intercalación del servidor y de la base de datos para que SQL Server decida cuando dos datos de tipo caracter son iguales o diferentes.
  • Se puede especificar la palabra All para que los resultados repetidos no se eliminen del conjunto de resultados final.
  • Se debe especificar solamente una cláusula Order by y se escribe al final de la instrucción.
  • No es posible hacer UNION con bases de datos que tienen diferente intercalación.
  • No se puede incluir campos de tipo nText.

Ejemplos

Usando Northwind
Use Northwind
go

Ejercicio 1
Listar los productos de categoria 1 y los productos de categoría 5

Select * from Products where CategoryID = 1
union
Select * from Products where CategoryID = 5
go

La imagen muestra el conjunto de resultados. Note que se han resaltado las categorías de los productos.

Ejercicio 2
Listar los clientes de Francia (France), España (Spain) y Canada.

Select CustomerID As ‘Código’, CompanyName As ‘Cliente’,
Country As ‘País’
from Customers where Country = ‘France’
Union
Select CustomerID As ‘Código’, CompanyName As ‘Cliente’,
Country As ‘País’
from Customers where Country = ‘Spain’
union
Select CustomerID As ‘Código’, CompanyName As ‘Cliente’,
Country As ‘País’
from Customers where Country = ‘Canada’
Order by País, Cliente
go




Ejercicio 3
Listar los proveedores de que tienen mas de 3 productos registrados o los que tienen un producto. Ordenador por cantidad de productos descendentemente.

select S.SupplierID, S.CompanyName, S.ContactName,
(select count(P.ProductID)
from Products As P where P.SupplierID= S.SupplierID)
As ‘Cantidad de Productos’
from Suppliers As S
where (select count(P.ProductID)
from Products As P where P.SupplierID= S.SupplierID) > 3
union
select S.SupplierID, S.CompanyName, S.ContactName,
(select count(P.ProductID)
from Products As P where P.SupplierID= S.SupplierID)
As ‘Cantidad de Productos’
from Suppliers As S
where (select count(P.ProductID)
from Products As P where P.SupplierID= S.SupplierID) = 1
order by [Cantidad de Productos] desc
go