1.區分sql命令和sqlplus(oracle提供)-->sql不能縮寫,sqlplus能夠java
2.mysql 不區分字符串的大小寫, oracle區分mysql
3.oracle 查詢系統參數設置 : select * from v$nls_parameters;sql
alter session set parameter =' ';數據庫
空值問題:session
(1)null !=null 數據庫中null是未賦值的意思,不是表明空格或0oracle
(2)若是集合中含有null ,不能使用 not in 但能夠使用in 函數
如: select * from emp where deptno not in(10,20,null)-->錯誤性能
(3)組函數會自動濾空,能夠嵌套濾空函數來屏蔽.net
如:comm中含有10個空值3d
count(*)爲15行記錄
count(comm)爲5行記錄(已經濾空值)
4.查詢帶有下滑線的名字-->select * from table where name like '%\_%' escape '\' ;
5.desc 排序只做用於 最近的一列
6.排序時null在最後 select * from table order by comm desc nulls last(只能在oracle中)
7.ROUND--> 四捨五入 TRUNC截斷 MOD求餘
8:條件表達式
在sql語句中使用IF-THEN-ELSE邏輯
使用兩種方法:
CASE表達式:SQL99的語法,相似basic ,比較繁瑣
select ename,job,sal 漲前,
case job when 'PRESIDENT' then sal+1000
when 'MANAGER' then sal+800
else sal+400
end 漲後
from emp;
DECODE函數:Oracle本身的語法,相似java,比較簡潔
select ename,job,sal 漲前,
decode(job,'PRESIDENT',sal+1000,
'MANAGER',sal+800,
sal+400) 漲後
from emp
9:where 和having的區別-->where 條件中不能有組函數
10:group by 語句的加強
group by deptno , job
+group by deptno
+group by null
=
group by rollup(deptno,job)
抽象:
group by rollup(a,b) = group by a,b
+group by a
+group by null
11:笛卡爾全集:兩張 表的列數相加行數相成,應該儘可能使用鏈接條件,避免使用笛卡爾全集,由於笛卡爾全集中 可能有錯誤
13:注意,自鏈接有性能問題(所產生的笛卡爾集是表記錄的平方,若是有1億條記錄,呵呵~)
14:層次查詢,當你查詢的數據是一顆樹的時候,使用層次查詢取代自鏈接
(1)僞列表示節點深度(能夠不寫)
select level , empno, ename, mgr
from emp
connect by prior empno=mgr
start with mgr is null (根節點)
order by empno
/
15
16:
17:
18:
19: