Qual é a diferença entre! = NULL e NOT NOT NULL nas expressões de filtro QGIS?

26

Eu tenho uma camada de forma com um atributo que contém NULLvalores aos quais gostaria de aplicar um filtro para valores diferentes NULL.

insira a descrição da imagem aqui

Usando a GUI disponível para essa construção de consulta, tentaria-se intuitivamente

"obj_art" != NULL

insira a descrição da imagem aqui

O que significa 'dê-me todos os recursos com o atributo "obj_art" diferente de NULL' (estes contam definitivamente mais que 0). Testar esta consulta fornece um resultado estranho do meu ponto de vista:

insira a descrição da imagem aqui

Então, o que eu aprendi até agora é que posso conseguir isso usando

"obj_art" IS NOT NULL

A questão é: qual é a diferença entre != NULLe IS NOT NULL?

Jochen Schwarze
fonte
Tanto quanto eu sei, é apenas sintaxe. Quando o uso nulo é ou não é.
Caso contrário
"alguém tentaria intuitivamente" Sério? Por quê? NULL não é um valor. É literalmente a ausência de um valor. Você não pode "igualar" NULL! O operador !=não significa "não é"; significa "não é igual a". IS NOTsignifica "não é", então eu acho que isso é perfeitamente intuitiva :)
Leveza raças com Monica
@LightnessRacesinOrbit Sem o entendimento de que isso NULLnão é um valor, eu diria que é intuitivo tentar usar =ou !=como é assim que você avalia qualquer outro valor. Não é até que você sabe que NULLnão é um valor que é muito intuitivo de usar IS NOT, em vez de !=. Muitos não têm consciência do que NULLrealmente é.
Midavalo
Além disso, a GUI NULLestá na lista de valores (cp. Acima) e, portanto, é tratada como um valor 'normal'. E não há botão IS NULL, ou eu senti falta disso ?! Portanto, ao digitar essa consulta e com o conhecimento, isso NULLdeve ser tratado de uma maneira especial, poderíamos discutir sobre a intuição, mas, sem dúvida, não no contexto desta ESTA GUI.
Jochen Schwarze 26/07
@ Midavalo: Embora isso seja verdade, eu sugeriria humildemente não usar um recurso de linguagem sem procurar o que é :) A programação supondo que não funciona.
Lightness Races com Monica

Respostas:

33

Isenção de responsabilidade: como a sintaxe para filtragem no QGIS funciona com SQL, estou assumindo aqui que as regras SQL se aplicam. Não tenho muita certeza se isso está totalmente correto, mas parece lógico e explica o comportamento.


O filtro funciona com SQL, é por isso que você precisa procurar uma resposta lá.

Em resumo, ao usar um operador lógico em combinação com null, o resultado é sempre null. Mas, para testar null, o SQL vem com a IS (NOT)funcionalidade de comparação, que permite usá-lo para a filtragem pretendida.

Verifique a resposta da Bohemian no stackoverflow para uma discussão mais aprofundada.

karpfen
fonte
19

NULLnão é um valor, portanto, não pode ser igual =ou não é !=nada. Não é o mesmo que zero, 0que é um valor.

A NULLindica que nenhum valor foi registrado na célula que você está visualizando. Para verificar se existe um valor, você pergunta se a célula IS NULLou seIS NOT NULL

  • IS NULL verifica se a célula está vazia
  • IS NOT NULL verifica se a célula não está vazia

Se você tem alguns registros onde um valores são One, Two, Threee o resto NULLe você quer encontrar tudo o que não é Twovocê precisaria usar algo como

value != 'Two' OR value IS NULL

como valores NULL não são retornados em uma consulta igual / não igual. Se você usasse apenas value != 'Three'o resultado excluiria todos os NULLregistros, pois NULLnão é um valor que possa ser igual ou não.

Midavalo
fonte