有遇到一些SQL語法上的差異 和一些心得
簡單紀錄如下
1.查看某個Table的column
describe (table_name);
2. 查看所有TABLE
select * from tab;
3.
DROP TABLE後,該Table不會真的刪掉
而是存在垃圾桶裡
如果這時輸入命令
select * from tab;會發現有亂碼的table存在 那些就是在垃圾桶中 要將那些table完全清掉請使用
PURGE RECYCLEBIN;
其他操作詳見: http://www.oracle.com/technetwork/articles/sql/week5-10gdba-095853.html
4. 要將Table全清掉的方法
沒有Drop all table之類的指令,但我找到一個workaround
輸入下列SQL命令 會在Console印出刪除各Table的SQL命令
之後再手動輸入這些指令就好
select 'drop table '||table_name||' cascade constraints;' from user_tables;
參考資料: http://www.wretch.cc/blog/phoenixwu/16103368
5. 別名(Alias)使用上的不同
Oracle SQL可省略AS 關鍵字
但如果已經在SELECT裡使用AS關鍵字,那FROM裡必須去掉AS才行
範例:
SELECT CL.id AS CL_id , CL.name AS CL_name, CL.age AS CL_age, CL.address AS CL_address, CL.email as CL_email, PL.* FROM CLIENT CL, CLIENT_QUOTE CQ, QUOTE Q, POLICY PL WHERE CL.id = CQ.client AND CQ.quote = Q.id AND PL.quote = Q.id;
6.
nvl()這函數可以將取得null值時轉換成指定的預設值 用法: nvl(column,default) as alias 這個在需要作計算時很好用,可以把null轉成0讓aggregate function正常運算 範例:
SELECT taxid, nvl(income,0) as income FROM COMPANY
7. 如果Aggregate function內有多個屬性
例如我想要count(colA, colB, colC) 在Oracle SQL要用||區隔
SELECT agency FROM sell GROUP BY agency HAVING COUNT(distinct p_company||p_code||p_limit||p_coverage)>10
8. 可用條件rownum 來指定只取得第幾個欄位
SELECT name FROM agency WHERE rownum='1' ORDER BY taxid
沒有留言:
張貼留言