miércoles, 29 de junio de 2016

Receta T-SQL No. 4-10: Combinar los Resultados de Dos o Más Sentencias SELECT

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Operador UNION ALL
6. Práctica: Combinación Cuotas Actuales e Históricas
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

A través de esta receta T-SQL el programador aprenderá a combinar los resultados de dos o más sentencias SELECT a través del uso del operador UNION ALL. Este tipo de operación puede resultar útil para combinar datos repetidos en tablas diferentes; por ejemplo cuotas de ventas a lo largo del tiempo y actuales.

2. Palabras Clave

  • Combinación
  • Registro
  • UNION
  • UNION ALL

3. Problema

Combinar los registros de dos sentencias SELECT.

4. Solución

El operador UNION ALL permite combinar registros de dos o más tablas.

5. Discusión de la Solución

5.1 Operador UNION ALL

El operador UNION ALL se usa para combinar los registros de dos o más sentencias SELECT. Esta es su sintaxis: 

SELECT expresion_1, expresion_2, ..., expresion_n
FROM tabla
[WHERE condiciones]
UNION ALL
SELECT expresion_1, expresion_2, ..., expresion_n
FROM tabla
[WHERE condiciones]

Este operador no elimina registros duplicados recuperados por cada una de las sentencias SELECT. Otro requerimiento consiste en que cada sentencia SELECT debe tener el mismo número expresiones (i.e., campos) y un tipo de dato similar.

Un ejemplo particular puede consistir en las tablas: 
Tabla Proveedores
Figura 1. Tabla Proveedores.
Tabla Órdenes
Figura 2. Tabla Órdenes.
Al ejecutar una sentencia T-SQL como esta 

SELECT id_proveedor
FROM Proveedores
UNION ALL
SELECT id_proveedor
FROM Ordenes
ORDER BY id_proveedor

se obtiene 
UNION ALL de Proveedores y Ordones
Figura 3. UNION ALL de Proveedores y Ordones.
Aquí se puede observar cómo se repite el valor 2000; esto porque está presente en ambas tablas y el operador UNION ALL no remueve registros duplicados.

6. Práctica: Combinación Cuotas Actuales e Históricas

Este ejemplo enseña cómo combinar cuotas de ventas: actuales e históricas.

La declaración del primer SELECT (líneas 1-5) especifica: 
  • Recuperación de tres valores: identidad del vendedor -desde Sales.SalesPerson-, fecha actual (nótese cómo ha sido renombrada; las funciones no generan un nombre), y la cuota de ventas.
  • La cuota de ventas debe ser mayor a 0 (línea 5).
En cuanto a la sentencia SELECT que viene a continuación del operador UNION ALL, se tiene 
  • Recuperación de valores análogos -en cuanto a número y tipos de datos- a los del primer SELECT.
  • El historial de la cuota de ventas también debe ser mayor a 0 (línea 11).
  • Aquí se consulta la tabla Sales.SalesPersonQuotaHistory.
Hay que resaltar que esta sentencia cumple los requisitos básicos para poder aplicar el operador UNION ALL:
  1. Número y tipo de datos análogos.
  2. Sentencia ORDER BY al final de la sentencia.
Es el momento de ejecutar esta sentencia en Microsoft SQL Management Studio
UNION ALL SalesPerson y SAlesPersonQuotaHistory
Figura 4. UNION ALL entre SalesPerson y SalesPersonQuotaHistory.

7. Conclusiones

Esta receta demostró cómo combinar los registros de dos tablas que contienen datos relacionados -cuotas de ventas actuales e históricos, por ejemplo- a través del operador UNION ALL.

En la próxima receta T-SQL se demostrará cómo eliminar valores duplicados en una unión de registros.

8. Literatura & Enlaces

Brimhall, J., Dye, D., Gennick, J., Roberts, A., Sheffield, W. (2012). SQL Server 2012 T-SQL Recipes - A Problem-Solution Approach. United States: Apress.
SQL: UNION ALL Operator (2015, junio 29). Recuperado desde: http://www.techonthenet.com/sql/union_all.php


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.