Mysql
 sql >> Database >  >> RDS >> Mysql

Come SELEZIONARE i record senza valori NULL in MySQL

Sebbene la maggior parte delle applicazioni disponga di una qualche forma di tecnologia lato server o anche lato client che può essere utilizzata per filtrare i risultati delle query del database che possono contenere NULL o valori vuoti, l'utilizzo di un altro linguaggio e l'onere aggiuntivo dell'esecuzione del codice è in genere più costoso per il server e, di fatto, in gran parte non necessario.

Invece, di seguito esploreremo brevemente come utilizzare il motore MySQL stesso per eseguire questa attività, acquisendo solo i record che desideri escludendo quelli con fastidioso NULL colonne nel mix.

IS NOT NULL Operatore di confronto

Il metodo di gran lunga più semplice e diretto per garantire che il set di risultati di una particolare colonna non contenga NULL valori consiste nell'usare IS NOT NULL operatore di confronto.

Ad esempio, se vogliamo selezionare tutti i record nei nostri books tabella dove primary_author la colonna non lo è NULL , la query potrebbe essere simile a questa:

SELECT
  primary_author,
  published_date,
  title
FROM
  books
WHERE
  primary_author IS NOT NULL;

Poiché IS NOT NULL si comporta come qualsiasi altro comparatore, può essere combinato con altri WHERE clausole per filtrare ulteriormente i risultati, proprio come se stessi usando = , > , < , LIKE e altri operatori di confronto standard.

Filtraggio NULL da più colonne

In alcuni casi potresti voler recuperare i risultati dove no NULL i valori sono presenti su più colonne. Ad esempio, abbiamo alcuni record nei books tabella:

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

Prendi nota che Le porte di pietra (id 5 ) non è pubblicato e quindi il published_date è NULL . Allo stesso modo, Beowulf (id 6 ) – il famoso poema epico in inglese antico – non ha un autore noto, quindi primary_author è NULL .

In questo caso, potremmo voler cercare risultati contenenti solo i primi quattro record, escludendo così gli ultimi due record che hanno NULL valori in primary_author o published_date . Questo può essere eseguito con questa semplice istruzione usando AND con più operatori di confronto:

SELECT
  primary_author,
  published_date,
  title
FROM
  books
WHERE
  (
    primary_author IS NOT NULL
  AND
    published_date IS NOT NULL
  );

Nota:le parentesi non sono obbligatorie, ma è buona norma racchiudere i comparatori raggruppati per una migliore leggibilità.

Ecco qua; un semplice operatore di confronto che può essere utilizzato per filtrare tutti i NULL valori nei tuoi archivi.