UPDATE 语句中的子查询

子查询可以用在 UPDATE 语句中。

当子查询同 UPDATE 一起使用的时候,既可以更新单个列,也可更新多个列。

1 实例

现在有与 teachers 表拥有相同结构和数据的 teachers_bkp 表。现在要将 teachers 表中所有 age(年龄) 小于 20 岁老师的 age 修改为 21 岁,代码如下:

UPDATE teachers 
SET age = 21 
WHERE id IN ( 
            SELECT id 
            FROM teachers_bkp 
            WHERE age < 20 
        );

执行后 teachers 表数据为:

mysql> UPDATE teachers
    -> SET age = 21
    -> WHERE id IN (
    ->             SELECT id
    ->             FROM teachers_bkp
    ->             WHERE age < 20
    ->         );
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM teachers;
+----+------------------+---------------------------+-----+---------+
| id | name             | email                     | age | country |
+----+------------------+---------------------------+-----+---------+
|  1 | Eastern Heretic  | eastern.heretic@gmail.com |  20 | CN      |
|  2 | Northern Beggar  | northern.beggar@qq.com    |  21 | CN      |
|  3 | Western Venom    | western.venom@163.com     |  28 | USA     |
|  4 | Southern Emperor | southern.emperor@qq.com   |  21 | CN      |
|  5 | Linghu Chong     | NULL                      |  21 | CN      |
+----+------------------+---------------------------+-----+---------+
5 rows in set (0.01 sec)

2. 总结

通过上面的实例学习,总结其基本语法如下所示:

UPDATE table_name SET column_name = new_value
WHERE column_name OPERATOR 
   (SELECT column_name
   FROM table_name  [WHERE] )

练习题:

现在有与 courses 表拥有相同结构和数据的 courses_bkp 表。现在要将 courses 表中所有 student_number(学生人数) 大于等于 200 课程的 student_number 修改为 100。

Last updated

Was this helpful?