SQL SERVER中可以用top关键字查询符合条件的前几条记录。(select top 10 ......)
ORACLE中没有top关键字,应该怎么查询呢?方法如下:
1、sql语句:SELECT * FROM (SELECT * FROM TABLE_A TA ORDER BY TA.ID) WHERE ROWNUM<10;
2、注释说明:假设表table_A中存在id列,根据id列排序后取前10条数据。本句中用了一个子查询,在子查询中查询表table_a的全部数据,再根据id排序。之后在查询出来的这个结果中取前10条数据。
3、引申:这条语句只是一个简化形式,说明了这种排序后取符合要求数据的基本形式。具体使用时可以再自行增加内容。例如扩宽子查询的内容,也可以更改排序的顺序(升序,降序desc),写rownum=1,取第一条数据等。但是到目前未知,我没有发现可以不写子查询达到这种效果的,下面会写没有子查询时是怎样的效果。
4、反例:SELECT * FROM TABLE_A TA WHERE ROWNUM = 1 ORDER BY TA.ID;
像这个语句,目的是查询根据id排序后的第一条数据(取id值最小的那条记录)。看似没问题,实际上是有问题的。sql语句会先执行rownum=1,再执行等order by语句。到执行order by语句时,结果已经只有一行了, 排序就没有意义。而order by语句必须放在sql的结尾,所以这种写法是不可行的。 改为rownum<10的时候,也是如此,会按照sql语句查询出来的默认顺序排序(不一定是按照id排序)之后,取前十条数据,再按照id排序。