sábado, 2 de julio de 2016

Receta T-SQL No. 4-12: ¿Cómo Usar el Operador de Diferencia EXCEPT en T-SQL?

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Operador EXCEPT
6. Práctica: Recuperar Productos que no son Componentes de Otros
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

En aplicaciones particulares puede resultar de interés comparar dos conjuntos de resultados y recuperar sólo aquellos resultados que pertenecen a uno de los conjuntos; es decir su diferencia. Esta receta T-SQL explica cómo usar el operador EXCEPT para sustraer uno o más registros de un conjunto en relación a otro.

2. Palabras Clave

  • Diferencia
  • EXCEPT
  • T-SQL
  • Teoría de conjuntos

3. Problema

Mostrar el conjunto de resultados de los ID de productos que no son componentes de otros productos.

4. Solución

En T-SQL se cuenta con el operador EXCEPT para efectuar la operación de diferencia de conjuntos en el álgebra o cálculo relacional.

5. Discusión de la Solución

5.1 Operador EXCEPT

El operador EXCEPT efectúa la operación de diferencia entre dos conjuntos de resultados: sólo recupera los registros que no están en el segundo conjunto.
Diferencia de conjuntos
Figura 1. Diferencia de conjuntos.
La Figura 1 muestra la operación de diferencia en teoría de conjuntos. El operador EXCEPT efectúa esta misma operación con conjuntos de registros o filas de tablas o de expresiones que retornan una estructura compatible.

En T-SQL su sintaxis de uso sigue este esquema: 

{ expresión_1 }   
EXCEPT  
{ expresion_2 }

Cada una de las expresiones -expresión_1 y expresion_2- representa una sentencia o expresión de recuperación de registros.

Esta sentencia T-SQL sólo retorna los registros de la expresión SELECT de la izquierda que no se hallan en la segunda expresión -derecha- del operador EXCEPT:

SELECT ProductID
    FROM Production.Product
EXCEPT
SELECT ProductID
    FROM Production.WorkOrder;

Adicionalmente, los argumentos (expresiones) deben cumplir los siguientes requisitos ("EXCEPT and INTERSECT", 2016)
  • Los tipos de datos de la proyección deben ser compatibles.
  • El número y el orden de las columnas debe ser el mismo para todas las expresiones.

6. Práctica: Recuperar Productos que no son Componentes de Otros

Este ejemplo ilustra el uso del operador EXCEPT por medio de la obtención de los IDs de productos que no forman parte de otro producto.

SELECT P.ProductID
FROM Production.Product P
EXCEPT
SELECT BOM.ComponentID
FROM Production.BillOfMaterials BOM;


La primera sentencia SELECT obtiene los IDs de los productos de la tabla Product. Por otra parte, con la segunda sentencia SELECT los IDs de los productos que son parte integral de uno compuesto.


Este el resultado de la ejecución de esta sentencia en Microsoft SQL Management Studio
Productos que no forman parte de uno compuesto
Figura 2. Productos que no forman parte de uno compuesto.

7. Conclusiones

Se ha comprendido que EXCEPT permite computar la diferencia entre dos conjuntos de resultados (filas). Se demostró esto con la obtención de los productos que no forman parte integral de un producto compuesto.

La próxima receta T-SQL estará enfocada en enseñar cómo encontrar las filas comunes entre dos conjuntos de filas, es decir su intersección.

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.
EXCEPT and INTERSECT (Transact-SQL) (2016, julio 2). Recuperado desde: https://msdn.microsoft.com/en-us/library/ms188055.aspx


V

No hay comentarios:

Publicar un comentario

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