温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用ANSI SQL做更新

发布时间:2026-07-26 20:51:11 来源:亿速云 阅读:96 作者:小樊 栏目:数据库

ANSI SQL 中,更新数据使用的是 UPDATE 语句。下面从基础到常见场景给你一个完整说明。


一、最基本的 UPDATE(ANSI SQL)

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;

四、使用子查询更新(ANSI SQL 标准)

1️⃣ 标量子查询(最常用)

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;

✅ 子查询必须返回 单行单列


2️⃣ 根据另一张表更新(通用写法)

UPDATE employees
SET salary = (
    SELECT AVG(salary)
    FROM employees e2
    WHERE e2.department_id = employees.department_id
)
WHERE department_id = 10;

五、使用 CASE 条件更新

UPDATE employees
SET salary =
    CASE
        WHEN salary < 5000 THEN salary * 1.2
        WHEN salary < 8000 THEN salary * 1.1
        ELSE salary
    END;

六、存在性判断(EXISTS)

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 中 不支持 的写法(注意)

不是 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 常见错误

❌ 忘记 WHERE

UPDATE employees
SET salary = 0;  -- 全部清零

❌ 子查询返回多行

UPDATE employees
SET salary = (
    SELECT salary FROM employees WHERE department_id = 10
);

九、总结(速查)

场景 ANSI SQL
单表更新
多列更新
表达式更新
子查询更新
JOIN 更新
MERGE ❌(单独语法)

如果你愿意,可以告诉我:

  • 你用的是 Oracle / MySQL / PostgreSQL / SQL Server
  • 具体想更新的业务场景

我可以帮你写 最标准、最安全 的 ANSI SQL 更新语句。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI