简单实用的sql小技巧(第一篇)

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

 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

/

 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
)
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

时间: 2024-09-20 01:04:16

简单实用的sql小技巧(第一篇)的相关文章

12个非常实用的JavaScript小技巧【推荐】_javascript技巧

这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值.为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单.对于变量可以使用!!variable做检测,只要变量的值为:0.null." ".undefined或者NaN都将返回的是false,反之返回的是true.比如下面的示例: funct

分享12个非常实用的JavaScript小技巧_javascript技巧

在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值.为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单.对于变量可以使用!!variable做检测,只要变量的值为:0.null." ".undefined或者NaN都将返回的是false,反之返回的是true.比如下面的示例: func

12个非常实用的JavaScript小技巧

在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值.为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单.对于变量可以使用!!variable做检测,只要变量的值为:0.null." ".undefined或者NaN都将返回的是false,反之返回的是true.比如下面的示例: func

16个简单实用的.htaccess使用技巧_Linux

.htaccess 文件 (Hypertext Access file) 是Apache Web服务器的一个非常强大的配置文件,对于这个文件,Apache有一堆参数可以让你配置出几乎随心所欲的功能..htaccess 配置文件坚持了Unix的一个文化--使用一个ASCII 的纯文本文件来配置你的网站的访问策略. 这篇文章包括了16个非常有用的小技巧.另外,因为.htaccess 是一个相当强大的配置文件,所以,一个轻微的语法错误会造成你整个网站的故障,所以,在你修改或是替换原有的文件时,一定要备

JavaScript 小技巧(第一集)

javascript|技巧 第一集 如何用滑鼠控制Web页面 在这一部分首先要为你展示的javascript特性是将你的滑鼠移到这个不同颜色的连结上面,此时看看浏览器下的状态列有何结果,然后这样的功能我们可以与javascript的功能相结合.怎样做到的呢 以下就是这一个连结的作法: <a href="tpage.htm" > 在这儿你只要在传统 <a> 的标签中加入 onMouseOver 的 method 就可达成你要的效果了.这里的 window.stat

2007/12/23更新创意无限,简单实用(javascript log)_javascript技巧

在javascript开发过程中,如果总是使用alert的方式调试程序,在某些简单的程序中是可行的.  但是在通常的项目很复杂,这种方式已经很难满足,企业级开发的需要.  比如ajax项目中,存在一个3000行左右JS文件,其中存在各种自定义的javascript对象. 开发的过程中,总是需要在js程序执行到某个关键点的时候,监视自定义对象的值或状态, 判断执行结果是否是预期的样子,如果您通过alert看到某些关联对象的值,是很困难的. 存在以下两个明显的缺点:  1.假如一次执行中有n个关键点

个人总结mysql数据库13个实用SQL小技巧实例

1,使用CASE来重新定义数值类型 SELECT id,title,    (CASE date WHEN '0000-00-00' THEN '' ELSE date END) AS date    FROM your_table   SELECT id,title,    (CASE status WHEN 0 THEN 'open' WHEN 1 THEN 'close' ELSE 'standby' END) AS status    FROM your_table 2,查找重复的ema

SQL小技巧 又快又简单的得到你的数据库每个表的记录数

但是如何得到某个数据库所有的表的记录数,你要是用上面的方法估计得累死了.呵呵 下面提供如何借用sysindexes和sysobjects表来得到某个数据库每个表记录数的方法: 先给出SQL Server 2000版本的: 复制代码 代码如下: SELECT o.NAME, i.rowcnt FROM sysindexes AS i INNER JOIN sysobjects AS o ON i.id = o.id WHERE i.indid < 2 AND OBJECTPROPERTY(o.id

&amp;#106avascript 小技巧(第一集)

技巧 第一集 如何用滑鼠控制Web页面 在这一部分首先要为你展示的JavaScript特性是将你的滑鼠移到这个不同颜色的连结上面,此时看看浏览器下的状态列有何结果,然后这样的功能我们可以与JavaScript的功能相结合.怎样做到的呢 以下就是这一个连结的作法: <a href="tpage.htm" > 在这儿你只要在传统 <a> 的标签中加入 onMouseOver 的 method 就可达成你要的效果了.这里的 window.status 是用来让你可以在