巧取指定记录与外关联查询

转载 2007年10月12日 09:58:00
 

  1 取得表中第6到第10条记录的值

  1.1 第一种方法,使用minus语句

  假设ddl语句如下:

  CREATE TABLE T(ID VARCHAR2(4) PRIMARY KEY, VALUE INT)

  那么第一种方法就是取出前5条,再取出前10条,然后采用集合运算的方法把前10条减去前5条就OK了,SQL语句如下

以下是引用片段:
  SELECT * FROM T WHERE ROWNUM <= 10
  MINUS
  SELECT * FROM T WHERE ROWNUM <= 5;


  1.2 另外一种方法,采用子查询

  子查询的这种方法相对比较复杂一点,不过性能要比刚才的集合相减要好一些。这种方法首先在子查询中得到前10条数据,顺路也取得前10条数据的rownum,然后再一次查询的时候取得刚才查询的rownum大于5的那些数据。SQL语句如下

以下是引用片段:
  SELECT ID, VALUE FROM
  (SELECT ID, VALUE, ROWNUM R FROM T WHERE R <= 10)
  WHERE
  R > 5;


  通过上面的语句,就得到了6到第10条数据了。

  2 利用外连接替代not in语句

  in语句还有not in语句的效率是非常的差的,因为数据库在遇到这两种语句的时候是要把数据进行一条一条的比对,如果in或者not in两侧的数据量在上万条的时候,进行比对的次数就是上亿次,很可能一个简单的sql语句就要执行半个小时以上。这种效率客户是肯定不能够接受的。那我们可以考虑两种方法进行替代,第一种就是采用exist语句和not exist语句,这种大家应该比较熟悉了。另外一种就是巧用外关联语句,这种方法可能大家不是很熟悉,我来稍微说一下。假设数据表的建表DDL语句为

  CREATE TABLE T1(ID VARCHAR2(4) PRIMARY KEY, VALUE INT)

  而in或者not in的表的建表DDL语句为

  CREATE TABLE T2(VALUE INT)

  Oracle中外关联采用的是(+)符号表示外关联,也就是说标识了(+)符号的部分在找不到对应的值的时候为NULL。下面是替代in语句的时候的SQL语句

以下是引用片段:
  SELECT T1.ID, T1.VALUE
  FROM T1, T2
  WHERE T1.VALUE = T2.VALUE(+)
  AND T2.VALUE IS NOT NULL;


  而类似的。替代not in语句的时候的SQL语句则为

以下是引用片段:
  SELECT T1.ID, T1.VALUE
  FROM T1, T2
  WHERE T1.VALUE = T2.VALUE(+)
  AND T2.VALUE IS NULL;


  大家可以试验一下,在数据量多的时候,采用外关联比用in或者not in的执行效率要高很多很多。

Oracle巧取指定记录以及巧用外关联查询

如何取得表中第6到第10条记录的值。  第一种方法,使用minus语句:  假设ddl语句如下:  CREATE TABLE T(ID VARCHAR2(4) PRIMARY KEY, VALUE I...
  • wenbingcai
  • wenbingcai
  • 2007-10-30 13:42:00
  • 331

巧取Oracle指定记录

1、取得表中第6到第10条记录的值   1.1 第一种方法,使用minus语句   假设ddl语句如下:   以下是引用片段: CREATE TABLE T(ID VARCHAR2(4...
  • yang8023tao
  • yang8023tao
  • 2013-05-08 21:39:10
  • 372

关联查询 内连接 左右外连接 完全外连接

SQL多表连接查询(详细实例) http://www.xker.com/page/e2012/0708/117368.html 本文主要列举两张和三张表来讲述多表连接查询。 新建...
  • yuliangliang092
  • yuliangliang092
  • 2016-04-06 15:36:34
  • 5074

MySQL中,关联查询的3种写法(USING/ON)

看看下面三个关联查询的 SQL 语句有何区别? SELECT * FROM score, student WHERE score.id = student.id ... SELECT * FROM ...
  • gaojinshan
  • gaojinshan
  • 2014-03-19 17:30:22
  • 44088

ORM之数据库关联查询

1 一对一关联:简单主外键对应 设备表,其中一个产品ID字段关联到一个具体产品 如何同时返回设备及其对应的产品信息   2 一对多关联:简单一对多 文章表、评论表,评论表中存储了所属文章的ID作为外键...
  • jiq408694711
  • jiq408694711
  • 2015-03-31 22:57:54
  • 1176

url转码外推

都是丰富的都是丰富的都是丰富的都是丰富的都是丰富的都是丰富的都是丰富的都是丰富的都是丰富的都是丰富的都是丰富的都是丰富的都是丰富的都是丰富的戏子软件...
  • peng5002
  • peng5002
  • 2017-02-20 17:09:14
  • 100

零基础学软件之Oracle11g 第二季 数据查询语言(DQL)

主讲内容: 第一讲 SQL语言概述 第二讲 SQL语言-简单查询 第三讲 SQL语言-筛选查询 第四讲 SQL语言-分组查询 第五讲 SQL语言-排序查询 第六讲 SQL关联查询-多表关联查询 第七讲 SQL关联查询-内连接 第八讲 SQL关联查询-外链接 第九讲 SQL关联查询-其他链接 第十讲 SQL语言-子查询
  • 2017年03月02日 16:24

SAP MM中的委外加工与信息记录

SAP MM中的委外加工与信息记录
  • SAPmatinal
  • SAPmatinal
  • 2014-12-18 12:39:28
  • 1993

子查询和关联查询 效率

MSDN对子查询的定义是这样的:      可以将一个查询的结果用作另一个查询的输入。可以将子查询的结果用作使用 IN( ) 函数、EXISTS 运算符或 FROM 子句的语句。   ...
  • luckarecs
  • luckarecs
  • 2011-12-30 16:16:00
  • 12703
收藏助手
不良信息举报
您举报文章:巧取指定记录与外关联查询
举报原因:
原因补充:

(最多只允许输入30个字)