sql >> Databasteknik >  >> RDS >> Mysql

Vad är poängen med INTE NULL DEFAULT ''?

NULLs har ett speciellt beteende:om du jämför allt med en NULL får du tillbaka en NULL , vilket är något annat än false eller 0 . Det betyder "okänt".

Ta till exempel den här tabellen:

 user_id | gender
------------------
 1       | NULL
 2       | 'M'
 3       | 'F'
 4       | 'F'

SELECT * FROM mytable WHERE gender = 'M' returnerar 1 rad, som förväntat

SELECT * FROM mytable WHERE gender != 'M' returnerar 2 rader, INTE 3 rader.

SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL returnerar de förväntade 3 raderna.

Redigera:För vissa applikationer använder du 0 (eller, gud förbjude, ett annat "magiskt tal") istället för NULL är inte ens tillrådligt (enheter eller exakta värden är inte relevanta i det här exemplet):

 Date       | Temperature 
--------------------------
 2010-01-01 | 10          
 2010-01-02 | 4
 2010-01-03 | 0
 2010-01-04 | -22
 2010-01-05 | -45
 2010-01-06 | NULL
 2010-01-07 | -34

Här är NULL den 6 januari betyder "värde okänt" - kanske för att temperaturen var så låg att termometersonden slutade svara. Det är dock en helt annan betydelse än den 3 januari, då temperaturen var 0 , det vill säga 0 grader.

Dessutom, som @Bill Karwin nämner, fungerar NULLs speciellt i aggregerade funktioner (COUNT ,SUM ,AVG etc.):beräknar AVG(Temperature) på ovanstående data skulle ge dig -14.5 , eftersom NULL-raden ignoreras.



  1. hur man får summan av en kolumn med kodantändningsfråga

  2. MySQL SUM json-värden grupperade efter json-nycklar

  3. Markör i proceduren returnerar fler värden än fråga

  4. Hämtar ändringar från tabellen med ElasticSearch JDBC river