Saltar al contenido principal

Clásula where

La cláusula where se utiliza para filtrar los resultados producidos por las cláusulas for y let y limitarlos a aquellos elementos que cumplen ciertas condiciones especificadas en la consulta.

La sintaxis básica de la cláusula where es la siguiente:

for $variable in //elemento
where condition
return result

donde:

  • $variable representa el elemento que se va a buscar.
  • condition es la expresión booleana que se evalúa para determinar si se incluye o no un elemento en el resultado.
  • result es la información que se desea recuperar.

Utilizando where con for

Cuando utilizamos where con un for, el where está recibiendo una lista de elementos, los cuales recorreremos de forma individual. De esta forma, se evaluará la condición definida en el where a cada uno de los elementos que se han obtenido de la expresión de la cláusula for.

Consideremos la siguiente consulta:

for $libro in //libro
where $libro/precio > 50
return $libro/titulo

En este ejemplo, se utiliza:

  • La cláusula for para seleccionar todos los elementos libro del documento mediante la expresión XPath //libro.
  • La cláusula where para filtrar los libros cuyo precio es mayor a 50 euros. La expresión booleana $libro/precio > 50 evalúa si el precio de cada libro es mayor a 50.
  • La cláusula return se utiliza para recuperar el título de cada libro que cumple la condición evaluada en el where.

Consideremos, ahora, la siguiente consulta:

for $estudiante in //estudiante
where avg($estudiante/calificaciones/calificación) > 8.5
return $estudiante/nombre

En este ejemplo, se utiliza:

  • La cláusula for para seleccionar todos los elementos estudiante del documento mediante la expresión XPath //estudiante.
  • La cláusula where para filtrar los estudiantes cuyo promedio es mayor a 8.5. La expresión booleana indicada a continuación del where calcula el promedio de calificaciones de cada estudiante usando la función avg() y evalúa si es mayor a 8.5.
  • La cláusula return se utiliza para recuperar el nombre de cada estudiante que cumple la condición.

Utilizando where con let

Cuando utilizamos where con un let, el where está recibiendo un único elemento. Teniendo esto en cuenta, se evaluará la condición definida en el where a toda la variable.

Consideremos la siguiente consulta:

let $n := 2
where $n > 1
return $n

En este ejemplo, se utiliza:

  • La cláusula let para declarar una variable $n que guarda el valor 2.
  • La cláusula where para filtrar si el valor de $n es mayor a 1.
  • La cláusula return para recuperar el valor de $n.

En este caso, el resultado de la consulta sería 2.

Ahora, consideremos esta consulta:

let $n := 2
where $n < 1
return $n

Se ha modificado la expresión booleana dentro del where. En este caso, al no cumplirse, no se devuelve nada.

No es posible utilizar where junto con let de la misma forma que se utiliza con for cuando trabajamos con una lista de elementos.

Consideremos la siguiente consulta:

let $a := (1,2,3)
where $a>2
return $a

En este ejemplo, se podría pensar que se mostrarían aquellos elementos mayores a 2, pero no ocurre así: se devuelven todos los elementos porque ese es el valor de la variable $a. Esto ocurre así porque el valor de la variable $a se trata como un único valor.

Por último, consideremos la siguiente consulta:

let $nums := (1,2,3)
where count($nums) > 3
return $nums

En este caso, en el where se están contando la cantidad de elementos que tiene la lista definida en $nums mediante la función count(). Pueden ocurrir dos situaciones:

  • Si el recuento es mayor a 3, se muestra el valor de la variable $nums.
  • Si el recuento es 3 o menos, no se muestra nada.

En este caso, ocurre lo último.