miércoles, 25 de junio de 2014

Receta No. 1-4 en T-SQL: Especificación de Criterios de Búsqueda de Registros en una Tabla

Tabla de Contenido

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
3.1 Clausula WHERE
4. Práctica: Código T-SQL
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

Esta vez vamos a elaborar una receta que consistirá en especificar una condición o criterio para una consulta. El resultado de una consulta contendrá aquellos registros o filas de la tabla (o tuplas) que cumplan con una condición en forma de predicado. A lo anterior será necesario introducir varios operadores lógicos y de comparación para la creación de estas condiciones que conformarán expresiones lógicas o booleanas. ¡Manos a la obra!

1. Problema

En las recetas 1-2 y 1-3 aprendimos a usar la sentencia SELECT para recuperar los registros de una tabla. Ahora tenemos que aprender un método de discriminación o filtrado de registros de una tabla de acuerdo a un conjunto de criterios o condiciones que nos interese.

2. Solución

La sentencia SELECT acompañada con la clausula WHERE, son la combinación que permite especificar un criterio de búsqueda o de filtrado de registros (filas) de una tabla de una base de datos. Las condiciones o criterios se presentan como predicados que son evaluados a valores falso (FALSE) o verdadero (TRUE), e inclusive UNKOWN (cuando se trata de valores NULL [aprenderemos muy pronto sobre el manejo de este concepto]).

3. Discusión de la Solución

Ya se ha dicho que la sentencia SELECT combinada con la clausula WHERE permiten generar un resultado basado en las condiciones que deben cumplir uno o varios cambios de los registros de las tablas. Un primero uso sobre la tabla Person.Person es este:

SELECT Title, FirstName, LastName
FROM Person.Person
WHERE Title = 'Ms.';

La primera parte consiste en la especificación de las columnas de la tabla de interés (Recuperación de Todas las Columnas de una Tabla); y a continuación la tabla que nos interesa: Person.Person.

La novedad consiste en el uso de la clausula WHERE para especificar cada una de las condiciones que deben cumplir los registros para ser parte del resultado de selección.

Resultado:
Selección con criterio de búsqueda
Figura 1. Selección con criterio de búsqueda.

Por otro lado, la sección de condiciones de la clausula WHERE puede contener una o más condiciones a evaluar. Este es un ejemplo que genera registros basados en dos condiciones. Sección SELECT:

SELECT Title, FirstName, LastName
FROM Person.Person;

Y la clausula WHERE con dos condiciones:

WHERE Title = 'Ms.' AND
LastName = 'Antrim';


Aquí notamos el uso del operador lógico AND [6] que enlaza las dos condiciones que deben cumplir los registros.


Resultado:
SELECT Title, FirstName, LastName FROM Person.Person WHERE Title = 'Ms.' AND LastName = 'Antrim';

Veamos con más detalle el uso esta clausula.

3.1 Clausula WHERE

La clausula WHERE [5] especifica las condiciones de búsqueda para los registro o filas recuperados por la consulta. Esta es la sintaxis de uso:

[ WHERE <search_condition>

Descripción puntual:
  • <search_condition&gt: condición de búsqueda sobre los registros. Los registros retornados por la consulta son todos aquellos que la evaluación del criterio o predicado es TRUE. El número de condiciones es ilimitado.
En la Figura 2 se enumeran todos los operadores lógicos disponibles en T-SQL para componer predicados.
Operadores lógicos en T-SQL
Figura 2. Operadores lógicos en T-SQL [4].



La comparación de valores de campos y literales se lleva a cabo con los operadores de igualdad. La Figura 3 [1] enumera cada uno de estos operadores.
Operadores de igualdad de T-SQL
Figura 3. Operadores de igualdad de T-SQL [1].

En los ejemplos presentados en la introducción de esta sección hicimos uso del operador de igualdad =, como en:

Title = 'Ms.'


Más adelante, creamos una expresión compuesta por el operador lógico AND para validar que dos condiciones se cumplen:

Title = 'Ms.' AND LastName = 'Antrim';


Por otra parte, contamos con el operador lógico OR [7] para combinar dos condiciones. Si una o varias de estas condiciones retorna TRUE, el resultado será TRUE, en caso contrario FALSE.



Los operadores lógicos se pueden agrupar con paréntesis para cambiar el orden de evaluación. En el caso de operador OR que tiene inferior jerarquía de evaluación que el operador AND, los paréntesis pueden cambiar el orden de evaluación. Por ejemplo:


SELECT Title, FirstName, LastName
FROM Person.Person
WHERE Title = 'Ms.' AND
(LastName = 'Antrim' OR LastName = 'Galvin');


Las expresiones de comparación con el operador OR encerradas entre paréntesis se evalúan primero que el operador AND.


Finalmente, cabe hacer mención del tip conceptual hallado en [1]:

Versión texto:
Tip: Don't think of a WHERE clause as going out and retrieving rows that match the conditions. Think of it as a fishnet or a sieve. All the possible rows are dropped into the net. Unwanted rows fall on through. When a query is done executing, the rows reamining in the net are those that match the predicates you listed. Database engines will optimize execution, but the fishnet metaphor is a useful one when initially crafting a query.

4. Práctica: Código T-SQL

Confeccionemos una consulta para mostrar las columnas ProductID y Name de la tabla Production.Product para los registros que cumplan cualquiera de estas tres condiciones:

  • ProductID = 2
  • ProductID = 4
  • Name = 'Spokes'

La consulta queda así:

SELECT ProductID, Name
FROM Production.Product
WHERE ProductID = 2
OR ProductID = 4
OR Name = 'Spokes';

Ejecución consulta:
Uso de múltiples predicados
Figura 2. Uso de múltiples predicados.

Conclusiones

Demostré el uso de los operadores lógicos (AND y OR) y de igualdad o comparación. Estos operadores juntos a la clausula WHERE permiten la especificación de criterios de búsqueda de registros. El conjunto de registros que componen el resultado de la consulto, son todos aquellos que cumplen con una o varias condiciones.

Glosario

  • Condición
  • Operador lógico
  • Predicado
  • SQL
  • T-SQL

Literatura & Enlaces

[1]: SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach by Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield. Copyright 2012 Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield, 978-1-4302-4200-0.
[2]: SELECT (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms189499.aspx
[3]: Receta No. 1-3 en T-SQL: Recuperación de Todas las Columnas de una Tabla | OrtizOL - Experiencias Construcción Software (xCSw) - http://ortizol.blogspot.com/2014/06/receta-no-1-3-en-t-sql-recuperacion-de-todas-las-columnas-de-una-tabla.html
[4]: Logical Operators (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms189773.aspx
[5]: WHERE (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms188047.aspx
[6]: AND (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms188372.aspx
[7]: OR (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms188361.aspx


J

No hay comentarios:

Publicar un comentario

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