有个经典的题目:1-100之间的数字(不重复)存放在表里,共95行一列,但是里面缺了5个数字,怎么用SQL最快找出那五个数字。

我们先来看看Oracle数据库如何实现,如下所示,我们先准备测试环境和数据。

SQL> create table t( id number(10));

 

Table created.

 

SQL> begin

  2   for i in 1 .. 100

  3   loop

  4     insert into t

  5     values(i);

  6   end loop;

  7   commit;

  8  end;

  9  /

 

PL/SQL procedure successfully completed.

 

SQL> delete from t where id in (13, 26,39,52,65);

 

5 rows deleted.

 

SQL> commit;

 

Commit complete.

 

SQL> 

那么我们借助dba_objects这个视图(当然你借助其他表或视图都OK),生成1-100的自然数,然后和T表使用ANTI JOIN来得到查询结果。如下所示

SQL> select rn from 

  2  ( select rownum as rn from dba_objects where rownum <=100) tt

  3   where tt.rn not in(select id from t);

 

        RN

----------

        65

        52

        13

        39

        26

 

SQL> 

接下来我们看看SQL Server数据库如何实现,如下所示,我们先准备测试环境和数据。

CREATE TABLE T ( ID  INT);

 

DECLARE @Index INT =1;

 

WHILE @Index <= 100

BEGIN    

    INSERT INTO T VALUES(@Index);

    SET @Index +=1;

END

GO

 

DELETE FROM T WHERE ID IN(13, 26,39,52,65);

SELECT  RN

FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY object_id ) AS RN

          FROM      sys.objects

        ) TT

WHERE   TT.RN <= 100

        AND TT.RN NOT IN ( SELECT   ID

                           FROM     T );

后面想是否递归SQL也能实现, 测试、验证自己想法的时候,发现递归SQL并不适合这样的场景。上面方法应该算是最快的方法了。当然如果你有其它更好的方法,也请多多指教。

SQL Challenge ——快速找到1-100之间缺失的数的更多相关文章

  1. 【ShareCode】不错的技术文章 -- 如何使用异或(XOR)运算找到数组中缺失的数?

    如何使用异或(XOR)运算找到数组中缺失的数? 今天给大家分享一篇关于使用XOR(异或)运算找到数组中缺失的数的问题. 在一次Javascript面试中,有这么一个问题: 假设有一个由0到99(包含9 ...

  2. m_Orchestrate learning system---二十七、修改时如何快速找到作用位置

    m_Orchestrate learning system---二十七.修改时如何快速找到作用位置 一.总结 一句话总结:找人,找起作用的位置真的重要,找到就事半功倍了 加载页面的时候观察在f12的e ...

  3. mysql 常用 sql 语句 - 快速查询

    Mysql 常用 sql 语句 - 快速查询 1.mysql 基础 1.1 mysql 交互         1.1.1 mysql 连接             mysql.exe -hPup    ...

  4. 快速找到Office应用程序安装路径

    p{ font-size: 15px; } .alexrootdiv>div{ background: #eeeeee; border: 1px solid #aaa; width: 99%; ...

  5. PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数

    PL/SQL Challenge 每日一题:2014-3-14 11gR2中带RELIES_ON子句的RESULT_CACHE函数 最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可 ...

  6. 5、如何快速找到多个字典中的公共键(key) 6 如何让字典保持有序 7 如何实现用户的历史记录功能(最多n条)

    5.如何快速找到多个字典中的公共键(key) from random import randint,sample #随机取数 # a = sample("ABCDEF",randi ...

  7. SQL执行计划Cost与性能之间的的关系

    关于执行计划Cost的三个疑问: 1. 执行计划的Cost越低,SQL就一定跑得越快吗?或者说Cost 和 执行时间成比例关系吗? 2. Oracle 默认产生的执行计划是Cost最低的吗? 3. 如 ...

  8. 你真的会玩SQL吗?EXISTS和IN之间的区别

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  9. 记一些之前忘记积累的问题(fiddler 学习、XP系统不能上网、XP不能装fiddler、注册表快速找到)

    记一些之前忘记积累的问题: fiddler学习:http://www.cnblogs.com/kingwolf_JavaScript/archive/2012/11/07/FiddlerUI.html ...

随机推荐

  1. objective-c 语法快速过(2)

    oc类的声明和定义的常见错误 1.只有类的声明,没有类的实现 2.漏了@end 3.@interface和@implementation嵌套,也就是@interface或者@implementatio ...

  2. EXP/IMP迁移案例,IMP遭遇导入表的表空间归属问题

    生产环境: 源数据库:Windows Server + Oracle 11.2.0.1 目标数据库:SunOS + Oracle 11.2.0.3 1.确认迁移需求:源数据库cssf 用户所有表和数据 ...

  3. 仿优酷Android客户端图片左右滑动(自动滑动)

    最终效果: 页面布局main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayou ...

  4. 为 Web 设计师准备的 20 款 CSS3 工具

    1.CSS3 Generator 2. Border Radius 3. CSS3 Maker 4. CSS3 Transforms 5. CSS3 Drop shadow generator 6. ...

  5. linux中的通配符与正则表达式

    在linux中,有通配符及正则表达式,那么什么是通配符和正则表达式,什么时候用?   通配符 它是由shell解析,并且一般用于匹配文件名,实际上就是shell解释器去解析的特殊符号,linux系统通 ...

  6. jquery如何判断checkbox(复选框)是否被选中 ...

    <script type="text/javascript" src="../lib/jQuery1.11.1.js"></script> ...

  7. 【原创】Kafka producer原理 (Scala版同步producer)

    本文分析的Kafka代码为kafka-0.8.2.1.另外,由于Kafka目前提供了两套Producer代码,一套是Scala版的旧版本:一套是Java版的新版本.虽然Kafka社区极力推荐大家使用J ...

  8. TypeError: invalid 'in' operand obj

    尝试在程序去访问远程的Web API,它在运行时,出现异常: TypeError: invalid 'in' operand obj 由于从服务器返回的数据是json.当我们需要得到这些数据时,还得需 ...

  9. Android声音播放实例代码

    布局文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=&q ...

  10. Asp.net 面向接口可扩展框架之应用程序上下文作用域组件

    在团队中推广面向接口开发两年左右,成果总体来说我还是挺满意的,使用面向接口开发的模块使用Unity容器配置的功能非常稳定,便于共享迁移(另一个项目使用只需要复制配置和调用接口即可),如果再配合上DI那 ...