`

SQL/Oracle取出第 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


直接取得数据库中的分页记录

前提是表中必须有主键

取得第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 >= M;


查询表中连续的某几条记录

不要传任何列的条件参数,查询表中连续的某几条记录

如:表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

特点:一次查询,数据库只返回一页的数据。而不是取出所有的数据。

说明:

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之间。

分享到:
评论

相关推荐

    简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/oracle/PostgreSQL/TIDB

    简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/oracle/PostgreSQL/TIDB/CacheDB 数据库。简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/oracle/PostgreSQL/TIDB/CacheDB 数据库。...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

    读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二)

    读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型...

    Oracle 11g SQL和PL SQL从入门到精通〖送源代码〗

    读者不仅可以掌握Oracle常用工具Oracle Universal Installer、Net Comfiguration Assistant、SQL Developer、SQL*Plus的作用及使用方法,而且可以掌握SQL语句和PL/SQL的各种基础知识和高级特征(记录类型、集合类型...

    sql/oracle 查询分析器 可以转出excel

    一个小工具,可以查询、执行SQL语句,支持sql、oracle库,可以到处excel。

    Oracle PL SQL程序设计 上 第五版(代码示例)

    《oracle pl/sql程序设计(第5版)》基于oracle数据库11g,从pl/sql编程、pl/sql程序结构、pl/sql程序数据、pl/sql中的sql、pl/sql应用构建、高级pl/sql主题6个方面详细系统地讨论了pl/sql以及如何有效地使用它。...

    数据库通用操作类库(sql/mysql/oracle)

    内置 sqlserver mysql oracle的常用操作函数,简单实用... oracle环境必须安装oracle client 连接字符串配置如下 sqlserver ;User Id=sa;Pwd=000;Database=mydb;"/&gt; mysql ;Port=3306;Database=mydb;Uid=user;Pwd=pwd...

    Oracle批处理:使用C# 自带Oracle驱动一次执行多条Sql语句

    本文将深入探讨如何在C#中利用Oracle自带的驱动来实现批处理,以一次执行多条SQL语句。 首先,我们需要了解Oracle的数据驱动,即ODP.NET(Oracle Data Provider for .NET)。这是Oracle公司为.NET开发者提供的一个...

    精通Oracle 10g SQL和PL/SQL

    本书是专门为oracle开发人员而提供的编程指南 通过学习本书 读者不仅可以掌握编写sql语句和pl/sql块的基础知识 而且还可以掌握sql高级特征 正则表达式 flashback查询 merge语句 sql:1999连接 和pl/sql高级特征 ...

    oracle消耗资源的sql查询语句记录

    ### Oracle消耗资源的SQL查询语句记录 在Oracle数据库管理中,监控和优化SQL查询是确保系统性能稳定的关键环节之一。对于那些消耗大量资源的SQL语句进行记录和分析可以帮助DBA快速定位问题并采取相应的优化措施。...

    oracle批量执行sql

    // 确认本地已经安装oracle的客户端 // ※只会执行sql文 不会自动删除表内数据 // oracleStup.bat // 命令行 用户名/密码 @库名 不需要修改 sqlplus C3/AISIN@C3 @sqlFile.sql &gt; execute.log // sqlFile.sql // @...

    Oracle SQL 官方文档

    Oracle SQL 是一种强大的数据库查询和编程语言,广泛用于管理和操作Oracle数据库系统。11g第二版(11G2)是Oracle的一个重要版本,提供了许多增强功能和优化。本官方文档集包括四份重要的参考资料,涵盖了Oracle SQL...

    Oracle中如何用一条SQL快速生成10万条测试数据

    本文将深入探讨如何利用一条SQL语句在Oracle中快速生成10万条测试数据,这对于数据库管理员和开发人员来说是一项极为实用的技能。 ### 核心知识点:使用SQL生成大量测试数据 #### 1. **理解ROWNUM和CONNECT BY ...

    Oracle左连接返回多条记录中一条记录的查询语句

    Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录

    SQL查找某记录的前后N条数据

    SQL查找某记录的前后N条数据 SQL查找某记录的前后N条记录

    Oracle+11g+SQL和PL+SQL从入门到精通

    通过《Oracle 11g SQL和PL/SQL从入门到精通》的学习,读者将能够熟练掌握Oracle数据库的日常操作,编写高效的SQL查询,并具备使用PL/SQL开发数据库应用程序的能力。这份教程对于希望在IT行业中从事数据库管理、开发...

    SQL把一条记录金额平分到n个人并进行汇总.txt

    SQL把一条记录金额平分到n个人并进行汇总.txt,这里说的是Access数据库中,如何将同一条记录金额平分到n个人里,金额会按照实际人数进行平分,空的则不平分,如:一条记录有三个营业员字段,但是实际不知道有几个...

    SQL Server 到 Oracle 的SQL 语法自动翻译器源码

    SQL的过程中对调用者传进的SQL进行转换后再执行,就基本完成了整个系统的SQL语法从SQL Server到Oracle的 兼容,呵呵,听起来有点不可思议。系统已经于3个月前上线,目前运行很稳定。 如果有人用得着或发现什么...

    Oracle PL/SQL程序设计(第5版)(上下册)

    ### Oracle PL/SQL程序设计(第5版)(上下册)知识点概述 #### 一、PL/SQL编程基础 - **PL/SQL简介**:PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,用于增强SQL的功能。它允许在SQL...

    Oracle 11g SQL和PL SQL从入门到精通.part1

    读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型...

Global site tag (gtag.js) - Google Analytics