sql取前几行记录语句
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-04 16:19:39 浏览: 评论:0
本文章总结了现在常用的几种数据库获取前几条记录的sql,包括有db2,oracle,sqlserver和mysql数据库,各位可参考.
SQLITE数据库,代码如下:
select * from table limit N
db2数据库,代码如下:
select * from tab fetch first 10 rows only
oracle数据库,代码如下:
select * from tab where rownum <=10
sqlserver数据库,代码如下:
select top 10 * from tab
1)如果表中有主键,可以用IN的方式,代码如下:
- SELECT * FROM tmp_Trans t
- WHERE ID IN(
- SELECT TOP 2 ID
- FROM tmp_Trans
- WHERE PO_NO=t.PO_NO
- ORDER BY Trans_Date DESC
- )
2)如果没有主键,可以用判断在本条记录前有多少条记录的方式,但使用这种方式时如果遇到Trans_Date相同的情况会不准,如当存在Trans_Date最大的记录有三条时,这三条记录都会查出来,代码如下:
- SELECT *
- FROM tmp_Trans t
- WHERE (
- SELECT COUNT(*)
- FROM tmp_Trans
- WHERE PO_NO=t.PO_NO AND Trans_Date>T.Trans_Date
- )<2 --phpfensi.com
3)使用CROSS APPLY子句,CROSS APPLY是SQL Server 2005后出来的新功能,用于在表连接时传入参数,代码如下:
- SELECT DISTINCT b.*
- FROM tmp_Trans a
- CROSS APPLY
- (
- SELECT TOP(2) * FROM tmp_Trans WHERE a.PO_NO=PO_NO ORDER BY Trans_Date DESC
- ) b
2.使用自动生成的Row Number,在使用 ROW_NUMBER()时可以用PARTITION BY子句来分组,建议使用这种方式,代码如下:
- select * from (
- select ROW_NUMBER() OVER(PARTITION BY PO_NO ORDER BY Trans_Date DESC) as rowid,*
- from tmp_Trans
- ) a
- where rowid<=2
mysql数据库,代码如下:
select * from tab limit 10
注意:对Oracle的查询中,如果有如下order by子句,查询出来的数据可能不是你想要的.
Oracle处理流程是:先搜索出rownum<2 的信息,再排序,代码如下:
select table_name from t_tables where rownum<2 order by table_name desc;
需要写成如下方式:select t2.* from (select * from t_tables t order by table_name desc) t2 where rownum<2
Tags: sql取前几行 db2取前几行
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)