select * from user limit 0, 10;

这一句只适用与mysql,还是所有数据库都行啊?... 这一句只适用与mysql,还是所有数据库都行啊? 展开
 我来答
我是大白大白的大大白的白
推荐于2018-03-01 · 超过45用户采纳过TA的回答
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:53.6万
展开全部
只适用于MySQL. 请参考下面资料。

限制结果集行数

在进行数据检索的时候有时候需要只检索结果集中的部分行,比如说“检索成绩排前三名的学生”、“检索工资水平排在第3位到第7位的员工信息”,这种功能被称为“限制结果集行数”。在虽然主流的数据库系统中都提供了限制结果集行数的方法,但是无论是语法还是使用方式都存在着很大的差异,即使是同一个数据库系统的不同版本(比如MSSQLServer2000和MSSQLServer2005)也存在着一定的差异。因此本节将按照数据库系统来讲解每种数据库系统对限制结果集行数的特性支持。

MYSQL

MYSQL中提供了LIMIT关键字用来限制返回的结果集,LIMIT放在SELECT语句的最后位置,语法为“LIMIT 首行行号,要返回的结果集的最大数目”。比如下面的SQL语句将返回按照工资降序排列的从第二行开始(行号从0开始)的最多五条记录:

SELECT * FROM T_Employee ORDER BY FSalary DESC LIMIT 2,5

返回按照工资降序排列的前五条记录

SELECT * FROM T_Employee ORDER BY FSalary DESC LIMIT 0,5

MS SQLServer2000

MSSQLServer2000中提供了TOP关键字用来返回结果集中的前N条记录,其语法为“SELECT TOP 限制结果集数目 字段列表 SELECT语句其余部分”,比如下面的SQL语句用来检索工资水平排在前五位(按照工资从高到低)的员工信息:

select top 5 * from T_Employee order by FSalary Desc

实现检索按照工资从高到低排序检索从第六名开始一共三个人的信息,那么就可以首先将前五名的主键取出来,在检索的时候检索排除了这五名员工的前三个人,SQL如下:

SELECT top 3 * FROM T_Employee
WHERE FNumber NOT IN
(SELECT TOP 5 FNumber FROM T_Employee ORDER BY FSalary DESC)
ORDER BY FSalary DESC

MS SQLServer2005

MSSQLServer2005兼容几乎所有的MSSQLServer2000的语法,所以可以使用上个小节提到的方式来在MSSQLServer2005中实现限制结果集行数,不过MSSQLServer2005提供了新的特性来帮助更好的限制结果集行数的功能,这个新特性就是窗口函数ROW_NUMBER()。ROW_NUMBER()不能用在WHERE语句中。

ROW_NUMBER()函数可以计算每一行数据在结果集中的行号(从1开始计数),其使用语法如下:
ROW_NUMBER OVER(排序规则)
比如我们执行下面的SQL语句:

SELECT ROW_NUMBER() OVER(ORDER BY FSalary),FNumber,FName,FSalary,FAge
FROM T_Employee

返回第3行到第5行的数据

SELECT * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY FSalary DESC) AS rownum,
FNumber,FName,FSalary,FAge FROM T_Employee
) AS a
WHERE a.rownum>=3 AND a.rownum<=5

Oracle

Oracle中支持窗口函数ROW_NUMBER(),其用法和MSSQLServer2005中相同.
注意:rownum在Oracle中为保留字,所以这里将MSSQLServer2005中用到的rownum替换为row_num;Oracle中定义表别名的时候不能使用AS关键字,所以这里也去掉了AS。

在Oracle中可以无需自行计算行号,Oracle为每个结果集都增加了一个默认的表示行号的列,这个列的名称为rownum

SELECT rownum,FNumber,FName,FSalary,FAge FROM T_Employee

得到按工资从高到底排序的前6名员工的信息

SELECT * FROM T_Employee
WHERE rownum<=6
ORDER BY FSalary Desc

DB2

DB2中支持窗口函数ROW_NUMBER(),其用法和MSSQLServer2005以及Oracle中相同.

,DB2还提供了FETCH关键字用来提取结果集的前N行,其语法为“FETCH FIRST 条数 ROWS ONLY”,比如我们执行下面的SQL语句可以得到按工资从高到底排序的前6名员工的信息:需要注意的是FETCH子句要放到ORDER BY语句的后面

SELECT * FROM T_Employee
ORDER BY FSalary Desc
FETCH FIRST 6 ROWS ONLY

检索按照工资从高到低排序检索从第六名开始一共三个人的信息,那么就可以首先将前五名的主键取出来,在检索的时候检索排除了这五名员工的前三个人,SQL如下:

SELECT * FROM T_Employee
WHERE FNumber NOT IN
(
SELECT FNumber FROM T_Employee
ORDER BY FSalary DESC
FETCH FIRST 5 ROWS ONLY
)
ORDER BY FSalary DESC
FETCH FIRST 3 ROWS ONLY

抑制数据重复 DISTINCT

DISTINCT关键字是用来进行重复数据抑制的最简单的功能,而且所有的数据库系统都支持DISTINCT,DISTINCT的使用也非常简单,只要在SELECT之后增加DISTINCT即可. DISTINCT是对整个结果集进行数据重复抑制的.

SELECT DISTINCT FDepartment,FSubCompany FROM T_Employee
漫漫追不腻
2011-12-12 · TA获得超过330个赞
知道小有建树答主
回答量:334
采纳率:0%
帮助的人:104万
展开全部
只使用于mysql的分页,SqlServer一般是用top来分页,oracle是用Rownum来进行分页
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
她是我的小太阳
高粉答主

2015-11-15 · 醉心答题,欢迎关注
知道顶级答主
回答量:5.1万
采纳率:83%
帮助的人:8620万
展开全部
mysql中的sql语句:
select * from 表名 limit 0,10;

表示取表中的前10条数据(从第1条开始,取10条)
换成Oracle,相应功能的语句为:
select * from 表名 where rownum <= 10 ;

如果取[5,10]条,则,oracle语句写法有两种:
(1)
select * from table where rownum<=10
minus
select * from table where rownum<5 ;
(2)
select *
from ( select rownum r,a.*
from table a
where rownum<=10 )
where r>=5;
因为rownum不支持>=操作,所以,要先将rownum实例化。
经测试,第二种写法,比第一种写法的效率要高。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式