Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como selecionar registros sem valores NULL no MySQL


Enquanto a maioria dos aplicativos terá alguma forma de tecnologia do lado do servidor ou mesmo do lado do cliente que pode ser usada para filtrar os resultados da consulta do banco de dados que podem conter NULL ou valores vazios, usando outra linguagem e esse fardo adicional de execução de código é normalmente mais caro para o servidor e, de fato, bastante desnecessário.

Em vez disso, abaixo vamos explorar brevemente como usar o próprio mecanismo MySQL para executar esta tarefa, apenas pegando os registros que você deseja, excluindo aqueles com NULL irritante colunas na mistura.

IS NOT NULL Operador de comparação


De longe, o método mais simples e direto para garantir que o conjunto de resultados de uma coluna específica não contenha NULL valores é usar o IS NOT NULL operador de comparação.

Por exemplo, se quisermos selecionar todos os registros em nossos books tabela onde o primary_author coluna não é NULL , a consulta pode ficar assim:
SELECT
  primary_author,
  published_date,
  title
FROM
  books
WHERE
  primary_author IS NOT NULL;

Como IS NOT NULL se comporta como qualquer outro comparador, pode ser combinado com outros WHERE cláusulas para filtrar ainda mais os resultados, como se você estivesse usando = , > , < , LIKE e outros operadores de comparação padrão.

Filtrando NULL de várias colunas


Em alguns casos, você pode desejar recuperar resultados onde não NULL os valores estão presentes em várias colunas. Por exemplo, temos alguns registros nos books tabela:
id | title                | primary_author  | published_date
1  | The Hobbit           | Tolkien         | 09-21-1937
2  | The Silmarillion     | Tolkien         | 09-15-1977
3  | The Name of the Wind | Rothfuss        | 03-27-2007
4  | The Wise Man's Fear  | Rothfuss        | 03-01-2011
5  | The Doors of Stone   | Rothfuss        | NULL
6  | Beowulf              | NULL            | 01-01-1000

Observe que As Portas de Pedra (id 5 ) não foi publicado e, portanto, a published_date é NULL . Da mesma forma, Beowulf (id 6 ) – o famoso poema épico em inglês antigo – não tem autor conhecido, então primary_author é NULL .

Nesse caso, podemos querer consultar resultados que contenham apenas os primeiros quatro registros, excluindo assim os dois últimos registros que têm NULL valores em primary_author ou published_date . Isso pode ser realizado com esta instrução simples usando AND com múltiplos operadores de comparação:
SELECT
  primary_author,
  published_date,
  title
FROM
  books
WHERE
  (
    primary_author IS NOT NULL
  AND
    published_date IS NOT NULL
  );

Observação:os parênteses não são obrigatórios, mas é uma boa prática incluir comparadores agrupados para melhor legibilidade.

Aí está; um operador de comparação simples que pode ser usado para filtrar todo e qualquer NULL valores em seus registros.