oracle中TABLE子句的功能
functionality of the TABLE clause in oracle
根据 oracle 文档,我很难理解 TABLE 子句的作用:
it transforms a collection like a nested table into a table which could be used in an sql statement.
这看起来很清楚,但我不知道它在实践中是如何工作的。
这些是相关类型和 tables;
create type movies_type as Table of ref movie_type;
create type actor_type under person_type
(
starring movies_type
) Final;
create table actor of actor_type
NESTED TABLE starring STORE AS starring_nt;
我想列出他们主演的演员和电影,这个有效
select firstname, lastname, value(b).title
from actor2 a, table(a.starring) b;
但我不明白为什么。为什么不是这个
actor2 a, table(a.starring) b
笛卡尔积?
此外,为什么 value(b) 在这里起作用?因为它是 table 个 refs,它应该是 deref,但那不起作用。
我的问题是:
为什么这个查询按预期工作?我希望它列出每个演员和每部电影(笛卡尔积),因为没有关于如何加入的特定条件,为什么 value(b) 在这里工作?,因为它是 table 的参考文献,它应该是deref,但这不起作用。
我没有 oracle 的心智模型 sql,非常感谢有关如何正确学习的帮助。
非常感谢。
它不是笛卡尔积,因为 table(a.starring)
与 a
相关:对于 a
中的每一行,它是 运行 table
与其对应的函数starring
嵌套 table.
这不是 Oracle 中非常常见的数据建模方式,通常您会使用联结 table 来允许正确规范化的模型(这通常更容易查询并允许更好的性能)
根据 oracle 文档,我很难理解 TABLE 子句的作用:
it transforms a collection like a nested table into a table which could be used in an sql statement.
这看起来很清楚,但我不知道它在实践中是如何工作的。
这些是相关类型和 tables;
create type movies_type as Table of ref movie_type;
create type actor_type under person_type
(
starring movies_type
) Final;
create table actor of actor_type
NESTED TABLE starring STORE AS starring_nt;
我想列出他们主演的演员和电影,这个有效
select firstname, lastname, value(b).title
from actor2 a, table(a.starring) b;
但我不明白为什么。为什么不是这个
actor2 a, table(a.starring) b
笛卡尔积?
此外,为什么 value(b) 在这里起作用?因为它是 table 个 refs,它应该是 deref,但那不起作用。
我的问题是:
为什么这个查询按预期工作?我希望它列出每个演员和每部电影(笛卡尔积),因为没有关于如何加入的特定条件,为什么 value(b) 在这里工作?,因为它是 table 的参考文献,它应该是deref,但这不起作用。
我没有 oracle 的心智模型 sql,非常感谢有关如何正确学习的帮助。
非常感谢。
它不是笛卡尔积,因为 table(a.starring)
与 a
相关:对于 a
中的每一行,它是 运行 table
与其对应的函数starring
嵌套 table.
这不是 Oracle 中非常常见的数据建模方式,通常您会使用联结 table 来允许正确规范化的模型(这通常更容易查询并允许更好的性能)