Oracle数据库点滴

分页查询:

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可以替换,如果是常量的话,貌似也只能这么写了。
原文地址:https://www.cnblogs.com/shz365/p/3782016.html