在 ANSI SQL 中,更新数据使用的是 UPDATE 语句。下面从基础到常见场景给你一个完整说明。
UPDATE 表名
SET 列名 = 新值
WHERE 条件;
✅ 说明
SET:指定要修改的列和新值WHERE:指定更新哪些行(非常重要)WHERE 会更新整张表UPDATE employees
SET salary = 8000
WHERE employee_id = 101;
UPDATE employees
SET salary = 9000,
department_id = 20
WHERE employee_id = 101;
UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 10;
UPDATE employees e
SET department_name = (
SELECT d.department_name
FROM departments d
WHERE d.department_id = e.department_id
)
WHERE e.department_id IS NOT NULL;
✅ 子查询必须返回 单行单列
UPDATE employees
SET salary = (
SELECT AVG(salary)
FROM employees e2
WHERE e2.department_id = employees.department_id
)
WHERE department_id = 10;
UPDATE employees
SET salary =
CASE
WHEN salary < 5000 THEN salary * 1.2
WHEN salary < 8000 THEN salary * 1.1
ELSE salary
END;
UPDATE employees e
SET salary = salary + 500
WHERE EXISTS (
SELECT 1
FROM departments d
WHERE d.department_id = e.department_id
AND d.location_id = 100;
);
❌ 不是 ANSI SQL 标准(某些数据库支持)
-- MySQL / SQL Server 特有
UPDATE A
JOIN B ON A.id = B.id
SET A.col = B.col;
-- Oracle MERGE(不是纯 UPDATE)
MERGE INTO ...
如果要写 可移植 SQL,应避免这些。
UPDATE employees
SET salary = 0; -- 全部清零
UPDATE employees
SET salary = (
SELECT salary FROM employees WHERE department_id = 10
);
| 场景 | ANSI SQL |
|---|---|
| 单表更新 | ✅ |
| 多列更新 | ✅ |
| 表达式更新 | ✅ |
| 子查询更新 | ✅ |
| JOIN 更新 | ❌ |
| MERGE | ❌(单独语法) |
如果你愿意,可以告诉我:
我可以帮你写 最标准、最安全 的 ANSI SQL 更新语句。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。