oracle标量子查询
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,SQL> conn scott/scottConnected.SQL> create table a (id int,name varchar2(10));Table created.SQL> cre
千家信息网最后更新 2025年01月21日oracle标量子查询
SQL> conn scott/scottConnected.SQL> create table a (id int,name varchar2(10));Table created.SQL> create table b (id int,name varchar2(10));Table created.SQL> insert into a values(1,'a1');1 row created.SQL> insert into a values(2,'a2');1 row created.SQL> insert into b values(1,'b1');1 row created.SQL> insert into b values(2,'b2');1 row created.SQL> commit;Commit complete.
SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID 8rv825dykpx1m, child number 1-------------------------------------select a.*,(select name from b where b.id=a.id) from aPlan hash value: 2657529235------------------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | | 2 |00:00:00.01 | 8 ||* 1 | TABLE ACCESS FULL| B | 2 | 1 | 2 |00:00:00.01 | 14 || 2 | TABLE ACCESS FULL| A | 1 | 2 | 2 |00:00:00.01 | 8 |------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - filter("B"."ID"=:B1)Note----- - dynamic sampling used for this statement (level=2)23 rows selected.
B表被执行2次,返回2条数据。
SQL> insert into a values(3,'a3');1 row created.SQL> commit;Commit complete.
SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID 9rufvg18a2vfq, child number 0-------------------------------------select a.*,(select name from b where b.id=a.id) from aPlan hash value: 2657529235------------------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | | 3 |00:00:00.01 | 8 ||* 1 | TABLE ACCESS FULL| B | 3 | 1 | 2 |00:00:00.01 | 21 || 2 | TABLE ACCESS FULL| A | 1 | 3 | 3 |00:00:00.01 | 8 |------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - filter("B"."ID"=:B1)Note----- - dynamic sampling used for this statement (level=2)23 rows selected.
B表被执行3次,返回2条数据。
SQL> insert into a values(4,'a4');1 row created.SQL> insert into a values(5,'a5');1 row created.SQL> insert into a values(6,'a6');1 row created.SQL> insert into a values(7,'a7');1 row created.SQL> insert into a values(8,'a8');1 row created.SQL> insert into a values(9,'a9');1 row created.SQL> commit;Commit complete.SQL> select a.*,(select name from b where b.id=a.id) from a; ID NAME (SELECTNAM---------- ---------- ---------- 1 a1 b1 2 a2 b2 3 a3 4 a4 5 a5 6 a6 7 a7 8 a8 9 a99 rows selected.SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID 8rv825dykpx1m, child number 1-------------------------------------select a.*,(select name from b where b.id=a.id) from aPlan hash value: 2657529235------------------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | | 9 |00:00:00.01 | 8 ||* 1 | TABLE ACCESS FULL| B | 9 | 1 | 2 |00:00:00.01 | 63 || 2 | TABLE ACCESS FULL| A | 1 | 2 | 9 |00:00:00.01 | 8 |------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - filter("B"."ID"=:B1)Note----- - dynamic sampling used for this statement (level=2)23 rows selected.
B表被执行9次,返回2行数据,说明a表向b传值,能匹配上就返回,匹配不上就返回null
SQL> update b set name='b1';2 rows updated.SQL> commit;Commit complete.SQL> select a.*,(select name from b where b.id=a.id) from a; ID NAME (SELECTNAM---------- ---------- ---------- 1 a1 b1 2 a2 b1 3 a3 4 a4 5 a5 6 a6 7 a7 8 a8 9 a99 rows selected.SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------SQL_ID 8rv825dykpx1m, child number 1-------------------------------------select a.*,(select name from b where b.id=a.id) from aPlan hash value: 2657529235------------------------------------------------------------------------------------| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | | 9 |00:00:00.01 | 8 ||* 1 | TABLE ACCESS FULL| B | 9 | 1 | 2 |00:00:00.01 | 63 || 2 | TABLE ACCESS FULL| A | 1 | 2 | 9 |00:00:00.01 | 8 |------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - filter("B"."ID"=:B1)Note----- - dynamic sampling used for this statement (level=2)23 rows selected.
理想状态下,a.id为主键,没有重复值,那么a表返回多少行,b表就要被执行多少次。
标量子查询改写:
1SQL> select * from a; ID NAME---------- ---------- 1 a1 2 a2SQL> select * from b; ID NAME---------- ---------- 1 b1 2 b2SQL> select name,(select name from b where b.id=a.id) from a;NAME (SELECTNAM---------- ----------a1 b1a2 b2
改写:
SQL> select a.name,b.name from a,b where a.id=b.id(+);NAME NAME---------- ----------a1 b1a2 b2
数据
量子
查询
状态
理想
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器能启动但检测不到磁盘
网络安全责任制考核评价实施办法
辽宁新东方网络技术有限公司
校园网络安全教育心得
网络安全手查报
软件开发质量控制标准
手机ea服务器在哪里
网络安全相关宪法
湘西网络安全系统哪家好
美国的软件开发政策
网络安全与隐私保护咨询
广州网络安全支撑单位
四年级网络安全手抄报图片
服务器上显示数据库命令
网络安全法规定实施
我的世界炸服务器的红石机关
服务器硬盘维修价格清单
一个数据库表至多有聚集索引
小米手机微信总是连不到服务器
数据库中查询表中最后一行
武汉软件开发驻场服务
南京联投网络技术
优质软件开发口碑好
xshell远程重启服务器
服务器能控制几个led
网络安全内容二年级
网络安全安全机制
宽带网络技术ppt
岳阳游戏软件开发收费
用友t 数据库是哪个表