前一阵子去了个面试,其中有个道考题是写出取某张表前10条记录的sql语句。一头雾水,回来问了同学也没有结果,近来上网搜了一下,收获如下:

  原来不同的DBMS对此操作的sql语句也不同。
(取出TABLE1 的前 N 的纪录)
1. ORACLE
           SELECT * FROM TABLE1 WHERE ROWNUM<=N
2. MYSQL
           SELECT * FROM TABLE1 LIMIT N
3. SQL SERVER
           SELECT TOP N * FROM TABLE1
 
下面的DBMS我都没用过了,
4. INFORMIX
          SELECT FIRST N * FROM TABLE1
5. DB2
         SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC)                  AS ROWNUM WHERE ROWNUM<=N
   或者
          SELECT COLUMN FROM TABLE FETCH FIRST N ROWS ONLY
6. SYBASE
          SET ROWCOUNT N
7. FOXPRO
          SELECT * TOP N FROM TABLE ORDER BY COLUMN
 

 

MySQL中如何实现Top N及M至N段的记录查询?
在MySQL中,如何实现Top N及M至N段的记录查询?

我们可以利用MySQL中SELECT支持的一个子句——LIMIT——来完成这项功能。

LIMIT可以实现top N查询,也可以实现M至N(某一段)的记录查询,具体语法如下:

SELECT * FROM MYTABLE
ORDER BY AFIELD

LIMIT offset, recnum
其中offset为从第几条(M+1)记录开始,recnum为返回的记录条数。例:

select * from mytable
order by afield

limit 2, 5

即意为从第3条记录开始的5条记录。