Cláusulas WHERE y ORDER BY
Este tema explica cómo puede utilizar las cláusulas WHERE y ORDER BY para filtrar y ordenar los datos de la base de datos, respectivamente. Las cláusulas WHERE y ORDER BY deben introducirse en el cuadro de diálogo Propiedades del componente WHERE/ORDER de SQL/NoSQL.
WHERE
Para escribir una cláusula WHERE, utilice la sintaxis del dialecto SQL de la base de datos correspondiente. Por ejemplo, puede utilizar operadores, caracteres comodín, así como subconsultas y funciones de agregado en las subconsultas. Para crear un parámetro que pueda pasarse desde la asignación, introduzca dos puntos (:) seguidos del nombre del parámetro.
ORDER BY
Para escribir una cláusula ORDER BY, especifique uno o varios campos por los que ordenar y, si lo desea, añada la palabra clave ASC o DESC. Si no especifica una palabra clave, los datos se ordenarán por defecto en orden ascendente.
Cuando termine de escribir sus cláusulas y haga clic en Aceptar, MapForce comprueba si la instrucción contiene errores sintácticos.
Operadores
En esta tabla puede ver los operadores más frecuentes que se pueden usar en la cláusula WHERE:
Operador | Descripción |
|---|---|
= | Igual a |
<> | No igual a |
< | Inferior a |
> | Superior a |
>= | Superior o igual a |
<= | Inferior o igual a |
IN | Comprueba si un valor coincide con una lista de valores especificada |
LIKE | Comprueba si un valor se ajusta a un patrón determinado |
BETWEEN | Comprueba si un valor se encuentra dentro de un intervalo determinado |
Use el comodín % (porcentaje) para representar cualquier número de caracteres de un patrón. Por ejemplo, para recuperar todos los registros que acaben en r de un campo llamado lastname, debe usar esta expresión:
lastname LIKE "%r" |
Cuando trabaje con bases de datos que admitan el almacenamiento y la consulta de datos XML (por ejemplo, IBM DB2, Oracle y SQL Server), podrá utilizar las funciones y palabras clave XML propias de cada base de datos en cuestión. Por ejemplo:
xmlexists('$c/Client/Address[zip>"55116"]' passing USER.CLIENTS.CONTACTINFO AS "c") |
Véase también el apartado Ejemplo: extraer datos de columnas tipo XML de IBM DB2.
Además, si quiere ordenar el conjunto de datos recuperado usando un campo como criterio de ordenación, añada una cláusula ORDER BY en el cuadro correspondiente del cuadro de diálogo Propiedades del componente WHERE/ORDER de SQL/NoSQL. Para ordenar los registros usando varios campos como criterio de ordenación, separe los nombres de campo por comas. Para cambiar el orden (ascendente/descendente) use las palabras clave ASC y DESC. Por ejemplo, la cláusula ORDER BY que aparece a continuación recupera registros ordenados por el campo lastname y el campo firstname, ambos en orden descendente:
lastname DESC, firstname DESC |
Seleccionar filas únicas de una base de datos
Una consulta puede devolver filas duplicadas, en función de los campos seleccionados y de los datos subyacentes. Para que la base de datos devuelva únicamente filas únicas, marque la casilla Seleccionar solo filas distintas en el componente WHERE/ORDER (imagen siguiente). Esto añade la cláusula DISTINCT a la instrucción SELECT y hace que el servidor de la base de datos elimine las filas duplicadas.

Filtrado de datos en Azure CosmosDB (Enterprise Edition)
Si el nombre de un contenedor en su CosmosDB tiene caracteres especiales (por ejemplo, +, -, @, etc.) o es una palabra clave, este nombre no podrá utilizarse en las consultas y obtendrá un error de sintaxis de la base de datos. Para evitar posibles problemas, MapForce utiliza la siguiente sintaxis para las consultas en CosmosBD:
SELECT * FROM ROOT AS c WHERE c.<campo> ORDER BY c.<campo>
La palabra clave ROOT de la cláusula FROM hace referencia al contenedor actual que está consultando. Dado que la palabra clave ROOT no puede utilizarse para apuntar a campos en las cláusulas WHERE y ORDER BY, el contenedor recibe el nombre de alias c que se asigna al contenedor mediante la palabra clave AS. Asignar el nombre del alias al contenedor permite filtrar y ordenar su contenido.
Tenga en cuenta que, en el cuadro de diálogo WHERE/ORDER, todas las referencias de campo deben llevar como prefijo el nombre de alias c del contenedor (ver ejemplo siguiente).
SELECT * FROM ROOT AS c WHERE c.age > 20 ORDER BY c.name
Ejemplos
Ejemplo 1
Se especifica la siguiente cláusula WHERE para la tabla users de la base de datos Nanonull.sqlite. Recupera los registros en los que los valores de last_name sean superiores a M, de acuerdo con las reglas de comparación de cadenas de la base de datos.
last_name > "M" |

Ejemplo 2
La siguiente cláusula WHERE crea un parámetro denominado Name. Este parámetro aparece en el componente WHERE/ORDER de la asignación.
last_name LIKE :Name |

La constante M% proporciona el valor de Name. El comodín % representa cualquier número de caracteres. Esto hace que la asignación recupere todos los apellidos que comienzan por la letra M.
Ejemplo 3
La cláusula WHERE que aparece a continuación crea los dos parámetros min y max a los que se comparan los valores de quantity. En la asignación, los valores máximo (max) y mínimo (min) se indican por medio de dos constantes.
quantity > :min AND quantity < :max |

La condición anterior no incluye los registros en los que quantity sea igual al valor máximo (max) y mínimo (min). Para incluir los valores límite (10 y 100), utilice el operador BETWEEN:
quantity BETWEEN :min AND :max |