01.JDBC是一个高级的SQL特性。
02.SQL函数
返回一个数值(dept_name这个参数以后会在where中使用)
返回一个关系(dept_name这个参数以后会在where中使用)
有输入有输出参数
03.SQL函数内的语句
while循环
for循环
if判断
异常处理:
04.触发器
定义:
作用:
触发器中的when(满足括号中的条件后才会执行下面后的语句):
修改的触发器 update of 关系名 on 关系中的属性
05.递归查询
查询递归的关系的条件:
用子图进行查询:
06.分窗函数:
一.定义:
既要对数据进行分组,又要对每个组进行某种聚合运算,同时还要对每行输出对应的聚合运算的结果(用 group by 很难实现)。
举例:有一组数据,包含以下字段:城市,姓名,年龄,性别。需求是找出同龄人以及城市人数,按照如下格式输出:城市,姓名,年龄,性别,人数,同龄人人数。
窗函数本质还是聚合运算,只不过它更具灵活性,它对数据每一行都会返回符合条件的数据,这样就避免了非常复杂的查询语句。
二.窗函数的结构:
窗函数基本上是一个聚合函数加上 OVER 关键字组成,比如:
COUNT(*)OVER()
SUM(*)OVER()
SQL的over函数:
窗口函数是在所有JOIN,WHERE,GROUP BY和HAVING子句之后以及ORDER BY,LIMIT和SELECT DISTINCT之前的结果集上执行的
三.排名函数:rank()over()
SQL中的rank()函数分类:
RANK():计算排序,如果存在相同位次的记录,为相同的值分配相同的数字,但会跳过之后的位次。
DENSE_RANK():同样是计算排序,即使存在相同位次的记录,也不会跳过之后的位次。
ROW_NUMBER() :从1开始,返回每组内部排序后的顺序编号(组内连续的唯一的)
Select rank() over(order by s_score desc) as 名次,s_class,s_id,s_score from s_score
Select rank() over(partition by s_class order by s_score desc) as 名次,s_class,s_id,s_score from s_score
四.over分窗函数:over()
可以选择窗口的大小:
不固定大小:
前面的是preceding,还有following
用between and 来用窗口大小: