分组 连接的查询把我给弄昏了

 几乎要崩溃了,今天做了几道SQL查询题目,要求用连接,分组等形式把它做出来,真把我搞死了,

首先我不太明白,sql查询语句的语法,印象中好像join 后面的on 不能和 where同时存在,做题怎么也做不出来,老师讲了on后面只是连接条件,它可以与where共存的。

还有group by ,我做题目时 总是提示 不是group by语句 ,这SX Oracle 。。最后老师讲了,select 后面的列 只能是group by后面的列 否则会出现错误。

然后,还有我不会分析题目,搞不清楚题目要求和表的关系 就开始下手了,结果根据表之间的逻辑关系,有些东西 通过 选择不同表 就可以查询出来,我非得连接那个表做查询,有些是我考虑的太复杂了,换一个表做分组、查询条件,结果自然就出来了,我非得在一个表上死转转~

例如一个题目:  列出在每个部门工作的员工数量、平均工资和平均服务期限

本来没有要求列出部门名称,我想列出部门。写的如下(不管怎么说终于写出来了)

select d.dname,t.ct,t.ags,t.agm from
(select deptno,count(*) ct,avg(sal) ags,avg(months_between(sysdate,hiredate))/12 agm
from emp group by deptno) t right join dept d
on d.DEPTNO=t.deptno;

下面是老师的答案:

select dname,count(*),avg(sal),avg(months_between(sysdate,hiredate))/12 from emp join dept on emp.deptno=dept.deptno group by dname

两个答案都能写出答案,但符合出题者要求的,我想是老师那个。 因为表dept列出的是所有部门以它的dname为分组条件也是合适的,因为表emp的部门都在它里面。用emp表中部门分类不全,而且不符合出题者的要求的。

原文地址:https://www.cnblogs.com/zwl24/p/2356792.html