ORACLE中查询第n条到第m条的数据记录的方法
2023-09-27 14:28:16 时间
SELECT * FROM ( SELECT 表名.*, ROWNUM AS CON FROM 表名 WHERE ROWNUM =N;
二、参考其它网上的方法
SQL/Oracle取出第 ...
用一句SQL取出第 m 条到第 n 条记录的方法
从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)
SELECT TOP n-m+1 *
FROM Table
WHERE (id NOT IN (SELECT TOP m-1 id FROM Table ))
--从TABLE表中取出第m到n条记录 (Exists版本)
SELECT TOP n-m+1 * FROM TABLE AS a WHERE Not Exists
(Select * From (Select Top m-1 * From TABLE order by id) b Where b.id=a.id )
Order by id
--m为上标,n为下标,例如取出第8到12条记录,m=8,n=12,Table为表名
Select Top n-m+1 * From Table
Where Id (Select Max(Id) From
(Select Top m-1 Id From Table Order By Id Asc) Temp)
Order By Id Asc
#1楼 [楼主] 2007-03-02 10:38 Athrun
直接取得数据库中的分页记录
前提是表中必须有主键
取得第M条记录之后的N条记录:
SELECT TOP N *
FROM [TABLE]
WHERE (ID NOT IN
(SELECT TOP M id
FROM [TABLE]
ORDER BY [ORDER]))
ORDER BY [ORDER]
Oracle中的实现,取得第M到N条记录: SELECT * FROM
(
SELECT * , ROWNUM AS CON FROM
(
SELECT * FROM [TABLE] ORDER BY [ORDER]
)
WHERE ROWNUM = N
)
WHERE CON
回复 引用 查看
查询表中连续的某几条记录
不要传任何列的条件参数,查询表中连续的某几条记录
如:表A,id列为主键
id name sex age
-------------------------
1 luoyi male 21
2 yaya female 20
3 lili female 22
4 wuyong male 25
.......................
这个表的记录还有很多,如果我想取第二、第三条记录,不为别的,我就想要这两条,这不仅在编程中会用到,而且在一些公司面试时也有类似考题(呵呵,我没有遇到过),在oracle和mssqlserver中SQL代码分别为:
一、Oracle
在oracle中不能用top关键字,而用rownum,有两种方法可以实现
1.(select * from A where rownum = 4) minus (select * from A where rownum = 1)
这样就得到了二、三两条记录了。minus 关键字的意思是求两个结果集的差集,在数学中有这个概念,比如说两个集合可以合并、公有、差集.
2. select * from (select * from A where rownum 4) b where b.id not in(select id from A where rownum 2) 这句代码也可以实。主要运用了not in运算符
二、ms sql server
在server中没有minus,只能用类似于oracle的第二种方法
select * from (select top 3 * from A) as b where b.id not in(select top 1 id from A)
三、绘制出来的结果为:
id name sex age
--------------------------------
2 yaya female 20
3 lili female 22
回复 引用 查看
查询数据库中的N条记录,然后,对这N条记录排序
看到这个主题,有些人,都会写出这个一句来,
select top 10 * from tablename order by createtime
这条语句的意思正好和主题相反
正确答案1:
select top 10 * from TableName where id in(select top 10 id from TableName order by id) order by createtime
这条语句,就可以找出表中的前10条的记录,然后以createtime时间排序
要求是表中需要有一个主键
答案2
没有主键也可以
SELECT *
FROM (SELECT TOP 10 *
FROM titles) mm
ORDER BY pubdate DESC
回复 引用 查看
随机取出若干条记录的SQL语句
Sql server:
select top 20 * from 表 order by newid()
Access:
SELECT top 20 * FROM 表 ORDER BY Rnd(id)
Rnd(id) 其中的id是自动编号字段,可以利用其他任何数值来完成
比如用姓名字段(UserName)
SELECT top 20 * FROM 表 ORDER BY Rnd(len(UserName))
MySql:
Select * From 表 Order By rand() Limit 20
回复 引用 查看
作者:yanek
email:yanek@126.com
特点:一次查询,数据库只返回一页的数据。而不是取出所有的数据。
说明:
pagesize: 每页显示记录数
cureentpage:当前页数
select * from ( select TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC
例子说明:
假如数据库表如下:
user_table:
id:主键,自增
username:字符
password:字符
假设有80条记录,每页显示10条记录,id 从1到80
现在按照id升序排列取出第三页的数据应该为:所取得记录的id 应该为 21到30。
这时该语句应该为:
select * from ( select TOP 10 * FROM ( SELECT TOP 30 * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC
原理如下:
先按照id从小到大升序取出30条记录(3*10),也就是:id 在 1-30 之间的记录 (SELECT TOP 30 * from user_table ORDER BY id ASC)
然后按照ID降序排列这30条记录,得到记录为id 在:从30到 1
然后在这些30条记录中取出前10条记录:取得的记录为:id 在30-21之间。这就是我们需要的数据,但这时是按照降序排列的,不符合要求。
最后在重新排序得到最终我们需要的数据。id在21-30之间
【大数据开发运维解决方案】Sqoop增量同步mysql/oracle数据到hive(merge-key/append)测试文档 上一篇文章介绍了sqoop全量同步数据到hive, 本片文章将通过实验详细介绍如何增量同步数据到hive,以及sqoop job与crontab定时结合无密码登录的增量同步实现方法。
【大数据开发运维解决方案】Sqoop全量同步mysql/Oracle数据到hive 前面文章写了如何部署一套伪分布式的handoop+hive+hbase+kylin环境,也介绍了如何在这个搭建好的伪分布式环境安装配置sqoop工具以及安装完成功后简单的使用过程中出现的错误及解决办法, 接下来本篇文章详细介绍一下使用sqoop全量同步oracle/mysql数据到hive,这里实验采用oracle数据库为例,
【大数据开发运维解决方案】sqoop增量导入oracle/mysql数据到hive时时间字段为null处理 前面几篇文章详细介绍了sqoop全量增量导入数据到hive,大家可以看到我导入的数据如果有时间字段的话我都是在hive指定成了string类型,虽然这样可以处理掉时间字段在hive为空的问题,但是在kylin创建增量cube时需要指定一个时间字段来做增量,所以上面那种方式不行,这里的处理方式为把string改成timestamp类型,看实验:
【大数据开发运维解决方案】Oracle通过sqoop同步数据到hive 将关系型数据库ORACLE的数据导入到HDFS中,可以通过Sqoop、OGG来实现,相比较ORACLE GOLDENGATE,Sqoop不仅不需要复杂的安装配置,而且传输效率很高,同时也能实现增量数据同步。 本文档将在以上两个文章的基础上操作,是对第二篇文章环境的一个简单使用测试,使用过程中出现的错误亦可以验证暴漏第二篇文章安装的问题出现的错误,至于sqoop增量同步到hive请看本人在这篇文章之后写的测试文档。
【大数据开发运维解决方案】Sqoop增量同步Oracle数据到hive:merge-key再次详解 这篇文章是基于上面连接的文章继续做的拓展,上篇文章结尾说了如果一个表很大。我第一次初始化一部分最新的数据到hive表,如果没初始化进来的历史数据今天发生了变更,那merge-key的增量方式会不会报错呢?之所以会提出这个问题,是因为笔者真的有这个测试需求,接下来先对oracle端的库表数据做下修改,来模拟这种场景。
【大数据开发运维解决方案】Linux Solr5.1安装及导入Oracle数据库表数据 在solr页面中点击core admin add core 增加一个core。和id字段如果不做主键,需要将required= true 去掉。配置文件介绍中已经说了问题的主要原因是schema配置文件中存在。2、取消ID的required=true,修改为指定的字段即可。保存退出,至于为什么这么改,看后面遇到的问题及解决方法。1、将uniqueKey修改为你导入solr的字段。能够正常查询出来数据,简单导入完成。最后结果如上截图及配置。
SELECT * FROM
(
SELECT 表名.*, ROWNUM AS CON FROM 表名 WHERE ROWNUM = M AND 其它查询条件 ORDER BY 排序条件
)
WHERE CON
二、参考其它网上的方法
用一句SQL取出第 m 条到第 n 条记录的方法
用一句SQL取出第 m 条到第 n 条记录的方法
从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)
SELECT TOP n-m+1 *
FROM Table
WHERE (id NOT IN (SELECT TOP m-1 id FROM Table ))
--从TABLE表中取出第m到n条记录 (Exists版本)
SELECT TOP n-m+1 * FROM TABLE AS a WHERE Not Exists
(Select * From (Select Top m-1 * From TABLE order by id) b Where b.id=a.id )
Order by id
--m为上标,n为下标,例如取出第8到12条记录,m=8,n=12,Table为表名
Select Top n-m+1 * From Table
Where Id (Select Max(Id) From
(Select Top m-1 Id From Table Order By Id Asc) Temp)
Order By Id Asc
#1楼 [楼主] 2007-03-02 10:38 Athrun
直接取得数据库中的分页记录
前提是表中必须有主键
取得第M条记录之后的N条记录:
SELECT TOP N *
FROM [TABLE]
WHERE (ID NOT IN
(SELECT TOP M id
FROM [TABLE]
ORDER BY [ORDER]))
ORDER BY [ORDER]
Oracle中的实现,取得第M到N条记录: SELECT * FROM
(
SELECT * , ROWNUM AS CON FROM
(
SELECT * FROM [TABLE] ORDER BY [ORDER]
)
WHERE ROWNUM = N
)
WHERE CON
回复 引用 查看
查询表中连续的某几条记录
不要传任何列的条件参数,查询表中连续的某几条记录
如:表A,id列为主键
id name sex age
-------------------------
1 luoyi male 21
2 yaya female 20
3 lili female 22
4 wuyong male 25
.......................
这个表的记录还有很多,如果我想取第二、第三条记录,不为别的,我就想要这两条,这不仅在编程中会用到,而且在一些公司面试时也有类似考题(呵呵,我没有遇到过),在oracle和mssqlserver中SQL代码分别为:
一、Oracle
在oracle中不能用top关键字,而用rownum,有两种方法可以实现
1.(select * from A where rownum = 4) minus (select * from A where rownum = 1)
这样就得到了二、三两条记录了。minus 关键字的意思是求两个结果集的差集,在数学中有这个概念,比如说两个集合可以合并、公有、差集.
2. select * from (select * from A where rownum 4) b where b.id not in(select id from A where rownum 2) 这句代码也可以实。主要运用了not in运算符
二、ms sql server
在server中没有minus,只能用类似于oracle的第二种方法
select * from (select top 3 * from A) as b where b.id not in(select top 1 id from A)
三、绘制出来的结果为:
id name sex age
--------------------------------
2 yaya female 20
3 lili female 22
回复 引用 查看
查询数据库中的N条记录,然后,对这N条记录排序
看到这个主题,有些人,都会写出这个一句来,
select top 10 * from tablename order by createtime
这条语句的意思正好和主题相反
正确答案1:
select top 10 * from TableName where id in(select top 10 id from TableName order by id) order by createtime
这条语句,就可以找出表中的前10条的记录,然后以createtime时间排序
要求是表中需要有一个主键
答案2
没有主键也可以
SELECT *
FROM (SELECT TOP 10 *
FROM titles) mm
ORDER BY pubdate DESC
回复 引用 查看
随机取出若干条记录的SQL语句
Sql server:
select top 20 * from 表 order by newid()
Access:
SELECT top 20 * FROM 表 ORDER BY Rnd(id)
Rnd(id) 其中的id是自动编号字段,可以利用其他任何数值来完成
比如用姓名字段(UserName)
SELECT top 20 * FROM 表 ORDER BY Rnd(len(UserName))
MySql:
Select * From 表 Order By rand() Limit 20
回复 引用 查看
作者:yanek
email:yanek@126.com
特点:一次查询,数据库只返回一页的数据。而不是取出所有的数据。
说明:
pagesize: 每页显示记录数
cureentpage:当前页数
select * from ( select TOP pagesize * FROM ( SELECT TOP pagesize*cureentpage * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC
例子说明:
假如数据库表如下:
user_table:
id:主键,自增
username:字符
password:字符
假设有80条记录,每页显示10条记录,id 从1到80
现在按照id升序排列取出第三页的数据应该为:所取得记录的id 应该为 21到30。
这时该语句应该为:
select * from ( select TOP 10 * FROM ( SELECT TOP 30 * from user_table ORDER BY id ASC ) as aSysTable ORDER BY id DESC ) as bSysTable ORDER BY id ASC
原理如下:
先按照id从小到大升序取出30条记录(3*10),也就是:id 在 1-30 之间的记录 (SELECT TOP 30 * from user_table ORDER BY id ASC)
然后按照ID降序排列这30条记录,得到记录为id 在:从30到 1
然后在这些30条记录中取出前10条记录:取得的记录为:id 在30-21之间。这就是我们需要的数据,但这时是按照降序排列的,不符合要求。
最后在重新排序得到最终我们需要的数据。id在21-30之间
【大数据开发运维解决方案】Sqoop增量同步mysql/oracle数据到hive(merge-key/append)测试文档 上一篇文章介绍了sqoop全量同步数据到hive, 本片文章将通过实验详细介绍如何增量同步数据到hive,以及sqoop job与crontab定时结合无密码登录的增量同步实现方法。
【大数据开发运维解决方案】Sqoop全量同步mysql/Oracle数据到hive 前面文章写了如何部署一套伪分布式的handoop+hive+hbase+kylin环境,也介绍了如何在这个搭建好的伪分布式环境安装配置sqoop工具以及安装完成功后简单的使用过程中出现的错误及解决办法, 接下来本篇文章详细介绍一下使用sqoop全量同步oracle/mysql数据到hive,这里实验采用oracle数据库为例,
【大数据开发运维解决方案】sqoop增量导入oracle/mysql数据到hive时时间字段为null处理 前面几篇文章详细介绍了sqoop全量增量导入数据到hive,大家可以看到我导入的数据如果有时间字段的话我都是在hive指定成了string类型,虽然这样可以处理掉时间字段在hive为空的问题,但是在kylin创建增量cube时需要指定一个时间字段来做增量,所以上面那种方式不行,这里的处理方式为把string改成timestamp类型,看实验:
【大数据开发运维解决方案】Oracle通过sqoop同步数据到hive 将关系型数据库ORACLE的数据导入到HDFS中,可以通过Sqoop、OGG来实现,相比较ORACLE GOLDENGATE,Sqoop不仅不需要复杂的安装配置,而且传输效率很高,同时也能实现增量数据同步。 本文档将在以上两个文章的基础上操作,是对第二篇文章环境的一个简单使用测试,使用过程中出现的错误亦可以验证暴漏第二篇文章安装的问题出现的错误,至于sqoop增量同步到hive请看本人在这篇文章之后写的测试文档。
【大数据开发运维解决方案】Sqoop增量同步Oracle数据到hive:merge-key再次详解 这篇文章是基于上面连接的文章继续做的拓展,上篇文章结尾说了如果一个表很大。我第一次初始化一部分最新的数据到hive表,如果没初始化进来的历史数据今天发生了变更,那merge-key的增量方式会不会报错呢?之所以会提出这个问题,是因为笔者真的有这个测试需求,接下来先对oracle端的库表数据做下修改,来模拟这种场景。
【大数据开发运维解决方案】Linux Solr5.1安装及导入Oracle数据库表数据 在solr页面中点击core admin add core 增加一个core。和id字段如果不做主键,需要将required= true 去掉。配置文件介绍中已经说了问题的主要原因是schema配置文件中存在。2、取消ID的required=true,修改为指定的字段即可。保存退出,至于为什么这么改,看后面遇到的问题及解决方法。1、将uniqueKey修改为你导入solr的字段。能够正常查询出来数据,简单导入完成。最后结果如上截图及配置。
相关文章
- Java连接oracle数据库的两种常用方法
- Oracle的KILL锁表及清除session方法
- oracle里面查询重复数据的方法
- oracle数据的导入导出(两种方法三种方式)
- [置顶] Oracle学习路线与方法
- Oracle 即时客户点下载以及简单连接数据库的方法
- Oracle的简单的创建dblink以及进行数据迁移的方法
- 在Oracle中查询表的大小
- 【Oracle 管理员账号密码忘记的快速解决方法!十分细节!强烈建议收藏!!!】
- Oracle 创建 DBLink 的方法
- Oracle基础 游标
- Dapper Oracle数据库 插入(INSERT)数据时参数指定为null的方法
- 查看oracle执行计划方法( 二)
- Oracle SOA Suite 介绍
- oracle等待事件5——库高速缓存上的等待事件 中
- Oracle查询前几条数据的方法
- Differences Between Enterprise, Standard and Standard One Editions on Oracle 11.2 (Doc ID 1084132.1)
- 探索Oracle之数据库升级四 11.2.0.4.0 PSU 11.2.0.4.3