sqlserver isnull在數(shù)據(jù)庫(kù)查詢中的應(yīng)用
更新時(shí)間:2011年11月15日 23:52:36 作者:
isnull在數(shù)據(jù)庫(kù)查詢中的應(yīng)用,特別是再語句連接的時(shí)候需要用到
isnull在數(shù)據(jù)庫(kù)查詢中的應(yīng)用,特別是再語句連接的時(shí)候需要用到
比如連接時(shí)候,某個(gè)字段沒有值但是又要左連接到其他表上 就會(huì)顯示空,
isnull可以判斷是否是NULL,如果是給個(gè)默認(rèn)值
isnull("字段名","默認(rèn)的數(shù)據(jù)")
SqlServer中的null值與IsNull函數(shù)
NULL 值的三大特點(diǎn),分別是:1)NULL值不參加統(tǒng)計(jì);2)NULL值不進(jìn)入計(jì)算表達(dá)式;3)不能與其它值進(jìn)行比較。
所謂NULL值不參加統(tǒng)計(jì) 即 在使用統(tǒng)計(jì)函數(shù)時(shí),凡是涉及到 NULL值的都會(huì)被忽視掉(用詞可能不準(zhǔn)確),不要以為這不重要,其實(shí)在某些地方這是很重要的。而 NULL值不進(jìn)入計(jì)算也就是說在進(jìn)行數(shù)據(jù)之間的統(tǒng)計(jì)計(jì)算時(shí),若有為 NULL值的項(xiàng),那么它是不進(jìn)入即不參加計(jì)算的。這也是一個(gè)不容忽視的問題。這即使在生活中也是常見的。就好比如說一個(gè)人的獎(jiǎng)金為NULL值(沒有錄入數(shù)據(jù)或其它的原因,不做探討),而他的基本工資總不會(huì)為 0 吧?!(如果為0,早就被T了),月末算總工資的時(shí)候把基本工資加上獎(jiǎng)金,而若是獎(jiǎng)金為 NULL值,總工資 = 基本工資 + 獎(jiǎng)金(NULL),那么當(dāng)此種情況發(fā)生時(shí),總工資 = 基本工資 ?
肯定的回答是:不等于。因?yàn)楠?jiǎng)金為 NULL值,NULL值代表具體的什么值?都不知道。而不知道NULL值到底是多少,那么又怎么能進(jìn)行計(jì)算呢?所以總工資等于 NULL 的,也是不確定的。這樣,還有員工敢在公司嗎?萬一你來個(gè)總工資的 NULL 為真的空了,那還做什么工作???!這就涉及到一個(gè)強(qiáng)制轉(zhuǎn)換的問題,即把 NULL值強(qiáng)制轉(zhuǎn)換為 0 ,讓其具備業(yè)務(wù)意義。而強(qiáng)制轉(zhuǎn)換的關(guān)鍵字就是 IS ,語法即 IS NULL;這樣就可以進(jìn)行涉及 NULL值的計(jì)算了。
不過 NULL值也不是對(duì)所有的統(tǒng)計(jì)函數(shù)都有影響。一般來說。統(tǒng)計(jì)平均值(AVG)時(shí), NULL值是一定會(huì)有影響的;統(tǒng)計(jì)最小值(MIN)時(shí), NULL值是可能會(huì)對(duì) MIN 有影響,在我認(rèn)為是有點(diǎn)隨機(jī)性質(zhì);統(tǒng)計(jì)最大值(MAX)或統(tǒng)計(jì)和(NULL)時(shí),NULL值是對(duì)其完全沒有影響的。
所以又有一種說法是:null值不參加統(tǒng)計(jì),不參加計(jì)算,只能用is判斷。
判斷Null值語句:select * from 表 where 字段 is null;
轉(zhuǎn)換null值語句:select 字段1,字段2,字段3,is null(字段3,'某個(gè)值') from 表;
總之,我們要認(rèn)真對(duì)待 NULL值,最好在使用統(tǒng)計(jì)函數(shù)時(shí),都加上 IS NULL,以防意外出現(xiàn)。
sqlserver 中isnull的用法一例
數(shù)據(jù)庫(kù)中有一列記錄文章的訪問次數(shù)。我現(xiàn)在要實(shí)現(xiàn)的功能是,每刷新一次頁(yè)面。 訪問次數(shù)+1。sql語句,art_count為訪問次數(shù),int類型。
update article set art_count="(art_count+1) where art_id="3 但如果art_count為NULL,則不起作用。
如果是oracle用decode可以很容易的實(shí)現(xiàn)此功能。sqlserver中如何實(shí)現(xiàn)類似的功能呢?
sqlserver中有一個(gè)函數(shù)isnull,此函數(shù)有兩個(gè)參數(shù)isnull(p1,p2)其用法是如果p1為null,則用p2代替。
此函數(shù)類似oracle的nvl。例如
SELECT AVG(ISNULL(price, $10.00)) FROM titles 受到此函數(shù)的啟發(fā)我這樣寫的sql語句
update article set art_count="(isnull(vote_count,0)+1) where art_id="3 "
比如連接時(shí)候,某個(gè)字段沒有值但是又要左連接到其他表上 就會(huì)顯示空,
isnull可以判斷是否是NULL,如果是給個(gè)默認(rèn)值
isnull("字段名","默認(rèn)的數(shù)據(jù)")
SqlServer中的null值與IsNull函數(shù)
NULL 值的三大特點(diǎn),分別是:1)NULL值不參加統(tǒng)計(jì);2)NULL值不進(jìn)入計(jì)算表達(dá)式;3)不能與其它值進(jìn)行比較。
所謂NULL值不參加統(tǒng)計(jì) 即 在使用統(tǒng)計(jì)函數(shù)時(shí),凡是涉及到 NULL值的都會(huì)被忽視掉(用詞可能不準(zhǔn)確),不要以為這不重要,其實(shí)在某些地方這是很重要的。而 NULL值不進(jìn)入計(jì)算也就是說在進(jìn)行數(shù)據(jù)之間的統(tǒng)計(jì)計(jì)算時(shí),若有為 NULL值的項(xiàng),那么它是不進(jìn)入即不參加計(jì)算的。這也是一個(gè)不容忽視的問題。這即使在生活中也是常見的。就好比如說一個(gè)人的獎(jiǎng)金為NULL值(沒有錄入數(shù)據(jù)或其它的原因,不做探討),而他的基本工資總不會(huì)為 0 吧?!(如果為0,早就被T了),月末算總工資的時(shí)候把基本工資加上獎(jiǎng)金,而若是獎(jiǎng)金為 NULL值,總工資 = 基本工資 + 獎(jiǎng)金(NULL),那么當(dāng)此種情況發(fā)生時(shí),總工資 = 基本工資 ?
肯定的回答是:不等于。因?yàn)楠?jiǎng)金為 NULL值,NULL值代表具體的什么值?都不知道。而不知道NULL值到底是多少,那么又怎么能進(jìn)行計(jì)算呢?所以總工資等于 NULL 的,也是不確定的。這樣,還有員工敢在公司嗎?萬一你來個(gè)總工資的 NULL 為真的空了,那還做什么工作???!這就涉及到一個(gè)強(qiáng)制轉(zhuǎn)換的問題,即把 NULL值強(qiáng)制轉(zhuǎn)換為 0 ,讓其具備業(yè)務(wù)意義。而強(qiáng)制轉(zhuǎn)換的關(guān)鍵字就是 IS ,語法即 IS NULL;這樣就可以進(jìn)行涉及 NULL值的計(jì)算了。
不過 NULL值也不是對(duì)所有的統(tǒng)計(jì)函數(shù)都有影響。一般來說。統(tǒng)計(jì)平均值(AVG)時(shí), NULL值是一定會(huì)有影響的;統(tǒng)計(jì)最小值(MIN)時(shí), NULL值是可能會(huì)對(duì) MIN 有影響,在我認(rèn)為是有點(diǎn)隨機(jī)性質(zhì);統(tǒng)計(jì)最大值(MAX)或統(tǒng)計(jì)和(NULL)時(shí),NULL值是對(duì)其完全沒有影響的。
所以又有一種說法是:null值不參加統(tǒng)計(jì),不參加計(jì)算,只能用is判斷。
判斷Null值語句:select * from 表 where 字段 is null;
轉(zhuǎn)換null值語句:select 字段1,字段2,字段3,is null(字段3,'某個(gè)值') from 表;
總之,我們要認(rèn)真對(duì)待 NULL值,最好在使用統(tǒng)計(jì)函數(shù)時(shí),都加上 IS NULL,以防意外出現(xiàn)。
sqlserver 中isnull的用法一例
數(shù)據(jù)庫(kù)中有一列記錄文章的訪問次數(shù)。我現(xiàn)在要實(shí)現(xiàn)的功能是,每刷新一次頁(yè)面。 訪問次數(shù)+1。sql語句,art_count為訪問次數(shù),int類型。
update article set art_count="(art_count+1) where art_id="3 但如果art_count為NULL,則不起作用。
如果是oracle用decode可以很容易的實(shí)現(xiàn)此功能。sqlserver中如何實(shí)現(xiàn)類似的功能呢?
sqlserver中有一個(gè)函數(shù)isnull,此函數(shù)有兩個(gè)參數(shù)isnull(p1,p2)其用法是如果p1為null,則用p2代替。
此函數(shù)類似oracle的nvl。例如
SELECT AVG(ISNULL(price, $10.00)) FROM titles 受到此函數(shù)的啟發(fā)我這樣寫的sql語句
update article set art_count="(isnull(vote_count,0)+1) where art_id="3 "
相關(guān)文章
SQL中的單條件判斷函數(shù)IF和多條件判斷CASE WHEN的用法
MySQL提供了IF、IFNULL、CASE等條件判斷函數(shù),本文就來介紹一下SQL中的單條件判斷函數(shù)IF和多條件判斷CASE WHEN的用法,感興趣的可以了解一下2023-10-10系統(tǒng)存儲(chǔ)過程,sp_executesql
系統(tǒng)存儲(chǔ)過程,sp_executesql...2006-12-12使用BULK INSERT大批量導(dǎo)入數(shù)據(jù) SQLSERVER
使用BULK INSERT大批量導(dǎo)入數(shù)據(jù) SQLSERVER,需要的朋友可以參考下。2011-12-12淺析SQL Server 聚焦索引對(duì)非聚集索引的影響
本篇文章對(duì)SQL Server的聚焦索引和非聚集索引進(jìn)行簡(jiǎn)單分析,從而總結(jié)出聚焦索引對(duì)非聚集索引的影響。有興趣的朋友可以看下2016-12-12sql server中的任務(wù)調(diào)度與CPU深入講解
這篇文章主要給大家介紹了關(guān)于sql server中任務(wù)調(diào)度與CPU的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05SQLSERVER中得到執(zhí)行計(jì)劃的兩種方式
得到執(zhí)行計(jì)劃的方式有兩種:一種是在指令的前面打開一些開關(guān),讓執(zhí)行計(jì)劃信息打在結(jié)果集里,這種方法比較適合在一個(gè)測(cè)試環(huán)境里對(duì)單個(gè)語句調(diào)優(yōu);另一種方法是使用SQL Trace里的事件跟蹤來跟蹤語句的執(zhí)行計(jì)劃,感興趣的朋友可以了解下2013-01-01安裝完成后如何找回SQL Server實(shí)例安裝時(shí)的序列號(hào)
當(dāng)我們需要再次安裝sqlserver時(shí),如何找回sqlserver實(shí)例安裝時(shí)的序列號(hào)呢?下面,跟著腳本之家小編一起學(xué)習(xí)安裝完成后如何找回SQL Server實(shí)例安裝時(shí)的序列號(hào),需要的朋友可以參考下2015-09-09