null和空的區別

python中None和Null的區別

首先了解python對象的概念

python中,萬物皆對象,全部的操做都是針對對象的。 那什麼是對象?5是一個int對象,‘oblong’是一個str對象,異常也是一個對象,抽象一點是,人,貓,夠也是一個對象python

那對於一個對象,它就有包括兩方面的特徵: 
屬性:去描述它的特徵 
方法: 它所具備的行爲 
因此,對象=屬性+方法 (其實方法也是一種屬性,一種區別於數據屬性的可調用屬性)mysql

類:把具備相同屬性和方法的對象就能夠歸爲一類,即class。使用一個類能夠建立多個對象實例,即人,貓,狗都屬於哺乳動物類。類是對象的抽象化,對象是類的實例化。類不表明具體的事物,而對象表示具體的事物 git

類也是有屬性和方法的。sql

數據類型也是對象

實際上Pyhton在面向對象程序設計時,纔會有對象這個概念,而在面向過程型程序設計時,咱們討論最多的就是數據類型。api

Python提供的基本數據類型主要有:布爾類型、整型、浮點型、字符串、列表、元組、集合、字典等。ssh

整個數據類型也能夠看作是一個」類「 。每一種數據類型都是一個對象,也具備其本身的屬性和方法ide

瞭解以上概念,就不難理解None 與Null的區別 

1)是不一樣的數據類型函數

In[3]: type(None)
Out[3]: NoneType

表示該值是一個空對象,空值是Python裏一個特殊的值,用None表示。None不能理解爲0,由於0是有意義的,而None是一個特殊的空值。能夠將None賦值給任何變量,也能夠給None值變量賦值post

In[4]: type('')
Out[4]: str

字符型測試

2)判斷的時候 均是False,沒有打印

a = None
if a:
    print(1)
    
b = ''
if b:
    print(1)

3)屬性不一樣

使用dir()函數返回參數的屬性、方法列表。若是參數包含方法dir(),該方法將被調用。若是參數不包含dir(),該方法將最大限度地收集參數信息。

dir(None)
['__bool__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

dir('')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

SQL表中的空字符串與NULL中的區別何在

對於SQL的新手,NULL值的概念經常會形成混淆,常認爲NULL是與空字符串''相同的事。狀況並不是如此。例如,下述語句是徹底不一樣的:    

1
2
mysql>  INSERT  INTO  my_table (phone)  VALUES  ( NULL );    
mysql>  INSERT  INTO  my_table (phone)  VALUES  ( '' );

 這兩條語句均會將值插入phone(電話)列,但第1條語句插入的是NULL值,第2條語句插入的是空字符串

第1種狀況的含義可被解釋爲「電話號碼未知」,而第2種狀況的含義可被解釋爲「該人員沒有電話,所以沒有電話號碼」。  

 

  爲了進行NULL處理,可以使用IS NULL和IS NOT NULL操做符以及IFNULL()函數。    在SQL中,NULL值與任何其它值的比較(即便是NULL)永遠不會爲「真」。

包含NULL的表達式老是會導出NULL值,除非在關於操做符的文檔中以及表達式的函數中做了其餘規定。

下述示例中的全部列均返回NULL:   

1
  mysql>  SELECT  NULL , 1+ NULL , CONCAT( 'Invisible' , NULL );

 若是打算搜索列值爲NULL的列,不能使用expr = NULL測試。

下述語句不返回任何行,這是由於,對於任何表達式,expr = NULL永遠不爲「真」:  

1
  mysql>  SELECT  FROM  my_table  WHERE  phone =  NULL ;

要想查找NULL值,必須使用IS NULL測試。

 

在下面的語句中,介紹了查找NULL電話號碼和空電話號碼的方式:    

1
2
mysql>  SELECT  FROM  my_table  WHERE  phone  IS  NULL ;    
mysql>  SELECT  FROM  my_table  WHERE  phone =  '' ;

    若是正在使用MyISAM、InnoDB、BDB、或MEMORY存儲引擎,可以在可能具備NULL值的列上增長1條索引。

如否則,必須聲明索引列爲NOT NULL,並且不能將NULL插入到列中。   

 

 用LOAD DATA INFILE讀取數據時,對於空的或丟失的列,將用''更新它們。

若是但願在列中具備NULL值,應在數據文件中使用\N。在某些狀況下,也可使用文字性單詞「NULL」。

 

    使用DISTINCT、GROUP BY或ORDER BY時,全部NULL值將被視爲等同的。    

    使用ORDER BY時,首先將顯示NULL值,若是指定了DESC按降序排列,NULL值將最後顯示。

    對於聚合(累計)函數,如COUNT()、MIN()和SUM(),將忽略NULL值。對此的例外是COUNT(*),它將計數行而不是單獨的列值。

例如,下述語句產生兩個計數。首先計數表中的行數,其次計數age列中的非NULL值數目:   

1
  mysql>  SELECT  COUNT (*),  COUNT (age)  FROM  person;

   對於某些列類型,MySQL將對NULL值進行特殊處理。若是將NULL插入TIMESTAMP列,將插入當前日期和時間。若是將NULL插入具備AUTO_INCREMENT屬性的整數列,將插入序列中的下一個編號

相關文章
相關標籤/搜索