簡單實用的sql小技巧(第一篇)
有些其實也不算是sql的技巧,可能大家在寫sql語句的時候沒有意識到我們可以透過一條sql語句實現一些貌似複雜的功能。
首先來建立測試用表。
create table test_obj as select *from dba_objects;
先隨機抽出5條記錄看看
set linesize 200
select object_id,object_name from test_obj where rownum<=5;
OBJECT_ID OBJECT_NAME
---------- --------------------
20 ICOL$
46 I_USER1
28 CON$
15 UNDO$
29 C_COBJ#
SQL> / --再看一次結果
OBJECT_ID OBJECT_NAME
---------- --------------------
20 ICOL$
46 I_USER1
28 CON$
15 UNDO$
29 C_COBJ#
我們來隨機的檢視5條記錄,這個對於資料的檢查工作還是蠻有用的。
可以很明顯的看到,兩種情況顯示的資料還是差別很大的。
select *from
(
select object_id,object_name from test_obj
order by dbms_random.value()
)
where rownum<=5;
OBJECT_ID OBJECT_NAME
---------- ------------------------------
1635 V_$TIMER
9937 KU$_TAB_SUBPART_VIEW
4291 EXU10TAB
5559 USER_CHANGE_NOTIFICATION_REGS
13953 WRH$_LATCH_PK
還有一個是關於Null值的處理,如果查詢的結果中含有Null值,能夠統一的處理,是都顯示在開頭還是末尾。
因為資料量較大,所以看看如果Null值在最開頭的情況。
select *from (
select object_id,object_name,object_type from test_obj order by object_id nulls first
) where rownum<10;
/
OBJECT_ID OBJECT_NAME OBJECT_TYPE
---------- ------------------------------ -------------------
TEST DATABASE LINK
AAA DATABASE LINK
2 C_OBJ# CLUSTER
3 I_OBJ# INDEX
4 TAB$ TABLE
5 CLU$ TABLE
6 C_TS# CLUSTER
7 I_TS# INDEX
8 C_FILE#_BLOCK# CLUSTER
如果需要null值在末尾,則使用Nulls last
這個時候我們提高一個層次,比如我們已經知道有些列含有Null值,如果在輸出結果排序的時候,如果object_type值是'DATABASE LINK'話,就按照object_name來排序,如果不是,則按照object_id來排序。
聽起來這個寫一個簡單的sql語句還是蠻有難度的。
可以這樣試試。
select *from
(
select *from (
select object_id,object_name,object_type from test_obj order by object_id nulls first
) where rownum<10
)
order by case when object_type='DATABASE LINK' then object_name else object_id||'' end
OBJECT_ID OBJECT_NAME OBJECT_TYPE
---------- ------------------------------ -------------------
2 C_OBJ# CLUSTER
3 I_OBJ# INDEX
4 TAB$ TABLE
5 CLU$ TABLE
6 C_TS# CLUSTER
7 I_TS# INDEX
8 C_FILE#_BLOCK# CLUSTER
AAA DATABASE LINK
TEST DATABASE LINK
畢竟只要我們能夠在滿足業務而且效能影響不大的情況下,使用一條sql語句還是能夠實現蠻多的複雜需求的。何樂而不為。
值得一提的是,如果在最後的部分,沒有間接的對Object_id做型別的轉換的話,會報如下的錯誤。所以可以做個小把戲,間接轉換為char型。
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1309804/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 5個看分時圖買股票的小技巧 簡單實用
- 簡單實用!在Mac上自定義Safari起始頁小技巧!Mac
- 相見恨晚的幾個Excel小技巧,簡單實用又高效!Excel
- 強烈推介的幾個微信小程式開發小技巧,簡單又實用微信小程式
- 5個Word簡單實用小技巧,但真正會使用的人很少
- 簡單介紹5個python的實用技巧Python
- SQL SERVER實用技巧SQLServer
- 織夢CMS最簡單實用的SQL語句SQL
- Tomcat 實用小技巧Tomcat
- 簡單實用的pandas技巧:如何將記憶體佔用降低90%記憶體
- Python五種實用的小技巧Python
- 實用的簡訊群發技巧
- 簡單又實用的pandas技巧:如何將記憶體佔用降低90%記憶體
- Finder簡單人性化的隱藏小技巧分享~
- mysql sql 中實戰小技巧持續更新MySql
- 一些 實用的 git 小技巧Git
- 分享幾個 SpringBoot 實用的小技巧Spring Boot
- 生信小技巧:實用的命令(3)
- 自定義View實用小技巧View
- 5個簡單實用的MacOS技巧讓你的Mac工作效率翻倍Mac
- MacBook中的那些超級實用小技巧Mac
- Flutter 簡單實現手寫瀑布流 第一篇Flutter
- 實用小技巧! 修改MySQL密碼MySql密碼
- 幾個SQL查詢小技巧SQL
- Redis 實用小技巧——批次刪除指定的 keyRedis
- 技術:超級實用的電腦小技巧
- 簡單實用的CODE REVIEW工具View
- 最佳實踐|如何寫出簡單高效的 Flink SQL?SQL
- Laravel 實用小技巧 —— Artisan 入門(下)Laravel
- Laravel 實用小技巧 —— Artisan 入門(上)Laravel
- 電腦實用7個小技巧分享
- 寶塔簡單實用
- docker簡單實用教程Docker
- sql語句小技巧-持續更新SQL
- 乾貨學起來!分享4個簡單實用的Word技巧,請低調收藏!
- 簡單實用的JDK版本切換JDK
- 簡單實現Laravel獲取當前執行的SQLLaravelSQL
- Pandas 資料分析 5 個實用小技巧
- MySql和簡單的sql語句MySql