1.mysql
SELECT *
FROM TABLENAME
LIMIT N
2.sql server
SELECT TOP N *
FROM TABLENAME
3.orale
(1)rownum(oracle从8开始提供的一个伪列,是把SQL出来的结果进行编号,始终从1开始常见的用途就是用来分页输出)
oracle 取前10条记录
1) select *
from tbname
where rownum < 11;
2) select *
from (select * from tbname order by id desc )
where rownum<=10;
3)这条语句即是输出第10到第20条纪录,这里之所以用rownum rn,是把rownum转成实例,因为rownum本身只能用<=的比较方式,只有转成实列,这样就可做 >=的比较了。
SELECT *
FROM (SELECT a.*, ROWNUM rn
FROM torderdetail a)
WHERE rn >= 10 AND rn <= 20
4)特别的
Rownum的另类用法,有时候我们会遇到这种需求,要求输出当月的所有天数,许多人会烦恼,数据库里又没有这样的表,怎么输出一个月的所有天数呢?用rownum就能解决:
SELECT TRUNC (SYSDATE, 'MM') + ROWNUM - 1
FROM DUAL
CONNECT BY ROWNUM <= TO_NUMBER (TO_CHAR (LAST_DAY (SYSDATE), 'dd'))
(2)row_number() over()的使用(一般写法row_number() over( order by order_date desc) 生成的顺序和rownum的语句一样,效率也一样)
而对于分组后取最近的10条纪录,则是rownum无法实现的,这时只有row_number可以实现,row_number() over(partition by 分组字段 order by 排序字段)就能实现分组后编号,比如说要取近一个月的每天最后10个订单纪录
SELECT *
FROM (SELECT a.*,ROW_NUMBER ()
OVER (PARTITION BY TRUNC (order_date)
ORDER BY order_date DESC) rn
FROM torderdetail a)
WHERE rn <= 10