Null 值是一個很特別的值。它既不是0,也不是空格。它的值是沒有意義的、未知的、不確定的。 Null 值一般的計算符用的是 ISNULL 和IS NOT NULL 來進行。
升序排序時,Null 排在最後,降序排序時null排在最前。 與NULL參與的算術運算結果均爲NULL
邏輯與(AND)算法
在and 邏輯表達式中,只要有F (假)其結果就爲F,如果沒有F,在AND邏輯表達式中有NULL的其結果就爲Null,只有當兩個條件都爲T時,其結果才爲T。
邏輯或(OR) 算法
在OR 邏輯表達式中,只要有T(真)其結果就爲T,如果沒有T,在OR 邏輯表達式中
有NULL的其結果就爲NULL,只有當兩個條件都爲F時,其結果才爲F。
邏輯非(NOT)算法
NOT T =F NOT F=T NOT NULL =NULL
運算符的優先級:
(1)算術運算符 (2)連接運算符 (3)比較(關係)運算符(4)IS NULL、IS NOT NULL、LIKE 、NOT LIKE、IN、NOT IN運算符(5)between 和Not Between運算符(6)Not 邏輯運算符(7)And邏輯運算符(8)OR 邏輯運算符
例如:selectename,job,sal from emp where job=’CLERK’ OR job=’SALEMAN’ AND sal>=1300; 按照運算符優先級,Oracle首先執行由紅體部分組成的條件,然後在執行其他條件。
NVL空值轉換函數。
因爲與Null進行的算術運算均爲NULL,所以有此函數。
NVL函數用於把一空值(NULL)轉換成某一實際的值,格式如下:
NVL(表達式1,表達式2)
如果表達式1爲空值(NULL),NVL返回值爲表達式2的值,否則返回表達式1的值。表達式1和表達式2可以爲數字型、字符型或日期型,但二者必須一致。例如:
對數字型: NVL(comm,0)
對字符型:NVL (TO_CHAR(comm),’NO Comment’)
對日期型:NVL(hiredate,’31-DEC-99’)
有經驗的開發者經常用此函數來避免因空值(NULL )產生的錯誤。
DECODE 函數
因爲SQL中沒有邏輯判斷語句(分支語句),所以Oracle引入了DECODE函數完成類似的功能。
Oracle的單值函數可以嵌套。函數的計算次序爲從裏到外。
NVL2 是對NVL 的一個擴充
For exemple: NVL2(comm,’sal+comm’,sal)”income” 首先測試comm,如果comm不爲空,就返回表達式sal+comm的值,如果爲空返回sal的值;返回值的列標爲income
NVL2(表達式1,表達式2,表達式3) 表達式2和表達式3可以是出了LONG以外的任何數據類型,表達式1可以是任何數據類型。如果表達式2和表達式3的數據類型不同,Oracle服務器把表達式3的數據類型轉換成表達式2的數據類型;此時如果表達式3爲空值,Oracle服務器就不進行數據類型轉換。NVL2函數返回值的數據類型與表達式2的數據類型相同。但表達式2的數據類型爲定長字符型CHAR時,NVL2函數返回值的數據類型爲變長字符型VARCHAR2
NULLIF函數
NULLIF(表達式1,表達式2) 該函數比較兩個表達式的值,如果相等就返回NULL,如果不等就返回表達式1 ,在此函數中表達式1不能爲NULL