你能解释一下,内部查询和外部查询是如何工作的

时间:2015-08-13 05:48:20

标签: sql oracle oracle11g oracle-sqldeveloper

我想知道内部和外部查询是如何工作的

请在下面解释我的问题

 update jobgrade set HIGHSAL=6000 
 where GRADE in(select grade from JOBGRADE where grade='B');

2 个答案:

答案 0 :(得分:0)

该查询说更新jobgrade表并将HIGHSAL列的值设置为6000,其中GRADE列的值位于IN列的结果集中{1}}查询。

由于IN查询正在查找jobgrade grade='B'中的所有行,因此它将返回大量值为B的行。这样做没有任何意义。

你应该这样做:

UPDATE jobgrade
SET HIGHSAL=6000
WHERE grade='B'

因为它完全是一样的。

我想我得到了你真正要求的东西。

IN运算符的查询不会受update语句的影响。因此,如果您要更新在该查询中筛选的字段,则结果将基于表在更新语句之前的方式。

我找不到任何支持我理论的内容,但我不相信IN运算符的查询执行多次,而WHERE子句会在UPDATE之前执行}}子句按操作顺序排列。

答案 1 :(得分:0)

在逻辑层面上,您必须分两步分配内部和外部查询。 内部查询的结果 - 在您的情况下是select grade from JOBGRADE where grade='B'部分 - 将在外部查询中appointed where GRADE in part。请注意,有更多选项可以实现内部/外部架构......或(等效的)主查询/子查询架构。特别是在外部查询中使用in语句很重要。您可以使用=子句,但内部查询(〜子查询)必须正好产生1行;不多也不少。否则 ORA-00913: too many values将被抛出。

使用in语句允许内部查询产生0值,1值或更多1值。最后,where GRADE in将与从内部查询中检索的值匹配。