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?