miércoles, 8 de junio de 2016

Receta T-SQL No. 4-8: ¿Cómo Realizar una Comprobación Frente al Resultado de una Subconsulta?

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión del Problema
5.1 Subconsulta no correlacionada
6. Práctica: Comprobación Existencia en Consulta No Correlacionada
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Esta nueva receta T-SQL presenta el mecanismo de comprobación a través de un predicado en la cláusula WHERE en el que se incluye resultado devuelto por una subconsulta no correlacionada.

2. Palabras Clave

  • Predicado
  • Subconsulta
  • Subconsulta no correlacionada

3. Problema

Comprobar un valor de una consulta exterior contra un valor devuelto por una subconsulta en un predicado de la cláusula WHERE.

4. Solución

En una cláusula WHERE se puede comparar el valor de un campo de la consulta exterior frente a único valor devuelto por una subconsulta. Esta subconsulta recibe el nombre de subconsulta no correlacionada.

5. Discusión de la Solución

5.1 Subconsulta no correlacionada

Una subconsulta no correlacionada no depende de valores de una consulta exterior (como sí ocurre con una subconsulta correlacionada -Receta T-SQL No. 4-7: ¿Cómo Comprobar la Existencia de un Registro?-).

Como ejemplo de este tipo de subconsulta se podría tener 

SELECT Name AS 'Nombre', ReorderPoint AS 'Punto de Reorden'
FROM Production.Product
WHERE ReorderPoint > (SELECT AVG(ReorderPoint)
FROM Production.Product);

Nótese cómo en la cláusula WHERE se comprueba que el punto de reorden -ReorderPoint- sea mayor que el promedio retornado por la subconsulta correlacionada (Sentencia SELECT entre paréntesis.).

Al ejecutar esta sentencia se obtiene: 
Subconsulta no correlacionada
Figura 1. Subconsulta no correlacionada.

6. Práctica: Comprobación Existencia en Consulta No Correlacionada

En este ejemplo se obtienen los datos 
  • BusinessEntityID
  • SalesQuota, y
  • CurrentSalesQuota
de un vendedor -Sales.SalesPerson- que su cuota de venta sea igual a la cuota mayor entre todos los vendedores.

SELECT BusinessEntityID AS 'ID Vendedor',
SalesQuota AS 'Cuota de Ventas'
FROM Sales.SalesPerson
WHERE SAlesQuota = (SELECT MAX(SalesQuota)
FROM Sales.SalesPerson);

La consulta no correlacionada en la cláusula WHERE obtiene el valor de comparación: la cuota de ventas mayor entre todos los vendedores.

Los resultados que obtienen de esta consulta al ejecutarla en Microsoft SQL Server Management Studio son:
Vendedores con la cuota de ventas mayor
Figura 2. Vendedores con la cuota de ventas mayor.

7. Conclusiones

Se presentó el uso básico de una consulta no correlacionada para la obtención de un único valor que sirve de comparación para una predicado de la cláusula WHERE.

La próxima receta T-SQL enseña cómo comparar los subconjuntos de una tabla.

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.
Receta T-SQL No. 4-7: ¿Cómo Comprobar la Existencia de un Registro? (2016, junio 8). Recuperado desde: http://ortizol.blogspot.com/2016/06/receta-t-sql-no-4-7-como-comprobar-la-existencia-de-un-registro.html


V

No hay comentarios:

Publicar un comentario

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