null值的概念是造成sql的新手的混淆的普遍原因,他們經常認為null是和乙個空字串''的一樣的東西。不是這樣的!例如,下列語句是完全不同的:
mysql> insert into my_table (phone) values (null);
mysql> insert into my_table (phone) values ("");
兩個語句把值插入到phone列,但是第乙個插入乙個null值而第二個插入乙個空字串。第乙個的含義可以認為是「**號碼不知道」,而第二個則可意味著「她沒有**」。
在sql中,null值在於任何其他值甚至null值比較時總是假的(false)。包含null的乙個表示式總是產生乙個null值,除非在包含在表示式中的運算子和函式的文件中指出。在下列例子,所有的列返回null:
mysql> select null,1+null,concat('invisible',null);
如果你想要尋找值是null的列,你不能www.cppcns.com使用=null測試。下列語句不返回任何行,因為對任何表示式,expr = null是假的:
mysql> select * from my_table where phone = null;
要想尋找null值,你必須使用is null測試。下例顯示如何找出null**號碼和空的**號碼:
mysql> select * from my_table where phone is null;
mysql> select * from my_table where phone = "";
在mysql中,就像很多其他的sql伺服器一樣,你不能索引可以有null值的列。你必須宣告這樣的列為not null,而且,你不能插入null到索引的列中。
當用load data infile讀取資料時,空列用''更新。如果你想要在乙個列中有null值,你應該在文字檔案中使用\n。字面上的詞'null'也可以在某些情形下使用。
當使用order by時,首先呈現null值。如果你用desc以降序排序,null值最後顯示。當使用group by時,所有的null值被認為是相等的。
為了有助於null的處理,你能使用is null和is not null運算子和ifnull()函式。
mysql的 ifnull() 函式和oracle的 nvl() 函式功能類似。以下簡單舉例:
ifnull(expr1, expr2)
如果expr1不是null,ifnull()返回expr1,否則它返回expr2。ifnull()返回乙個數字或字串值,取決於它被使用的上下文環境。
mysql> select ifnull(1,0);
-> 1
mysql> select ifnull(0,10);
-> 0
mysql> select ifnull(1/0,10);
-> 10
mysql> select ifnull(1/0,'yes');
-> 'yes'
nvl( string1, replace_with)
功能:如果string1為null,則nvl函式返回replace_with的值,否則返回string1的值。
引申一下,此nvl的作用與sqlserver 中的 isnull( string1, replace_with) 一樣。
注意事項:string1和replace_with必須為同一資料型別,除非顯式的使用to_cha程式設計客棧r函式。
例:nvl(to_char(numeric_column), 'some string')
其中numeric_column代指某個數字型別的值。
例:nvl(yanlei777,0) > 0
nvl(yanlei777, 0) 的意思是 如果 yanlei777 是null,則取 0值
null與空值的辨析
來看這樣一段**:
create table `test` (
`col1` varchar( 10 ) character set utf8 collate utf8_general_ci not null ,
`col2` varchar( 10 ) character set utf8 collate utf8_general_ci null
) engine = myisam ;
錯誤(不可以插入null值):
insert into `test` values (null,1);
正確(插入''沒問題):
insert into `test` values ('',1);
insert into `test` values ('', null);
insert into `test` values ('1', '2');
檢索(''不是null,所以not null會把''都算進去):
select * from `test` where col1 is not null
結果:所有三條資料
檢索(正常檢索):
select * from `test` where col1 <> ''
結果:最後一條資料
檢索(<>'',會同時排除''和null的資料,只檢索有內容的資料):
select * from `tes程式設計客棧t` where col2<>''
總結:1. null的儲存不是'',是其它特殊的字元表示。
2. null在檢索<>''的時候,也會被排除,因為沒有真正有意義的內容
3. not null嚴格按照字面意思,''不會被排除。
4. 定義not null的字段,可以插入''
本文標題: mysql中對於null值的理解和使用教程
本文位址: /shujuku/mysql/135654.html
mysql8 null轉0 處理 NULL 值
3.3.4.6 處理 null 值 在你習慣之前,null 值可能會讓你感到驚訝.從概念上講,null 意味著 丟失的未知值 它的處理方法與其他值有些不同.對 null 進行測試,使用 is null 和 is not null 操作符,如下所示 sql mysql select 1 is null...
MySQL中null值問題
今天寫答疑系統的時候,寫了這樣一截 session start db mysqli connect localhost root root qa tname post teacher q select schedule,place from time where tname tname and sn...
對於Python中RawString的理解
1 作用 可以表示 多行注釋 多行字串 其內的單雙引號不轉義 2 r 代表的意思是 raw 3 r 只對其內的反斜槓起作用 注意單個 的問題 raw string 有什麼用處呢?raw string 就是會自動將反斜槓轉義。print n print r n n 注 出現了兩個空行是因為 print...