(1-7-5) Mysql 对 数据的基本操作
目录
0. 前置总结
1. insert 语句
1.1 insert 语法
(1) 员工部门表中 插入 4 条记录
1.2 Insert 子查询
(1) 向“家乡部2” 添加一条员工记录
1.3 insert 语句方言
(1) 向“家乡部2” 添加一条员工记录
1.4 ignore 关键字
(1) 向部门表中插入 2条记录,其中一条为重复记录, 希望插入成功
2. update 语句
2.1 update 子句 (order by)
(1)把每个员工 的编号和上司的 编号 +1, 用order by 子句完成
2.2 update 子句 (order by + limit)
(1) 把月收入前三名 的员工底薪减100 元, 用limit 子句完成
(2) 把10部们中 工龄超过20年的员工, 底薪增加240元
2.3 update 语句(表连接实现 join + where)
(1) (表连接实现 join + where) 将龙龙 调往 “家乡部1” ,职务调整为“技术大佬”
(2)把底薪低于 公司平均底薪的 员工, 底薪增加150元
2.4(左外连接)实现数据更新
(1) 把没有部门的员工, 或者 “家乡部1”部门高于3000底薪的员工,都调往60部门
3. delete 语句
3.1 基本用法
(1)删除 10 部门中, 工资最低的员工记录
(2)删除 10部门中, 工龄超过45的员工记录
3.2 (表连接删除语法)操作多表删除
(1) (表连接删除) 删除 “家乡部2” 部门和该部门 的全部员工记录
(2) (表连接删除其中一表记录) 删除 每个低于部门平均底薪 的员工记录
(3)删除 员工king 和他的直接下属的 员工记录, 用表连接实现
3.3 (left join表连接删除)
(1)(左外连接)删除 SALES 部门员工, 以及没有部门的员工
3.4 truncate快速清空数据表
base :
通过网盘分享的文件:demo.sql
链接: https://pan.baidu.com/s/1iUKSMScC1PXtbOFFaKm-vQ 提取码: i5hb 复制这段内容后打开百度网盘手机App,操作更方便哦
0. 前置总结
- 数据添加(Insert)
- Insert 语法
- Insert 方言语法
- Insert 子查询
- Ignore 关键字
- 数据修改(Update)
- Update 语法
- Update 表连接
- 数据删除(delete)
- delete 语法
- delete 表连接
1. insert 语句
1.1 insert 语法
(1) 员工部门表中 插入 4 条记录
# 插入(Insert)语句
# 1. 员工部门表中 插入 4 条记录
insert into t_dept(deptno, dname, loc)
values
(50, "家乡部1", "杨陵区"),
(60, "家乡部2", "克拉玛依市"),
(70, "家乡部3", "长春市"),
(80, "家乡部4", "汉中市");select * from t_dept;
1.2 Insert 子查询
(1) 向“家乡部2” 添加一条员工记录
# 2. insert 子查询
# 2.1 向“家乡部2” 添加一条员工记录
insert into t_emp
(empno, ename, job, mgr, hiredate, sal, comm, deptno)
values
(8001, "phdvb", "teacher", 7900, "2025-7-27", 5000, null,
(select deptno
from t_dept
where dname = "家乡部2")
);
select * from t_emp;
1.3 insert 语句方言
(1) 向“家乡部2” 添加一条员工记录
# 3. insert 语句方言
# 3.1 向“家乡部2” 添加一条员工记录
insert into t_emp
set
empno = 8002,
ename = "phdvc",
job = "teacher",
mgr = 7900,
hiredate = "2025-7-27",
sal = 5200,
comm = 200,
deptno = (select deptno from t_dept where dname = "家乡部2");select * from t_emp;
1.4 ignore 关键字
(1) 向部门表中插入 2条记录,其中一条为重复记录, 希望插入成功
# 4. ignore 关键字
# 4.1 向部门表中插入 2条记录,其中一条为重复记录, 希望插入成功
insert ignore into t_dept
values
(70, "家乡部4", "汉中市"),
(90, "家乡部5", "西安市");select * from t_dept;DELETE from t_emp where deptno = 90;
2. update 语句
2.1 update 子句 (order by)
(1)把每个员工 的编号和上司的 编号 +1, 用order by 子句完成
# update 子句
# 1 把每个员工 的编号和上司的 编号 +1, 用order by 子句完成
select * from t_emp;update t_emp set empno = empno + 1, mgr = mgr + 1
order by empno desc;
2.2 update 子句 (order by + limit)
(1) 把月收入前三名 的员工底薪减100 元, 用limit 子句完成
# 2. 把月收入前三名 的员工底薪减100 元, 用limit 子句完成
# 2.1 base 先按照薪资 做降序排列
select empno, sal + ifnull(comm, 0)
from t_emp
order by sal + ifnull(comm, 0) desc# 2.2 更新 前三条记录
update t_emp
set sal = sal -100
order by sal + ifnull(comm, 0) desc
limit 3;
(2) 把10部们中 工龄超过20年的员工, 底薪增加240元
# 3. 把10部们中 工龄超过20年的员工, 底薪增加240元
# 3.1 base 查询
select empno, ename, sal, floor(DATEDIFF(now(), hiredate)/365)
from t_emp
where deptno = 10 and DATEDIFF(now(), hiredate)/365 > 20;# 3.2 更新操作
update t_emp
set sal = sal + 240
where deptno = 10 and DATEDIFF(now(), hiredate)/365 > 20;
2.3 update 语句(表连接实现 join + where)
(1) (表连接实现 join + where) 将龙龙 调往 “家乡部1” ,职务调整为“技术大佬”
# 4. (表连接实现 join + where) 将龙龙 调往 “家乡部1” ,职务调整为“技术大佬”
update t_emp em join t_dept de
set em.deptno = de.deptno , em.job = "技术大佬"
where em.ename = "龙龙" and de.dname = "家乡部1";
(2)把底薪低于 公司平均底薪的 员工, 底薪增加150元
# 5. 把底薪低于 公司平均底薪的 员工, 底薪增加150元
# base 查询
select em1.empno, em1.ename, em1.ename, em1.sal, av.av_sal
from t_emp em1 join (select avg(em2.sal) as av_sal from t_emp em2) av
where em1.sal < av.av_salupdate t_emp em1 join (select avg(em2.sal) as av_sal from t_emp em2) av
set em1.sal = em1.sal + 150
where em1.sal < av.av_sal
2.4(左外连接)实现数据更新
(1) 把没有部门的员工, 或者 “家乡部1”部门高于3000底薪的员工,都调往60部门
# 6. (左外连接)实现数据更新
# 需求: 把没有部门的员工, 或者 “家乡部1”部门高于3000底薪的员工,都调往60部门
# base 查询
select em.empno, em.ename, em.sal, em.deptno
from t_emp em left join t_dept de
on em.deptno = de.deptno
where em.deptno is null or (de.dname = "家乡部1" and em.sal > 3000);# 更新
update t_emp em left join t_dept de
on em.deptno = de.deptno
set em.deptno = 60
where em.deptno is null or (de.dname = "家乡部1" and em.sal > 3000);# 验证
select empno, ename, sal, deptno
from t_emp
where deptno = 60
3. delete 语句
3.1 基本用法
(1)删除 10 部门中, 工资最低的员工记录
# 1. 删除 10 部门中, 工资最低的员工记录
# base 查询
select *
from t_emp
where deptno = 10
order by sal + IFNULL(comm , 0)# 删除
delete from t_emp
where deptno = 10
order by sal + IFNULL(comm , 0)
limit 1;
(2)删除 10部门中, 工龄超过45的员工记录
#2. 删除 10部门中, 工龄超过45的员工记录
# base 查询10 部门, 每个员工的工龄
select empno, ename, DATEDIFF(now(), hiredate)/365
from t_emp
where deptno = 10;# 删除
delete
from t_emp
where deptno = 10 and DATEDIFF(now(), hiredate)/365 > 45;
3.2 (表连接删除语法)操作多表删除
(1) (表连接删除) 删除 “家乡部2” 部门和该部门 的全部员工记录
# 3. (表连接删除) 删除 “家乡部2” 部门和该部门 的全部员工记录
# base 查询“家乡部2”部门,以及部门的全部员工记录
select em.empno, em.ename, em.deptno, de.dname
from t_emp em join t_dept de
on em.deptno = de.deptno and de.dname = "家乡部2";# 删除
delete em, de
from t_emp em join t_dept de
on em.deptno = de.deptno and de.dname = "家乡部2";
(2) (表连接删除其中一表记录) 删除 每个低于部门平均底薪 的员工记录
# 4. (表连接删除其中一表记录) 删除 每个低于部门平均底薪 的员工记录
# base 查询 每个部门 的员工记录 + 平均底薪
select em1.empno, em1.ename, em1.sal, em1.deptno, em2.av_sal as deptAvgSal
from t_emp em1 join (select deptno, avg(sal) as av_sal from t_emp group by deptno) em2
on em1.deptno = em2.deptno;
# 删除
delete em1
from t_emp em1 join (select deptno, avg(sal) as av_sal from t_emp group by deptno) em2
on em1.deptno = em2.deptno and em1.sal < em2.av_sal;
(3)删除 员工king 和他的直接下属的 员工记录, 用表连接实现
# 5 删除 员工king 和他的直接下属的 员工记录, 用表连接实现
# base0 查询员工king 和他的直接下属的 员工记录,用表连接
select empno from t_emp where ename = "KING";# base1
select em1.empno, em1.ename, em1.mgr
from t_emp em1 join (select empno from t_emp where ename = "KING") emNo
on em1.mgr = emNo.empno or em1.ename = "KING";# 删除
delete em1
from t_emp em1 join (select empno from t_emp where ename = "KING") emNo
on em1.mgr = emNo.empno or em1.ename = "KING";# 验证
select empno, ename, mgr from t_emp;
3.3 (left join表连接删除)
(1)(左外连接)删除 SALES 部门员工, 以及没有部门的员工
# 6. (左外连接)删除 SALES 部门员工, 以及没有部门的员工
# base 0
-- select deptno from t_dept where dname = "SALES";# base 1
# 查询 SALES 部门员工, 以及没有部门的员工
# 写法一 错误写法
-- select em.empno, em.ename, em.deptno
-- from t_emp em left join (select deptno from t_dept where dname = "SALES") deptT
-- on em.deptno = deptT.deptno or em.deptno is null;# 写法二
select em.empno, em.ename, em.deptno
from t_emp em left join t_dept de on em.deptno = de.deptno
where de.dname = "SALES" or em.deptno is null;# 删除
delete em
from t_emp em left join t_dept de on em.deptno = de.deptno
where de.dname = "SALES" or em.deptno is null;
3.4 truncate快速清空数据表
# 7. 清空数据表
truncate table t_emp;