oracle語句書寫常見問題
1.包含空值的表達式都為空
例:select a,b,a*12,a*12+b from test 若a為null,則a*12和a*12+b為null,若b為null,則a*12+b也為null。
nvl和nvl2濾空函數,nvl(a,b)判斷a是否為Null,如果為null,返回b,否則返回a;nvl2(a,b,c)判斷a是否為null,如果為null,返回c,不為null返回b。
2.null永遠不=null,判斷一個值是否為null。應該用 is null 或者is not null
例子:select * from emp where a=null 執行失敗
3.oracle連接符 || 相當於java中對String的相加
例子: select ‘Hello‘||‘ World‘ from dual;
dual為oracle中內置的偽表。oracle中from後必須跟隨一張表名,若select屬性不跟任何表相關,則使用from dual;
4.oracle中大小寫敏感,mysql中大小寫不敏感。
例子:select * from emp where a="King" 和select * from emp where a = "KING" 的結果是不一樣的,而在mysql中結果相同。
5.oracle中日期格式敏感。where中日期過濾條件必須符合預定義的日期格式。默認的格式是DD-MON-RR
6.between .. and .. 包含邊界,小值在前,大值在後。
7.如果集合中有null值,不能使用not in,可以使用in
例子:select * from emp where deptno not in(10,20,null);查詢不出數據
8.模糊查詢轉義字符的例子
例子:select * from emp where ename like ‘%\_%‘ escape ‘\‘
9.oracle的事務是自動開啟的,mysql的事務手動開啟
10.where語句的解析順序是從右往左的
例子:where condition1 and condition2;先執行condition2.
盡量把容易false的語句寫在後面,效率更高。
11.order by 後面可以跟列名,表達式,別名,序號
例子:order by sal;order by sal*12;order by 年薪;order by 4;
12.order by 排序時,如果排序的列有null值,默認null顯示在後面,oracle中null值最大
例子:order by conn desc nulls last;
如果不加nulls last,conn為null的記錄為顯示在最上方,加上nulls last,含有null值的記錄便會出現在最下方
oracle語句書寫常見問題