当前位置:首页 > Mysql教程 > 列表

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的方式,代码如下:

  1. SELECT * FROM tmp_Trans t  
  2. WHERE ID IN
  3.  SELECT TOP 2 ID  
  4.  FROM tmp_Trans  
  5.  WHERE PO_NO=t.PO_NO  
  6.  ORDER BY Trans_Date DESC 

2)如果没有主键,可以用判断在本条记录前有多少条记录的方式,但使用这种方式时如果遇到Trans_Date相同的情况会不准,如当存在Trans_Date最大的记录有三条时,这三条记录都会查出来,代码如下:

  1. SELECT *  
  2. FROM tmp_Trans t  
  3. WHERE ( 
  4.  SELECT COUNT(*)  
  5.  FROM tmp_Trans  
  6.  WHERE PO_NO=t.PO_NO AND Trans_Date>T.Trans_Date 
  7. )<2  --phpfensi.com 

3)使用CROSS APPLY子句,CROSS APPLY是SQL Server 2005后出来的新功能,用于在表连接时传入参数,代码如下:

  1. SELECT DISTINCT b.*  
  2. FROM tmp_Trans a  
  3. CROSS APPLY  
  4. (  
  5.  SELECT TOP(2) * FROM tmp_Trans WHERE a.PO_NO=PO_NO ORDER BY Trans_Date DESC  
  6. ) b 

2.使用自动生成的Row Number,在使用 ROW_NUMBER()时可以用PARTITION BY子句来分组,建议使用这种方式,代码如下:

  1. select * from ( 
  2.  select ROW_NUMBER() OVER(PARTITION BY PO_NO ORDER BY Trans_Date DESCas rowid,*  
  3.  from tmp_Trans 
  4. ) a 
  5. 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取前几行

分享到: