筆者平常工做中經常使用到的sql語句,現總結以下,留做往後查看。 一、按照兩列中的最大值取 ,只取兩列其中的一列 SELECT * FROM t_doc T ORDER BY GREATEST(T.Load_Count,T.Read_Count) desc 二、取兩列之和 select t.*,(nvl(T.Load_Count,0)+nvl(T.Read_Count,0 )) as c FROM t_doc T order by c desc 三、取兩列字符串鏈接 select T.Load_Count||T.Read_Count FROM t_doc T 四、獲取oracle數據庫當前用戶下全部表名和表名的註釋 select a.TABLE_NAME,b.COMMENTS from user_tables a,user_tab_comments b WHERE a.TABLE_NAME=b.TABLE_NAME order by TABLE_NAME 五、兩列結果合併爲一列輸出(兩列數據類型必須同樣) select a from tb union all select b from tb 六、將一列多行拼接成一行 select wmsys.wm_concat(name) from table_name //wmsys.wm_concat()拼接字段 以逗號分開 七、 不是 SELECTed 表達式
Oracle 數據庫,執行下面語句出現錯誤「ORA-01791: 不是 SELECTed 表達式」:
select distinct t.name from auth_employee t order by t.auth_employee_id asc
原來:SELECT語句中含有DISTINCT關鍵字或者有運算符時,排序用字段必須與SELECT語句中的字段相對應。
網上搜到解釋以下:
在ORDER BY中指定多個列,結果將先按照子句中的第一列排序,而後第二個,依此類推。
在SELECT中未出現的列名也可用於ORDER BY 子句中,只要TABLE中有就行。
但若是SELECT子句中出現了DISTINCT關鍵字,則只能用出現過的列名,
並且若是SELECT子句中使用了任何運算符,在ORDER BY 子句中必須保持和SELECT子句中表達式徹底一致,不然出現錯誤:「ORA-01791: 不是 SELECTed 表達式」。sql
八、查詢數據庫表的建表時間數據庫
SELECT OBJECT_NAME, CREATED FROM USER_OBJECTS WHERE object_type = 'TABLE' ORDER BY CREATED DESCoracle
九、查詢序列的當前值ui
select ANALYSIS_FIX_SEQ.currval from dual (注:此sql只能在nextval以後纔可使用)對象
select last_number from User_Sequences where sequence_name='ANALYSIS_FIX_SEQ'排序
十、恢復誤刪除的數據字符串
create table quick as
SELECT * FROM T_LOCATION_ALARM AS OF TIMESTAMP to_timestamp('2013-11-29 11:00:00', 'yyyy-mm-dd hh24:mi:ss');io
這樣能夠查詢到這個時間點的數據table
十一、恢復誤刪除的PL/SQL對象ast
SELECT r.object_name ,r.original_name,r.operation ,r.droptime FROM user_recyclebin r order by droptime desc;
經過這個sql就能夠查詢到已經刪除的對象。
再經過下面這個sql就能夠查詢到對象的內容,不過須要管理權限
SELECT NAME, TEXT FROM DBA_SOURCE AS OF TIMESTAMP TO_TIMESTAMP('2013-11-29:11:20:15', 'yyyy-mm-dd hh24:mi:ss')