这个 SQL 选择结构叫啥?

Posted

技术标签:

【中文标题】这个 SQL 选择结构叫啥?【英文标题】:what is this SQL select construct called?这个 SQL 选择结构叫什么? 【发布时间】:2011-04-15 17:54:01 【问题描述】:

以下选择语句中以粗体显示的 select 结构的术语是什么?

选择 a.t1 作为 a,(从 b WHERE b.x = a.t1 选择 b.n 作为 b), c.t2 作为 c 从 a, c WHERE a.x = c.x

我在解释这可以在 oracle 中完成,但当被问到它叫什么时,我想不出任何术语。有这个术语吗?还是只是选择一个选择结果?

编辑:扩展查询以使子查询使用清晰

【问题讨论】:

一分钟内有四个答案,都称其为略有不同。我喜欢 SQL... 这显然是一个子查询,但我认为它是guigui42 suggests 的标量还是RedFilter suggests 的相关取决于您遗漏的部分。至少,这是 mysql 人员使用的术语:dev.mysql.com/doc/refman/5.0/en/subqueries.html @TJ:它实际上可能是两者,也可能两者都不是,尽管如果它不是标量,查询会爆炸...... @RedFilter:好点!所以假设它是函数式的,它要么是一个标量子查询,要么是一个标量相关子查询。 另外,这个“相关标量子查询”在大多数情况下可以很容易地被 INNER JOIN 代替,更容易阅读,效率更高! 【参考方案1】:

这是一个子查询。如果b.n 在外部查询中引用别名为b 的表,则可以将其称为correlated subquery。

正如 guigui42 所指出的,它也是一个 scalar 查询,因为它最多只返回一列和一行。事实上,您必须注意确保最多只返回一行,否则查询可能会在以后崩溃。这通常通过使用 TOP 1 或等效项来防止。

【讨论】:

"...因为它指的是外部查询中的一个表。" 是吗?我很想念它。 可能是WHERE 之后的“...”会留下一个大大的问号... @TJ:你是对的,我错误地假设b.n 引用了查询之外的表。我们无法从发布的片段中看出这一点。我会更新我的回复。 @RedFilter:嗯,你是否弄错还不清楚。你很可能是对的。无论如何,这是一个很好的答案。 更准确地说,我认为它是一个“标量相关子查询”,因为它在 select 子句中每行返回一个且只有一个结果。 看起来“标量相关子查询”可能是最准确的术语【参考方案2】:

我会说“标量子查询

编辑:正如 RedFilter 所说,它也是一个相关的子查询。

所以它是一个标量相关子查询

【讨论】:

嗯,它可能被证实了。它可能没有,OP 没有给我们足够的工作。 怎么可能不是关联子查询?问题(未修改)说“(SELECT b.n as b FROM n WHERE ...)”; b.n 列必须来自表“n”以外的其他地方,不是吗? (除非有一种方法可以在表中嵌套结构化类型,在这种情况下,表 N 可能包含一个复合列 B,其中包含一个组件 N……Oracle 会沉迷于这些东西吗?某些 ORDBMS 会这样做。) @Jonathan Leffler:在这种情况下,没有证据表明主查询的FROM 子句中的表会出现在标量子查询的WHERE 子句中。 @onedaywhen:b.n 中的b 是什么? @onedaywhen:此外,主查询中的表可以出现(并且似乎出现)在选择列表中;这将使它成为一个相关查询,无论表是否在 WHERE 中提及。【参考方案3】:

嵌套子查询。

...如果使用不当(这种情况经常发生),性能也会很差。

【讨论】:

顺便说一句,这被用来替换 oracle case 语句,用描述性术语替换 ID 代码。它的可读性更高,性能也可以接受。【参考方案4】:

这被称为sub-select

【讨论】:

很多东西都是子选择。我需要更具体的东西。

以上是关于这个 SQL 选择结构叫啥?的主要内容,如果未能解决你的问题,请参考以下文章

这个css结构叫啥?

数据结构中的是树形的结构都有哪些,算法叫啥名字?

这个 &:last Ruby 结构叫啥? [复制]

MySQL的SQL语言叫啥?

SQL Server:在此 JSON 结构中选择 JSON 列

sql server 导出表结构