Raj*_*Raj 6 sql oracle oracle-apex
我的疑问是,如果我在 where 子句中编写子查询,那么该子查询将为每个记录执行或仅执行一次。例如,
select *
from emp
where empno in (select empno from emp);
Run Code Online (Sandbox Code Playgroud)
如果我有这样的查询那么会发生什么?
SELECT *
FROM emp
WHERE EXISTS (SELECT 'RANDOM' FROM dual)
Run Code Online (Sandbox Code Playgroud)
SQL 查询代表生成的结果集,而不是生成它的具体步骤。也就是说,SQL 是一种描述性语言,而不是一种过程性语言。
事实上,实际运行的通常是操作的有向无环图 (DAG),与原始查询几乎没有相似之处。不仅查询被转换为图的节点,而且优化步骤进一步增加了与原始查询的距离。
认为子查询实际上会针对外部查询中的每一行运行的想法是错误的。通过这种方式理解查询的结果是完全可以的,但是引擎可以做任何它想做的事情,比如将子查询转换为联接,只要它保证查询指定的结果就是所产生的结果即可。
事实上,很少有 SQL 数据库会在您编写的任一查询中实际对外表中的每一行运行子查询。
| 归档时间: |
|
| 查看次数: |
1273 次 |
| 最近记录: |