sql >> Database >  >> RDS >> Mysql

Wat is het punt van NOT NULL DEFAULT ''?

NULL's hebben een speciaal gedrag:als je iets met een NULL vergelijkt, krijg je een NULL , wat iets anders is dan false of 0 . Het betekent "onbekend".

Neem bijvoorbeeld deze tabel:

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

SELECT * FROM mytable WHERE gender = 'M' retourneert 1 rij, zoals verwacht

SELECT * FROM mytable WHERE gender != 'M' geeft 2 rijen terug, NIET 3 rijen.

SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL geeft de verwachte 3 rijen terug.

Bewerken:voor sommige toepassingen gebruikt u 0 (of, God verhoede, nog een "magisch getal") in plaats van NULL is zelfs niet aan te raden (eenheden of exacte waarden zijn in dit voorbeeld niet relevant):

 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

Hier, de NULL op 6 januari betekent "waarde onbekend" - misschien omdat de temperatuur zo laag was dat de thermometersonde niet meer reageerde. Het is echter een heel andere betekenis dan 3 januari, toen de temperatuur 0 was , dat wil zeggen, 0 graden.

Ook, zoals @Bill Karwin vermeldt, gedragen NULL's zich speciaal in geaggregeerde functies (COUNT ,SUM ,AVG etc.):berekenen van AVG(Temperature) op de bovenstaande gegevens zou je -14.5 , omdat de NULL-rij wordt genegeerd.



  1. Bestel varchar string als numeriek

  2. EF5:Kan het bestand '{0}' niet toevoegen als database '{1}'

  3. Hoe haal ik alle rijen in mijn DB op?

  4. Hoe Python met SQL Server te verbinden om het backend-proces te automatiseren