前一阵子去了个面试,其中有个道考题是写出取某张表前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条记录。