删除问题

删除问题

#删除SALLS部门的员工,以及没有部门的员工;

DELETE e

FROM t_emp e LEFT JOIN (SELECT deptno FROM t_dept WHERE dname="SALLS") t

    WHERE  e.deptno=t.deptno OR e.deptno IS NULL ;

这样写可以吗?

以左表为主,因为有些员工没有部门, 所以把查询出左表的所有信息,通过on,判断出左边的deptno=右表的deptno, 进行删除, 也就是删除了SALLS部门的员工, or 则删除了没有部门的员工 

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2021-04-14 17:59:03

同学你好,1、同学sql语句存在一点小问题,左连接语法应该是LEFT JOIN...ON,而不是LEFT JOIN...WHERE 。

2、不建议使用左连接,以左表为主会查询出左表中全部的数据,也就是说会将左表中的数据全部删除,则建议同学使用JOIN。修改后代码如下所示:

http://img1.sycdn.imooc.com//climg/6076bca509c5fffc06480066.jpg

​DELETE e
FROM t_emp e JOIN (SELECT deptno FROM t_dept WHERE dname="SALES") t
ON e.deptno=t.deptno OR e.deptno IS NULL;

注: JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

祝学习愉快!

  • 提问者 rock221 #1

    外链接的注意事项:

    如果外连接使用where,那么条件符合的数据会留下,不符合的数据会T掉;而on,则会对无论是否符合的数据都留下;


    老师之前不是这样讲过吗, 说 外连接也可以用where 吗。 

    2021-04-14 18:02:53
  • 好帮手慕小尤 回复 提问者 rock221 #2

    同学你好,是可以使用where条件的,不过需要在on关键字的后面,如:

    DELETE e
    FROM t_emp e JOIN (SELECT deptno FROM t_dept WHERE dname="SALES") t
    ON e.deptno=t.deptno where e.deptno IS NULL;

    ​但无法不使用on直接使用where关键字。

    祝学习愉快!

    2021-04-14 18:50:17
  • 提问者 rock221 回复 好帮手慕小尤 #3

    如果外连接使用where,那么条件符合的数据会留下,不符合的数据会T掉;而on,则会对无论是否符合的数据都留下;这句话的意思是+了where之后会把之前的数据在筛掉。对吧。。。

    2021-04-14 19:02:54
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师