2022.6.24 Q AND A

1.聚合函数与空值

目前学到的聚合函数 有 count(),sal(),max(),min(),avg(),当这些函数查询全空表时,只有count会返回 0 而其他的都返回空 即 null

这个结果并不难理解 除了count(字段)这些函数都会忽略掉NULL值进行计数外,其他的函数也会忽略空值进行聚合计算,而只有count(1)和count(*)不会忽略空值进行计数

也就是说

count(空字段) = 0   忽略空值

聚合函数(空字段)= NULL   忽略空值

count(*),count(1)不受影响

同为忽略空值的聚合函数 一个返回NULL 而另一个返回 0  

这就要说到老师的问题了 培训机构的老师果然不行 只懂技术 不懂原理 校内老师的优势瞬间显现。

2.分组函数与语句运行顺序(在审视题目时应具有的思路)

执行顺序 : 首先是找数据源(1.表 2.试图 3.子查询)其次做首次筛选 where 然后 进行数据分组

group by  再将已经分组好的数据进行 having 筛选 再进行select 最后进行order by 

若真正理解这个过程 将会对出错的原因掌握

(再吐槽培训机构老师的垃圾,为什么不讲底层原理)

3.子查询相关题目及遇到的问题

1.查询公司内哪个部门的平均工资高于整个公司的平均工资
select * from emp;
select deptno,avg(sal) from emp having (avg(sal)>(select avg(sal) from emp)) group by deptno;
2.查询与SMITH同部门同薪资或与JAMES同部门同薪资的员工
select * from emp where (deptno,sal) in (select deptno,sal from emp where ename = 'JAMES' or ename = 'FORD');
3.查询BLAKE的领导手下有哪些员工
select ename,mgr from emp where mgr<(select mgr from emp where ename ='BLAKE');
4.查询与SMITH同部门且薪资相等的员工
select * from emp WHERE(DEPTNO,SAL) IN (select deptno,sal from emp where ename = 'FORD');
5.查询BLAKE的带领的员工有哪些
select ename,mgr from emp where mgr<(select mgr from emp where ename ='BLAKE') AND DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME='BLAKE');
6.查询公司内薪资最高的员工
SELECT * FROM EMP WHERE SAL>=(SELECT MAX(SAL) FROM EMP);
7.查询公司内各部门薪资最高的员工
SELECT * FROM EMP WHERE SAL IN (SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO);
8.查询SMITH所在部门的所有员工信息
SELECT * FROM EMP WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = 'SMITH');
9.查询公司内没有员工的部门
select deptno from emp having deptno = (select count(deptno) from emp having count(deptno)=0) group by deptno;
10.查找平均工资最高的部门
SELECT DEPTNO FROM EMP HAVING AVG(SAL) =( SELECT MAX(AVG(SAL))FROM EMP GROUP BY DEPTNO) GROUP BY DEPTNO;

总体来感觉子查询只是为了适用于较为简单的连接场景,并且子查询效率不高,这是第二个数据来源,表、子查询、视图还没学

在清楚子查询是在连接多个select 的条件下,先对题目进行分析,找到两句中的一句再考虑进行嵌套书写 注意group by 和 having都在外层,另外看清主句要什么 和从句的判断条件又是什么 即清楚的定位两个select 后的需求与条件是什么。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值