没搞懂原因,关于 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。因此在删除时会全部都删除。下图为查询出符合条件的表的记录

http://img.mukewang.com/climg/5d9d7fad09b115db11070489.jpg

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

0

0 学习 · 2669 问题

查看课程