请问老师为什么 update 更新语句也会使用到相关子查询呢

来源:3-6 CRUD操作(二)

小学生6年级

2020-08-02

这里有点困惑:
update t_tmp set sal = 10000 where
deptno = (select deptno from t_dept where dname = “sales”)

我翻译一下子查询的步骤,麻烦老师看看合适么:每次都取 t_tmp 表中的一行数据带到子查询里面,然后子查询出合适的 deptno 后,还要对比一下该 deptno 看看和 t_tmp 表中当前这一行的 deptno 相等不相等,相等才更新。这算是一次子查询,而这里总计会执行 t_tmp 表中总行数的子查询次数,请问是这个意思吗?

写回答

2回答

神思者

2020-08-02

只要是where子句的子查询都是相关子查询,跟缓存没关系。这条update语句可以写成表连接的语法,把子查询当成临时表做连接就效率高了很多。你百度一下update语句的表连接,这个写法是高效的

1
0

小学生6年级

提问者

2020-08-02

而其他有缓存优化的,也是按顺序执行,只不过第一次执行以后,子查询的结果集被缓存下来,之后每次直接去结果集中取。我的理解是这样的,请问老师合适么?  如果是的话,为什么不做引擎 ast 解析优化,让子查询先来?    


本人是非科班的前端,在数据库这方面比较薄弱,这里向老师请教一下。。

0
0

阿里新零售数据库设计与实战 (升级版)

解锁“新零售”业务让数据库实战能力再上一层楼

2101 学习 · 701 问题

查看课程