MySQL对数据的基本操作四:DELETE语句

  注:(1)子查询不能在DELETE语句中使用的原因:首先,在DELETE中使用子查询,这会是相关子查询,效率很低;然后,MySQL不允许对要更改或要删除记录的数据表做子查询(很显然,动脑子想一想也明白了); 

目录

一:DELETE子句简介

二:DELETE案例:单表的案例:无连接

三:DELETE案例:多张表的案例:内连接

四:DELETE案例:多张表的案例:外连接 

五:快速删除数据表的全部记录:TRUNCATE语句


一:DELETE子句简介

DELETE语句是删除数据的,而不能删除数据表本身,删除数据表的是DROP语句,DELETE语句只是删除记录而已。

● DELETE子句:执行删除操作的子句;

● FROM子句:确定删除那张数据表;

● WHERE子句:按照条件去删除记录;如果没有条件,就会删除全表,清空表;

● ORDER BY子句:对结果集进行排序;

● LIMIT子句:限定删除内容;

执行顺序:FROM子句→WHERE子句→ORDER BY子句→LIMIT子句→DELETE子句;


二:DELETE案例:单表的案例:无连接

案例1:删除10部门中,工龄超过20年的员工;

这个案例很简单,不涉及多张表。

我的做法:

DELETE FROM t_emp
WHERE deptno=10 AND FLOOR(DATEDIFF(NOW(),hiredate)/365)>=20;

……………………………………………………

案例2:删除20部门中工资最高的员工记录;

DELETE FROM t_emp
WHERE deptno=20
ORDER BY sal DESC
LIMIT 1;

三:DELETE案例:多张表的案例:内连接

(前面,UPDATE语句,表连接的时候可以修改多张表的记录。。。。DELETE也是这样的)

案例3:删除SALES部门和该部门的全部员工记录

DELETE子句的作用是:指定要删除那些表的记录。

这儿使用内连接,因为删除的就是有部门的,没有部门的不删除的…

这种操作有点骚,先确定结果集中的记录,然后指定下删除哪些表,然后就能在原表中删除那些在结果集中被指定的记录了。

DELETE e,d
FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno
WHERE d.dname="SALES";

……………………………………………………

案例4:删除每个低于部门平均底薪的员工记录;

这个需要先查询,然后表连接

DELETE e
FROM t_emp e JOIN (SELECT AVG(sal) aa,deptno dno FROM t_emp GROUP BY deptno) temp ON e.deptno=temp.dno
WHERE e.sal<temp.aa;

……………………………………………………

案例5:删除员工KING和他直接下属的员工记录。。

我的做法:


DELETE e1
FROM t_emp e1 JOIN (SELECT empno FROM t_emp WHERE ename="KING") temp
WHERE e1.ename="KING" OR e1.mgr=temp.empno;

标准做法:

DELETE e
FROM t_emp e JOIN(SELECT empno FROM t_emp WHERE ename="KING") temp ON e.mgr=temp.empno OR e.empno=temp.empno;

四:DELETE案例:多张表的案例:外连接 

案例6:删除SALES部门的员工,以及没有部门的员工:

我的做法:

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

标准做法:看下自己的做法和标准做法的不同……

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;


五:快速删除数据表的全部记录:TRUNCATE语句


注:关于MySQL目前了解的内容:

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL中的DELETE语句用于从表中删除行。它的基本语法如下: ``` DELETE FROM table_name WHERE condition; ``` 其中,`table_name`是要删除数据的表名,`condition`是删除数据的条件。 如果您想删除表中的所有数据,可以省略`WHERE`子句,如下所示: ``` DELETE FROM table_name; ``` 请注意,删除操作是不可逆的,因此在执行此操作之前,最好备份数据。 ### 回答2: MySQL中的DELETE语句用于从数据库表中删除数据DELETE语句的基本语法为: DELETE FROM 表名 WHERE 条件; 其中,表名表示要删除数据的表名称,WHERE子句用于指定删除数据的条件。 DELETE语句的执行过程如下: 1. 解析语句MySQL首先会解析DELETE语句,检查语法的正确性。 2. 访问权限检查:MySQL会检查当前用户是否有删除数据的权限。如果没有权限,将会返回错误信息。 3. 执行条件判断:MySQL会根据WHERE子句的条件进行条件判断,确定满足条件的数据行。 4. 锁定行:MySQL会对满足条件的数据行加锁,防止其他用户对这些行进行修改。 5. 删除数据行:满足条件的数据行被删除。 6. 更新索引:如果删除数据行导致索引的变化,MySQL会根据需要进行索引的更新。 7. 释放锁:删除操作完成后,MySQL会释放对数据行的锁定。 需要注意的是,如果没有指定WHERE子句,DELETE语句将会删除表中的所有数据。因此,在使用DELETE语句时,务必谨慎,确认要删除的数据。 另外,DELETE语句还支持使用LIMIT子句限制删除的行数。例如,可以使用DELETE FROM 表名 WHERE 条件 LIMIT 数量来限制删除的行数。 总而言之,DELETE语句MySQL中用于删除数据库表中数据的重要操作,使用时需要注意语法的准确性和条件的设置,同时也要谨慎对待删除的数据。 ### 回答3: MySQLDELETE语句用于从数据库表中删除一条或多条记录。DELETE语句的基本语法如下: ``` DELETE FROM 表名 WHERE 条件; ``` 其中,表名表示要删除记录的数据库表名称,条件用于指定要删除的记录的筛选条件。 例如,我们有一个名为"students"的表,其中包含了学生的姓名(name)和年龄(age)两列。现在,我们想要删除年龄小于18岁的学生记录。可以使用以下DELETE语句实现: ``` DELETE FROM students WHERE age < 18; ``` 执行该语句后,MySQL将会删除students表中年龄小于18岁的学生记录。 此外,DELETE语句还可以与其他SQL语句结合使用,例如可以使用子查询来指定要删除的记录。例如,我们可以删除学生表中年龄小于18岁的记录,并且这些学生所在的班级为"ClassA",可以使用以下DELETE语句: ``` DELETE FROM students WHERE age < 18 AND class = (SELECT id FROM classes WHERE class_name = 'ClassA'); ``` 上述语句中,首先通过子查询获取了班级名为"ClassA"的班级ID,然后使用这个ID作为条件指定要删除的学生记录。 总之,DELETE语句MySQL中用于删除数据库表中记录的重要语句,可以根据需要使用条件和子查询来进行灵活的删除操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值