Una de las principales utilidades del comando SELECT es realizar búsquedas en las tablas, así podremos saber si algún dato existe o no existe en ellas. Cuando necesitamos realizar búsquedas podemos emplear varios predicados de comparación, ellos son:

  • BETWEEN … AND …
  • CONTAINING
  • IN
  • LIKE
  • STARTING WITH
  • SIMILAR TO

BETWEEN … AND …

El predicado de comparación BETWEEN … AND … debe recibir dos argumentos (que sean de tipos compatibles) y devuelve como resultado las filas que contienen esos valores o cualquier valor incluido entre ellos. Ejemplo:

SELECT
   CLI_NOMBRE
FROM
   CLIENTES
WHERE
   CLI_CODIGO BETWEEN 1 AND 100

Este SELECT devolverá los nombres de todos los clientes cuyos códigos se encuentren entre 1 y 100, inclusives.

CONTAINING

El predicado de comparación CONTAINING busca dentro de una columna alfanumérica los caracteres pedidos. Importante: no distingue entre mayúsculas y minúsculas. Ejemplo:

SELECT
   CLI_NOMBRE
FROM
   CLIENTES
WHERE
   CLI_NOMBRE CONTAINING 'MAR'

 Este SELECT devolverá los nombres de todos los clientes que tengan los caracteres ‘MAR’ en la columna CLI_NOMBRE. Así, podríamos tener a: MARÍA TERESA, CLAUDIA MARCELA, ROSEMARY, María Estela, Ana María, Tamara, etc.

IN

El predicado de comparación IN es una forma simplificada de escribir el operador de comparación OR, los resultados obtenidos serán los mismos pero se escribe menos.

SELECT
   CLI_NOMBRE
FROM
   CLIENTES
WHERE
   CLI_CODIGO IN (15, 21, 45)

Este SELECT nos devolverá los nombres de los clientes cuyos códigos sean 15, 21, ó 45. Podríamos haberlo escrito así:

SELECT
   CLI_NOMBRE
FROM
   CLIENTES
WHERE
   CLI_CODIGO = 15 OR
   CLI_CODIGO = 21 OR
   CLI_CODIGO = 45

Como puedes ver, al usar el predicado de comparación IN se escribe mucho menos. Y cuanto mayor sea la cantidad de valores a evaluar mayor será lo que se ahorrará. Por lo tanto, si todos los valores serán comparados contra una misma columna (como en los dos ejemplos anteriores) entonces lo más conveniente siempre es usar el predicado IN y no el operador OR. Imagínate todo lo que te ahorrarás de escribir si los valores a comparar no fueran 3 como en estos ejemplos sino 20.

LIKE

El predicado de comparación LIKE tiene cuatro características muy importantes:

  1. Distingue entre mayúsculas y minúsculas
  2. Utiliza patrones de caracteres
  3. Solamente usa índices cuando no empieza con un comodín
  4. Si alguno de los valores es NULL, entonces devuelve NULL

Dentro de los patrones de caracteres podemos usar “comodines”. Ellos son:

‘%’      equivale a cualquier string, de cualquier longitud

‘_’      equivale a un solo caracter

También puede usar un caracter de escape. ¿Qué es un caracter de escape? Un caracter que le dice al Firebird que busque también al caracter que se encuentra a continuación, y lo usaríamos cuando en nuestra búsqueda queremos hallar también a los comodines % y _. Si no existiera el caracter de escape entonces no habría forma de buscar a esos dos caracteres. Ejemplos:

CLI_NOMBRE LIKE 'MAR%'                  -- Devolverá los nombres de todos los clientes que empiecen con MAR
CLI_NOMBRE LIKE 'JULI_'                 -- Devolverá los nombres de todos los clientes que tengan 5 caracteres y los cuatro primeros sean JULI
CLI_NOMBRE LIKE '%MAR%'                 -- Devolverá los nombres de todos los clientes que tengan MAR dentro suyo
PRD_NOMBRE LIKE '%A\_B%' ESCAPE '\'     -- Devolverá todos los nombres de productos que contienen A_B
PRD_NOMBRE LIKE '%\_%' ESCAPE '\'       -- Devolverá todos los nombres de productos que tienen un guión bajo

En el primer y en el segundo casos se usará un índice (si hay uno disponible, por supuesto) porque el patrón de caracteres no empieza con un comodín. En los restantes casos, nunca se usará un índice, porque empiezan con un comodín.

STARTING WITH

El predicado de comparación STARTING WITH es muy parecido a LIKE y se lo puede utilizar cuando se conocen los primeros caracteres del string buscado.

SELECT
   CLI_NOMBRE
FROM
   CLIENTES
WHERE
   CLI_NOMBRE STARTING WITH 'MAR'

Este SELECT nos traerá a MARIA TERESA, MARTHA, MARCELA, MARLENE, etc. O sea, todos los nombres que empiezan con MAR.

SIMILAR TO

El predicado de comparación SIMILAR TO también es parecido a LIKE pero nos permite escribir condiciones más complejas.

SELECT
   CLI_NOMBRE
FROM
   CLIENTES
WHERE
   CLI_NOMBRE SIMILAR TO '[CS]%'

Este SELECT nos devolverá los nombres de todos los clientes que empiecen con C o con S.

SELECT
   CLI_NOMBRE
FROM
   CLIENTES
WHERE
   CLI_NOMBRE SIMILAR TO '[CS]%a'

Este SELECT nos devolverá los nombres de todos los clientes que empiecen con C o con S y que terminen con a.

Artículos relacionados:

Los predicados existenciales

El índice del blog Firebird21

 

Anuncios