分页查询:
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
sql执行顺序:
1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group
by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、select
的字段;
8、使用order by对结果集进行排序。
其中:
HAVING主要用于对分组后的数据进行过滤,一般我们在其后接聚合函数(SUM,COUNT等),
除此之外我们还可以用GROUP BY后面的字段组成HAVING后的过滤条件。
如:SELECT loc,deptno FROM dept GROUP BY loc,deptno HAVING deptno>30;
SELECT loc FROM dept GROUP BY loc HAVING count(deptno)>1;
但不可以:SELECT loc FROM dept GROUP BY loc HAVING deptno>30;因为having后并非聚集函数也group by 后的列明。
in和exist使用:
in和not in条件严密性差不多,如果name值比较多的时候,in的严密性更高,索引都是按照顺序排好的,相等的情况只有一种,不等的情况有很多种。
如果你(‘a‘, ‘b‘)这些值是放在另外一个表里面,还有not exsits可以替换,如果是常量的话,貌似也只能这么写了。