sql >> Databasteknik >  >> RDS >> Mysql

Hur man väljer poster utan NULL-värden i MySQL

Medan de flesta applikationer kommer att ha någon form av server- eller till och med klientsida-teknologi som kan användas för att filtrera bort databasfrågeresultat som kan innehålla NULL eller tomma värden, med ett annat språk och den extra bördan med att exekvera kod är vanligtvis dyrare för servern och i själva verket till stor del onödig.

Istället nedan kommer vi kort att utforska hur man använder själva MySQL-motorn för att utföra denna uppgift, bara ta tag i poster som du önskar samtidigt som de utesluter de med irriterande NULL kolumner i mixen.

ÄR INTE NULL jämförelseoperatör

Den överlägset enklaste och enklaste metoden för att säkerställa att en viss kolumns resultatuppsättning inte innehåller NULL värden är att använda IS NOT NULL jämförelseoperatör.

Till exempel, om vi vill välja alla poster i våra böcker tabell där primary_author kolumnen är inte NULL , kan frågan se ut så här:

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

Eftersom INTE ÄR NULL beter sig precis som alla andra komparatorer, den kan kombineras med andra WHERE satser för att ytterligare filtrera resultat, precis som om du använde = , > , < , GILLA och andra standardjämförelseoperatörer.

Filtrera NULL från flera kolumner

I vissa fall kanske du vill hämta resultat där nej NULL värden finns i flera kolumner. Till exempel har vi några poster i böckerna tabell:

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

Lägg märke till att Stenens dörrar (id 5 ) är opublicerad och därför publiceringsdatum är NULL . På samma sätt, Beowulf (id 6 ) – den berömda fornengelska episka dikten – har ingen känd författare, så primary_author är NULL .

I det här fallet kanske vi vill fråga efter resultat som bara innehåller de första fyra poster, och därigenom utesluter de två sista posterna som har NULL värden i antingen primary_author eller publicerad_datum . Detta kan utföras med denna enkla sats med AND med flera jämförelseoperatorer:

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

Obs! Paranteserna krävs inte men det är bra att bifoga grupperade komparatorer för bättre läsbarhet.

Där har du det; en enkel jämförelseoperator som kan användas för att filtrera bort alla NULL värden i dina register.


  1. Genomsnittlig floatinkonsekvens

  2. Information om informationsschemadatabasen i MySQL

  3. Hur migrerar man en PostgreSQL-databas till en SQLServer-databas?

  4. Skiftlägesokänsliga unika modellfält i Django?