前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单实用的sql小技巧(第一篇) (r3笔记第36天)

简单实用的sql小技巧(第一篇) (r3笔记第36天)

作者头像
jeanron100
发布2018-03-14 17:54:48
4970
发布2018-03-14 17:54:48
举报

今天和大家简单分享几个实用的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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-10-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档