子查询
-
单行子查询 子查询部分的返回结果为单行 的结果
-
多行子查询 子查询部分的返回结果为多行 的结果,主要关键字有 any , in ,all
-
-
any 表示任意一个,在集合中有一个满足条件即可
-
all 所有 ,在集合中所有都满足即可
-
in 表示任意一个,在集合中有一个满足条件即可
eg: select * from emp e where e.sal<= any (select sal from emp where deopno='clerk')
-
-
多列子查询 如果子查询返回多列,则对应的条件从句也应该出现多列,这种查询称为多列子查询
eg: select * from emp e where (e.job,e.deopno)=(select job,deopno from emp where empno='7788')
-
rownum 关键字 表示虚列 只能=1只认识第一行,并且只认<= 不能认识>=或者>
eg 从雇员表中查询6至9位置上的雇员,
select * from (select rownum row,e.* from emp e where rownum<=9) f where f.row>=6
高级查询
多表关联查询,条件的匹配进行连接,每个表中相同意义的相连接,,如果不加任何关联查询两个表会出现笛卡尔积(也有人称自然连接),其实就算两个表中的每一行记录都关联起来,总记录未两表想乘。N个表想连接,至少要N-1个条件。
-
等值连接
-
不等连接
-
自连接 表
-
外连接 主表为空的行也展示出来(左外关联 lef t join ,右外关联 righ jion ,全关联 full join )
集合运算
多个语句的查询结果可以运用与集合运算,结果集的字段类型,数量和顺序应该一致。
操作 | 描述 |
---|---|
union | 并集,合并两个结果集的结果,去掉重复部分 |
union all | 并集,合并两个结果集的结果,保留重复部分 |
minus | 差集,从前面的结果集中去掉与后面结果集相同的部分 |
intersect | 交集,取两个结果集中重复部分 |
统计函数
函数 | 说明 |
---|---|
AVG | 求平均值 |
count | 求计量值,返回非空行数,*表示返回所有行 |
MAX | 求最大值 |
MIN | 求最小值 |
SUM | 求和 |
STDDEV | 求标准偏差,是根据差的平方根得到的 |
VARIANCE | 求统计方差 |
-
-统计函数中,avg和sum只针对数值类型列,MAX,MIN,COUNT还可以运用与字符,数值和日期类型。
使用group by 从句可以对数据进行分组,所谓分组就是可以根据相同内容划分成组,可以对组使用组函数。如果不使用分组,则对整个表应用函数。
在组函数中可以使用distinct 和all关键字。ALL表示对所有非空可重复进行运算(count除外)。distinct 表示对每一个非NULL值,如果存在重复值,则组函数只运算一次。如果不指明上述关键字,默认为ALL。
分组统计
group by 列1,列2,......
-
分组限定规则 : 在 select 后出现的要么是group by 后的列,要么是分组统计函数。
-
分组统计结果限定: 对查询的分组结果进行筛选过滤 需要使用having从句,它只能出现在group by 后,。而where从句要出现在group by 之前。
-
分组统计结果排序: 可以使用order by 从句,该从句要出现在语句最后。注意排序时可以使用别名排序也可以使用前面查询结果的列数来排序 select 列1 ,列2,列3,count(*) 总量 from temp1 group by 列1 ,列2,列3 order by 总量 ; 或者
select 列1 ,列2,列3,count(*) 总量 from temp1 group by 列1 ,列2,列3 order by 4;
-
组函数的嵌套: eg : select max(avg(sal)) from emp;