電郵:
部落格:http://wallimn.bokee.com
記錄一些在開發過程中,費了些事或者走了些彎路才解決的問題。
希望能給網友帶來些幫助。
1.關於層次查詢
select * from employees start with employee_id =100 connected by proior employee_id=manager_id;
這種層次查詢,相信大部分人都知道。但如何保持層次關係並進行排序呢?
oracle有個關鍵字:siblings專門用來解決這個問題。
寫法如下:order siblings by employee_id
這種排序,在層次查詢與樹形控制項結合使用的時候尤其有用。
2.橫向顯示多個依據不同條件的進行統計的count()結果
如,統計每個部門的總人數、及男性數量及女性數量
我使用的原始方法是:
select count(*) ,(select count(*) from employees where ***='1') as male,(select count(*) from employees where ***='0') as female from employees group by dept_id
可以解決問題,但速度很慢。今天在網上看到乙個好方法,記錄如下:
select count(*) ,count(case when ***='1' then 1 else null end) as male,count(case when ***='0' then 1 else null end) as female from employees group by dept_id
很巧妙的使用了count的特性及case,很不錯。
3.今天發現oracle很特別
這個語句不能用:insert into mytab (select * from mytab_tmp order by id)
注:mytab表的寫了個觸發器,要求按順序處理插入的資料。
害得我只好這樣寫:insert into mytab (select * from (select * from mytab_tmp order by id))
4.rownum用法
select * from (select rownum row_id ,month,sell from (select month,sell from sale group by month,sell))
where row_id between 5 and 9
5.oracle計算時間差的方法
總結了一下:
天:round(to_number(end_date - start_date))
小時:round(to_number(end_date - start_date) * 24)
分鐘:round(to_number(end_date - start_date) * 24 * 60)
秒:round(to_number(end_date - start_date) * 24 * 60 * 60)
毫秒:round(to_number(end_date - start_date) * 24 * 60 * 60 * 60)
oracle高階sql指南
正在編寫oracle高階sql開發指南,包含開發中常用的oracle sql技術,以及複雜的sql分析技術,效能調整等問題。並且收錄一些比較優秀的sql。下面是暫定目錄 advanced sql in oracle 1.集合操作 2 1.1.union 和union all 21.2.interse...
oracle 技巧 sql 優化
it168 技術文件 一 問題的提出 在應用系統開發初期,由於開發資料庫資料比較少,對於查詢sql語句,複雜檢視的的編寫等體會不出sql語句各種寫法的效能優劣,但是如果將應用系統提交實際應用後,隨著資料庫中資料的增加,系統的響應速度就成為目前系統需要解決的最主要的問題之一。系統優化中乙個很重要的方面...
SQL高階查詢的一些技巧
高階查詢的一些技巧 1.使用and時,盡量將很可能不為真的條件放在前面 2.使用or運算子時,盡量將最可能為真的條件放在前面 3.distinct比order by更快 select memberid from orders group by memberid select distinct mem...