问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Oracle标量子查询的概念

发布网友 发布时间:2022-04-30 09:10

我来回答

2个回答

懂视网 时间:2022-04-30 13:32

SQL> conn scott/scott
Connected.
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 a
Plan 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 a
Plan 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 a9
9 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 a
Plan 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 a9
9 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 a
Plan 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表就要被执行多少次。

标量子查询改写:

1
SQL> select * from a;
 ID NAME
---------- ----------
  1 a1
  2 a2
SQL> select * from b;
 ID NAME
---------- ----------
  1 b1
  2 b2
SQL> select name,(select name from b where b.id=a.id) from a;
NAME    (SELECTNAM
---------- ----------
a1    b1
a2    b2

改写:

SQL> select a.name,b.name from a,b where a.id=b.id(+);
NAME    NAME
---------- ----------
a1    b1
a2    b2

oracle标量子查询

标签:oracle

热心网友 时间:2022-04-30 10:40

这里有例子,你仔细看看

http://blog.csdn.net/huanghui22/archive/2007/04/30/1593263.aspx
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
煤气管道改造多少钱 皮革沙发套怎么清理呢? 如何清理白色沙发 诚如神之所说游戏介绍 关于真三国无双4的一个问题 几个关于真三国无双4的问题 真三国无双4猛将传的一个小小的问题!! 真三国无双4的一点小问题! 真3国无双4猛将转问题 真三国无双4一些新手问题!请高手一一解答! 4个问题!说好的话加100... 教室里有多少人?(how many)用英语怎么说 howmanycoiors怎么读 how many are there英语怎么读 Oh,chocolates,How many怎么读 英语howmanyappies怎么读 HowmanygreenmarbIeS?怎么读 多少用英语怎么说? how,many用中文怎么读 How和many怎么读 howmany怎么读,是什么意思 howmanyredmarbles英语怎么读? howmany怎么读?中文怎么发音? howmany怎么读 howmany怎么读? 四川邮政工会卡怎么买电影票 三星s5手机给书旗小说添加信任怎么添 哪位高手知道三星s5打不开其他浏览网页是什么原因,图片老是只出现一半就无法加载了 四川省工会会员服务卡需要交年费吗? 911s5什么密码 眉山市工会会员单位职工住院补助 衣服被掉色衣服染色了怎么办,浅绿色衣服被掉色的红色 洗衣服被别的衣服染上样色怎么办染上色怎么办?急!…………(除了用醋外) 浅绿色呢料衣服染色后怎么办 山东省庆云县得贷款利率是多少 想知道山东农村信用社今年的贷款利息是多少?一至三年? 山东省公积金贷款利率是多少 山东省临沂市平邑县农村信用合作社个人贷款利率 oracle标量子查询 与外连接 哪个好 5.2m=()dm 0·52m等于多少dm? 2米等于多少分米等于多少厘米30平方分米等于多少平方米3.5米等于多少米多少分? Amazfit华米手表的电量如何查看 华米手表怎么插卡 华米手表遥控三星手机拍照怎么连接 笔记本Nvidia1660ti可以用D5渲染器吗? matebookxpro MX150显卡 会影响D5渲染器的运行吗? 3dmax 作图渲染和CAD制图 电脑配置要求 d5渲染器打不开是显卡问题吗? 推荐3DMAX PS 能跑起来的,渲染出色的电脑配置 影视后期工作所需的电脑配置?不要求最好的,但是起码渲染高清毫无压力。