“教程所用示例表:关注并回复关键字“sql教程示例数据”即可获取,需要的朋友请自取。
哈喽,各位朋友大家好啊🤝🤝🤝!清明节过了,大家有没有出去玩呢?假期的时间总是过得格外的快,眨眼间又到上班学习的时间了。在这个技术高速发展的时代,唯一能够让我们不掉队的方式就是学习。所以,让我们开始今天的学习之旅吧!
欢迎来到我的SQL教程系列的第6讲——更新数据。今天的主讲内容是SQL中的数据更新操作。在SQL数据库管理中,更新数据是一项至关重要的操作。无论是对单个表中的记录进行更新,还是在记录存在于另一个表中时更新数据,更新操作都是保持数据库内容最新和准确的重要手段。本文将专注于SQL中更新数据的各种技术和方法,包括单表记录更新、当记录在另一个表中存在时的更新、使用另一个表的值更新记录以及合并记录等。通过深入探讨这些主题,我们将学习如何高效地管理和更新数据库中的数据,为数据库管理工作提供有力的支持。
Problem:假设你想修改单表中的某些行或所有行的值。比如,将20号部门中所有员工的薪水都增长10%。
Solution:使用UPDATE语句和WHERE子句即可实现按条件更新记录。
UPDATE emp
SET sal = sal * 1.10
WHERE deptNo = 20;
UPDATE语句和WHERE子句可以实现按条件更新行,WHERE子句后面跟条件表达式即可(比如上面的deptNo = 20)。如果省略WHERE子句,则会更新表中的所有行。CASE表达式的UPDATE语句SELECT deptNo,
eName,
sal ori_sal,
sal * .10 amt_to_add,
sal * 1.10 new_sal
FROM emp
WHERE deptNo = 20
ORDER BY deptNo, new_sal;
现在想要将这些员工的薪水变回更新前的值,如何实现?
UPDATE的SET子句后使用CASE表达式即可实现。UPDATE emp
SET sal = CASE
WHEN eName = 'SMITH' THEN 800
WHEN eName = 'ADAMS' THEN 1100
WHEN eName = 'JONES' THEN 2975
WHEN eName = 'SCOTT' THEN 3000
WHEN eName = 'FORD' THEN 3000
ELSE sal
END
WHERE deptNo = 20;
CASE表达式相当于二重条件,WHERE子句是第一重条件(根据部门号更新),SET子句后后的CASE表达式再根据另一个字段(员工姓名)将20号部门的员工薪水更新回原来的值。这有点类似数据恢复,但是这种方法仅限于技术说明或者涉及需要更新的行比较少时,在实际工作中,数据量往往比较大,这种方式不可取,需要通过事务、日志或者第三方工具等方式恢复数据。DROP TABLE IF EXISTS emp_bonus;
CREATE TEMPORARY TABLE IF NOT EXISTS emp_bonus
(
empNo INT PRIMARY KEY,
eName VARCHAR(50) NOT NULL
);
INSERT INTO emp_bonus (empNo, eName)
VALUES (7360, 'SMITH'),
(7900, 'JAMES'),
(7934, 'MILLER');
SELECT * FROM emp_bonus;
UPDATE语句的WHERE子句中使用一个子查询,用于找到那些在emp_bonus表中的员工,然后将他们的薪水增加20%即可。UPDATE emp
SET sal = sal * 1.20
WHERE empNo IN (SELECT empNo FROM emp_bonus);
IN谓词用于检验emp表中的员工号是否在子查询所返回的员工号值列表中。另外,我们还可以使用相关子查询实现与上面相同的更新效果:UPDATE emp
SET sal = sal * 1.20
WHERE EXISTS(
SELECT NULL
FROM emp_bonus eb
WHERE emp.empNo = eb.empNo
);
DROP TABLE IF EXISTS new_sal;
CREATE TEMPORARY TABLE IF NOT EXISTS new_sal
(
deptNo INT PRIMARY KEY,
sal INT NOT NULL
);
INSERT INTO new_sal (deptNo, sal)
VALUES (10, 4000);
SELECT * FROM new_sal;
如果emp表中的部门号跟new_sal表中部门号匹配,则将emp表中的对应部门下员工的薪水更新为new_sal表中的薪水,佣金更新为薪水的一半。
-- MySQL
UPDATE emp e, new_sal ns
SET e.sal = ns.sal,
e.comm = ns.sal / 2
WHERE e.deptNo = ns.deptNo;
在本教程中,我们深入研究了SQL中更新数据的各种技术和方法。通过学习如何对单个表中的记录进行更新,以及在记录存在于另一个表中时如何更新数据,我们提升了SQL操作的熟练程度,并增强了对数据库管理的理解和应用能力。同时,我们还学习了如何使用另一个表的值来更新当前表的记录。通过掌握这些技术,我们能够更加灵活和高效地管理和更新数据库中的数据,保持数据内容的最新和准确。希望本教程能够帮助您更好地掌握SQL中更新数据的操作,并在实际工作中取得更大的成就。
“如果你觉得这篇文章对你有用,请“点赞➕关注”支持我(关注我,不迷路🤭🤭🤭),你的点赞和关注就是我持续创作分享的动力,让更多的朋友发现并加入我们,共同学习和进步!
Thank you for reading!
- END -
推荐阅读👇👇👇
原文作者:数据派探险家;如有侵权,请联系管理员删除。