子查询高级查询以及集合运算统计函数

子查询
  • 单行子查询 子查询部分的返回结果为单行 的结果

  • 多行子查询 子查询部分的返回结果为多行 的结果,主要关键字有 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;

posted @   翻滚的小井蛙  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示