1.聚合函数:多行数据参与返回一行结果,又称为分组函数、多行函数、集合函数
1)MAX()和MIN():获取最大值和最小值
2)AVG():获取平均值
3)SUM():获取总和
2.HAVING子句是对GROUP BY分组的结果进一步限制,不能单独存在。和WHERE的区别在于:
--WHERE是用于第一次检索数据时过滤的
--HAVING是用于第二次过滤数据使用的
3.查询语句的执行顺序:
1)from子句:执行顺序为从后往前,从右到左
--数据量较少的表尽量放在后面
2)where子句:执行顺序为从后往前,从右到左
--将能过滤掉大数量记录的条件放在后面
3)group by:执行顺序为从左到右
--在使用group by之前,最好先使用where过滤
4)having:尽量避免使用,消耗资源对检索出的结果集进行过滤、排序等操作
5)select:少用*号,尽量取字段名称
6)order by:执行顺序为从左到右
4.笛卡尔积:做关联操作的每个表的每一行都和其他表的每一行做组合,假设两个表的记录条数分别为X和T,那么笛卡尔积返回X*Y条记录
5.两张表之间的连接关系:
1)NATURAL JOIN:自然连接,两张表只有一列的名字完全相同
2)内连接
3)外连接:不仅能返回满足连接条件的记录,还将返回不满足条件的记录
--语法:SELECT table1.column,table2.column FROM table1 LEFT | RIGHT | FULL [OUTER] JOIN table2 ON table1.column1=table2.column2;
6.ROWNUM:伪列,用于返回标识行数据顺序的数字,只能从1计数,不能直接从结果集中截取
7.分页查询的步骤:
1)排序
2)编号
3)取范围
--格式基本固定,只需要更换表、排序的列、取值范围即可
--分页的算法:page页数,pagesize一页的条数
start---(page-1)*pagesize+1
end----page*pagesize
8.DECODE(expr,search1,result1,...default):匹配函数类似Java中的switch-case语句,与之相似的还有SQL种的CASE语句
9.ROW_NUMBER() OVER(PARTITION BY col1 ORDER BY col2):根据col1分组,在组内根据col2排序,顺序编号,组内连续且唯一
--RANK() OVER(PARTITION BY col1 ORDER BY col2):同上,但是编号在组内不连续且不唯一
--DENSE_RANK() OVER(PARTITION BY col1 ORDER BY col2):同上,但是编号在组内连续但不唯一
10.UNION:去掉重复记录后的合并集,并对结果集排序;UNION ALL:包含重复记录的所有行,对结果集不排序;INTERSECT:获取两个结果集的交集;MINUS:只有在第一个结果集中存在,在第二个结果集中不存在的数据
11.GROUP BY ROLLUP(a,b,c):分组方式abc,bc,c,3种
GROUP BY CUBE(a,b,c):取值分为参与分组和不参与分组的两个值的一个维度,对于n个参数,有2的n次方分组
GROUP BY GROUPING SETS((a,b,c),(b,c)):以指定的方式分组,比较灵活