¿Cuál es la diferencia entre! = NULL y IS NOT NULL en las expresiones de filtro QGIS?

26

Tengo una capa de forma con un atributo que contiene NULLvalores a los que me gustaría aplicar un filtro para valores diferentes de NULL.

ingrese la descripción de la imagen aquí

Usando la interfaz gráfica de usuario disponible para tal construcción de consultas, uno intentaría intuitivamente

"obj_art" != NULL

ingrese la descripción de la imagen aquí

Lo que significa 'dame todas las características con el atributo "obj_art" diferente de NULL' (estas cuentan definitivamente más de 0). Probar esta consulta ofrece un resultado extraño desde mi punto de vista:

ingrese la descripción de la imagen aquí

Entonces, lo que he aprendido hasta ahora es que puedo lograr esto usando

"obj_art" IS NOT NULL

La pregunta es, ¿cuál es la diferencia entre != NULLy IS NOT NULL?

Jochen Schwarze
fuente
Hasta donde sé, es solo sintaxis. Cuando el uso nulo es o no es. Else use = or! =
nielsgerrits
"uno intentaría intuitivamente" ¿En serio? ¿Por qué? NULL no es un valor. Es literalmente la ausencia de un valor. No se puede "igualar" NULL! El operador !=no significa "no es"; significa "no es igual a". IS NOTsignifica "no lo es", así que creo que esto es perfectamente intuitivo :)
Lightness compite con Monica el
@LightnessRacesinOrbit Sin el entendimiento de que NULLno es un valor yo diría que es intuitiva para tratar de usar =o !=como que es el modo de evaluar cualquier otro valor. No es hasta que sepa que NULLno es un valor que es realmente intuitivo de usar en IS NOTlugar de !=. Muchos no son conscientes de lo que NULLrealmente es.
Midavalo
Y además, en la GUI NULLestá en la lista de valores (cp. Arriba), y por lo tanto se trata como un valor 'normal'. ¿Y no hay botón IS NULL, o me perdí tal? Entonces, al escribir tal consulta y con el conocimiento, eso NULLdebe tratarse de una manera especial que podríamos discutir sobre la intuición, pero por supuesto no en el contexto de ESTA GUI.
Jochen Schwarze
@Midavalo: Si bien eso es cierto, sugeriría humildemente no usar una función de lenguaje sin buscar lo que es :) La programación mediante adivinanzas no funciona.
Lightness compite con Monica el

Respuestas:

33

Descargo de responsabilidad: debido a que la sintaxis para el filtrado en QGIS funciona con SQL, supongo que aquí se aplican las reglas de SQL. No estoy completamente seguro de si eso es completamente correcto, pero parece lógico y explica el comportamiento.


El filtro funciona con SQL, por eso hay que buscar una respuesta.

En resumen, cuando se utiliza un operador lógico en combinación con null, el resultado es siempre null. Pero para probar null, SQL viene con la IS (NOT)funcionalidad de comparación, que permite usarlo para el filtrado deseado.

Verifique la respuesta de Bohemian en stackoverflow para una discusión más profunda.

karpfen
fuente
19

NULLno es un valor, por lo tanto, no puede igualar =o no igualar !=nada. No es lo mismo que cero, 0que es un valor.

A NULLindica que no se ha registrado ningún valor en la celda que está mirando. Para verificar si existe un valor, pregunte si la celda IS NULLo siIS NOT NULL

  • IS NULL comprueba si la celda está vacía
  • IS NOT NULL comprueba si la celda no está vacía

Si usted tiene algunos registros en los que unos valores son One, Two, Threey el resto NULL, y desea encontrar todo lo que no Twose tendría que utilizar algo como

value != 'Two' OR value IS NULL

ya que los valores NULL no se devuelven en una consulta igual / no igual. Si usara solo value != 'Three'el resultado, excluiría todos los NULLregistros, ya NULLque no es un valor que puede ser igual o no igual.

Midavalo
fuente