随着学习SQL语言的内容逐渐增加,查询语句越来越长,表和表之间的关联(啊~~今天分不清哪个是哪个了🤣),编写语句完成后也频频出现错误。
不过这样才使我更加觉得SQL的有趣,我一定要战胜它,多多练习!
我总结了一下几点:
1.最重要是先搞明白语句执行的先后顺序

系统优先执行的是from后的语句,其次是条件判断(where子句不能包含聚合函数),之后执行条件筛选条件select。(个人理解)
那么按照以上的逻辑,使用多表查询时候,语句较多时,就可以分步骤写代码。(我看老师也是这样做的)
2.分步骤写代码(以今天最后一题为例)

首先,这一题的话用了两次外连接,自身的表与表之间和另外一张表之间连接(真的眼花缭乱),那么先做第一步,同一张表自身连接
select *(代码写完最后再把星号改成需要筛选的字段) from emp 员工表
left join emp 员工表
on 员工表.mgr=领导表.empno;

能正确执行命令后,再继续做第二步,外连接
select *(代码写完最后再把星号改成需要筛选的字段) from emp 员工表
left join emp 员工表
on 员工表.mgr=领导表.empno
left join dept
on 员工表.deptno=dept.deptno;

输入where语句
select *(代码写完最后再把星号改成需要筛选的字段) from emp 员工表
left join emp 员工表
on 员工表.mgr=领导表.empno
left join dept
on 员工表.deptno=dept.deptno
where 员工表.hiredate<领导表.hiredate;

这步完成之后已经得到我们想要的数据了,那最后只要把需要的字段筛选出来就OK啦~把星号替换成需要筛选出来的字段
select 员工表.empno,员工表.ename,dename from emp 员工表
left join emp 员工表
on 员工表.mgr=领导表.empno
left join dept
on 员工表.deptno=dept.deptno
where 员工表.hiredate<领导表.hiredate;

那最终就会得到我们想要的结果了。
这是学习SQL的第二天,也不可能一口气吃成胖子,还需要慢慢理解、多多练习,理清思路的话,我觉得SQL还是能掌握的。大家一起加油呀!








暂无数据