1樓:baby_原來
對於sql的新手,null值的概念常常會造成混淆,常認為null是與空字串''相同的事。情況並非如此。例如,下述語句是完全不同的:
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:
mysql> select null, 1+null, concat('invisible',null);
如果打算搜尋列值為null的列,不能使用expr = 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 = '';
如果正在使用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值數目:
mysql> select count(*), count(age) from person;
對於某些列型別,mysql將對null值進行特殊處理。如果將null插入timestamp列,將插入當前日期和時間。如果將null插入具有auto_increment屬性的整數列,將插入序列中的下一個編號
2樓:匿名使用者
沒有什麼好壞,
區別就在查詢語句上。。。
null的查詢條件要寫成
where col is null
""的查詢條件要寫成
where col=""
主要是看你的系統的定義中有沒有對""和有沒有特別的定義。。。
3樓:匿名使用者
在資料庫系統中,空值是(什麼也沒有)。
解釋:所謂的null就是什麼都沒有,連\0都沒有,\0在字串中是結束符,但是在實體記憶體是佔空間的,等於一個位元組,而null就是連這一個位元組都沒有。在資料庫裡是嚴格區分的,任何數跟null進行運算都是null, 判斷值是否等於null,不能簡單用=,而要用is關鍵字。
空 (null)
值表示數值未知(在實際意義中,如果使用null,就是代表變數值是未知的,比如手機號碼設為null,說明不知道手機號碼是什麼)。空值不同於空白或零值。沒有兩個相等的空值。
比較兩個空值或將空值與任何其它數值相比均返回未知,這是因為每個空值均為未知。
在寫入資料的時候,空字串也是一個確定的值,所以就算定義了 not null 也可以被寫入。
4樓:
''表示空字串(但它還是字元型:varchar或char),可以用=、<、>''來進行判斷,null表示什麼都沒有(int、double、char等都可以是null),即這個東西不存在,判斷用is null或者is not null。
欄位中如果出現null,對索引有一定的影響
5樓:小魚的眼皮
沒區別有的系統預設寫入 "" 資料庫中為 null
其實無所謂 不過寫入 null 在讀取該欄位為null值得紀錄時有用 其他沒什麼用
sql 『』與null 的區別
6樓:
'' 表示
bai空字串
null表示什麼都沒有du,什麼都不zhi是判斷'' 用 ='' 或
<>'' , 而null 用is null 或is not null,欄位dao中如果內出現null 會對查詢語句容造成影響有可能導致索引失效,所以欄位中儘量不要出現null ,用'' 或其他字元代替 ,糾正一下其他人的觀點:null不代表空字串 哦, 代表表示什麼都沒有,什麼都不是,可以出現在任意型別欄位裡面(int,decimal,varchar 等等都可以是null),''只能在varchar,char型別裡面出現
7樓:龍羽君
都表示為空字串,區別主要在於查詢上
null的查詢條件要寫成 where 欄位名 is (not) null
''的查詢條件要寫成 where 欄位名=''
8樓:兩廂遺忘
什麼意思?你的意思是指空格與null的區別嗎?
9樓:匿名使用者
沒弄清楚你說的什麼意思?
如何獲取最後字元後面的字串sql中
sql語句可以擷取指定欄位後面的字串,以sqlserver為例,需要用到charindex函式和substring函式。如test表中有如下資料,要求截圖str欄位中逗號後邊的內容。可用如下語句 1select id,substring str,charindex str 1,len str cha...
什麼是字串常量,字元常量與字串常量的區別是什麼
字串常量 一對雙引號括起來的字元序列 字串常量是由一對雙引號括起的字元序列。例如 china c program 12.5 等都是合法的字串常量。字串常量和字元常量是不同的量。它們之間主要有以下區別 1 字元常量由單引號括起來,字串常量由雙引號括起來。2 字元常量只能是單個字元,字串常量則可以含一個...
python裡統計字串中另字串的個數
答案為3 用正則 import re s abababab len re.findall r aba s 3答案為2,用字串的count方法 import string s abababab s.count aba 2替換第二個 aba 為 bab 用字串的切片方法 可能方法醜陋了點,初學者見諒 s...