今天一不小心在sql中寫出以下指令碼
select defaultPositionId from TableName where UserId=1100528 and defaultPositionId =null
執行之後大驚怎麼沒有結果,使用select * from tableName 該列確實為null怎麼查補出來難道自己人品問題於是自己又寫了以下判斷
if(null=null)
BEgin
print 'fff'
end
else
begin
print 'gggg'
end
輸出結果如下:
無語難道null與null還有區別。
於是找搜尋引擎,在sql中null是一種資料類型,null不能與任何列或者變數使用"="或者"!="去比較
判斷某列或者變數為null是只能用is (not) null 去判斷這樣他的傳回值才是true或者false
關於null的運用
NULL值與索引
如果一個列中有NULL值,那麼不可以在這個列上建唯一索引,可以建立非唯一索引;但是如果一個欄位有很多行有NULL值,那麼在這個欄位上建索引效果不佳。所以建議不在在一個頻繁出現NULL值的欄位上建索引(有待證實)。
NULL與排序
NULL參與排序時總是作為最小值存在,即ORDER BY COL ASC時COL為NULL的行在最前面,反之在最後面。
附註:t-sql中三個關於NULL的函數:
ISNULL(check_expression, replacement_value)
check_expression 與 replacement_value 資料類型必須一致
如果 check_expression 為 NULL,則返回 replacement_value
如果 check_expression 不為 NULL,則返回 check_expression
NULLIF 用於檢查兩個運算式,文法:
NULLIF(expression, expression)
如果兩個 expression 相等,則返回 NULL,該 NULL 為第一個 expression 的資料類型
如果兩個 expression 不相等,則返回第一個 expression
COALESCE()函數可以接受一系列的值,如果列表中所有項都為空白(null),那麼只使用一個值。然後,它將返回第一個非空值。這一技巧描述了創造性使用SQL Server 中COALESCE()函數的兩種方法。
協助串連:http://msdn.microsoft.com/zh-cn/library/ms172138.aspx