没搞懂原因,关于 ON 和WHERE的区别 在 # 删除SALES部门的所有员工和没有部门的员工
来源:4-4 课堂作业讲解:DELETE语句
3三哥
2019-10-09 11:55:22
我用了3个方式,有些不同,请教一下老师.
老师视频里的版本,我是理解了,也弄出来了.
DELETE e FROM t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno WHERE d.dname='SALES' OR e.deptno IS NULL;
以下有一些不同,
# 1.这个的结果是对的,删除7条 DELETE e FROM t_emp e JOIN t_dept d WHERE (d.dname='SALES'AND e.deptno=d.deptno ) OR e.deptno IS NULL; # 2. 加上LEFT变成外连接就报错 DELETE e FROM t_emp e LEFT JOIN t_dept d WHERE (d.dname='SALES'AND e.deptno=d.deptno ) OR e.deptno IS NULL; # 3.WHERE 改成ON,没有LEFT,内连接,也是7条, DELETE e FROM t_emp e JOIN t_dept d ON (d.dname='SALES'AND e.deptno=d.deptno ) OR e.deptno IS NULL; # 4.用ON ,加LEFT ,全部删除了,特别是这个,我搞不懂! DELETE e FROM t_emp e LEFT JOIN t_dept d ON (d.dname='SALES'AND e.deptno=d.deptno ) OR e.deptno IS NULL;
里面有一些原理不是很明白,我是知其然,不知其所以然.
1回答
时间,
2019-10-09
同学,你好。
1、该语句为内连接,会根据where中的条件筛选出符合条件的记录后删除
2、在外连接中,on为连接条件,左表的数据全部查出来,会生成临时表,where条件是在临时表生成好后,再对临时表进行过滤的条件,将符合条件的记录筛选出来并删除
3、内连接中,只保留符合条件的记录,因此条件写在on和where子句中结果是一样的。
4、连接条件为(d.dname='SALES' AND e.deptno=d.deptno ) OR e.deptno IS NULL,
会保留左表的所有数据,右表中的记录为Null。因此在删除时会全部都删除。下图为查询出符合条件的表的记录
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~
相似问题
回答 1