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 ROWNUM <= 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巧取指定记录与巧用外关联查询问题。
本文将为大家介绍采用minus语句及采用子查询来取得指定记录的方法,利用外连接替代not in语句进行外关联查询。
Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录
Oracle SQL 语句多表关联查询 Oracle SQL 语句多表关联查询是数据库管理系统中的一种常见查询方式,它可以从多个表中检索数据,满足业务需求。本文将详细介绍 Oracle SQL 语句多表关联查询的知识点,包括字符串和...
### Oracle 查询相邻上下行值 #### 背景与需求 在处理时间序列数据或具有某种排序的数据时,经常需要查询某一行记录与其相邻行(前一行或后一行)的数据。这种需求在财务分析、时间序列分析等领域非常常见。例如,...
### Oracle分页查询详解 #### 一、分页查询的重要性 在数据库操作中,分页查询是一项非常重要的技术。尤其当处理大量数据时,一次性获取所有数据不仅会消耗大量的网络带宽,还可能导致前端页面加载缓慢,用户体验...
在这里,由于使用了分页,因此指定了一个返回的最大记录数,NESTED LOOP 在返回记录数超过最大值时可以马上停止并将结果返回给中间层,而 HASH JOIN 必须处理完所有结果集(MERGE JOIN 也是)。那么在大部分的情况下...
根据提供的标题、描述、标签及部分内容,我们可以了解到本篇文章主要关注的是如何在Oracle数据库中进行主外键查询,包括查询表结构以及通过主外键关联表名的方式。下面将详细介绍这些知识点。 ### 一、Oracle数据库...
本话题主要聚焦于如何在Oracle、MySQL和SQL Server这三种主流关系型数据库中实现分页联合查询。 首先,我们来看Oracle数据库的分页查询。Oracle使用ROWNUM关键字来实现分页。例如,如果我们想获取第10到20条记录,...
在IT领域,尤其是在数据库管理与应用中,Oracle作为一款领先的企业级关系数据库管理系统,其数据表与查询功能是核心组成部分。本次将从给定的文件信息出发,深入解析Oracle数据表与查询的关键知识点,旨在为初学者...
- **START WITH 子句**:这里指定了递归查询的起点,即当 `relation` 字段值为 `1` 的记录作为根节点开始查询。 - **CONNECT BY PRIOR 子句**:定义了递归关系。在这里,`PRIOR id` 表示当前记录的父节点(上一级)...
Oracle查询效率是数据库管理员和开发人员关注的重要话题,因为它直接影响到数据库系统的性能和响应时间。以下是一些关于提高Oracle查询效率的关键知识点: 1. **选择正确的表名顺序**:在FROM子句中,应将记录数量...
Oracle数据库应用教程--子查询与高级查询是指在Oracle数据库应用中使用子查询和高级查询来实现复杂的数据查询和处理。子查询是一种嵌套的SELECT语句,可以在WHERE、HAVING和 FROM子句中使用,以便实现复杂的数据查询...
Oracle 数据库查询是数据库管理员和开发人员日常工作中不可或缺的一部分,高效和精确的查询技巧能够显著提升工作效率和系统性能。以下是对标题和描述中提到的Oracle查询十个小技巧的详细解释: 1. 利用连接符连接多...
在这个场景下,通过`prior id = parentid`指明了父子节点间的关联规则:每个记录的`id`字段应与其父节点的`parentid`字段相匹配。 ### 实现步骤详解 假设我们有一个名为`t_product_type`的产品类型表,其中包含...
Oracle数据库的多表查询是数据库操作中的核心技能之一,它涉及到如何从两个或更多个相关表中检索数据。本章的PPT课件主要讲解了如何进行多表查询,包括等值连接、非等值连接、外连接以及自连接等多种连接类型。 1. ...
总的来说,这个资源包提供了一个SSM环境下,结合MySQL和Oracle数据库进行分页查询的实例,对于初学者理解SSM框架与数据库的交互,以及掌握分页查询的实现方法,是非常有价值的参考资料。在实际项目中,合理利用分页...
关联子查询则是将一个查询的结果与另一个查询关联起来,例如,找出没有订单的客户:`SELECT customers.customer_name FROM customers WHERE customer_id NOT IN (SELECT DISTINCT customer_id FROM orders)` ...
在没有指定关联条件的情况下,简单的逗号分隔多个表名会导致笛卡尔积,即每张表的记录与另一张表的所有记录进行组合,产生大量的无用结果。通过指定关联字段(共享的键),如`emp.deptno=dept.deptno`,可以消除...
本章主要探讨了如何在Oracle环境中进行多表查询,包括等值连接、不等值连接、外连接以及自连接等概念,以帮助用户更有效地从多个关联的表中获取所需的数据。 首先,等值连接是查询中常用的连接类型,它基于两个或多...