首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同类型的子查询

不同类型的子查询
EN

Stack Overflow用户
提问于 2020-10-23 10:06:24
回答 2查看 159关注 0票数 0

我正在研究子查询,但我对这个主题有一些疑问。有一些类型的子查询吗?我已经看到一些站点将子查询划分为“单行子查询、多列子查询、多列子查询”。其他人则认为这是这些类型的子查询“子查询作为一个新列,从子查询中选择数据,使用多个表进行子查询”。因此,Im对存在的子查询类型以及每种类型的工作方式有些困惑。您知道存在哪些类型的子查询以及它们之间的区别吗?或者你对这个话题有什么参考资料吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-23 10:22:01

我不会叫他们不同类型的子查询..。子查询只是另一个查询中的任何查询。这可以以各种不同的方式应用。

例如,您可能需要一个列,该列使用返回单个结果的子查询显示每行的(相同)最大范围值:

代码语言:javascript
复制
SELECT ID, value
,(SELECT MAX(value) from TBL) AS MAX_VALUE
FROM TBL

或者您可以加入子查询,就好像它是一个表/视图一样:

代码语言:javascript
复制
SELECT *
FROM A
JOIN (
      SELECT B.col1, C.col2
      FROM B
      JOIN C on B.ID = C.ID
      WHERE B.col3 = 2
     ) SUB on A.col1 = SUB.col1

还有无数其他的方法来使用子查询--但本质上,它只是一个较大查询中获取所需结果的任何查询。

就您的示例而言,任何查询都可以用于返回单个行、单个值或多个列,并且可以使用一个表、多个表或实际上没有表。子查询没有什么不同--它只是另一个查询的一部分。

票数 1
EN

Stack Overflow用户

发布于 2020-10-23 11:35:19

有不同类型的子查询。这取决于如何使用子查询和如何构造子查询。这里有一些例子。

一个非常重要的类型是标量子查询。这是一个子查询,它返回一个列,最多返回一行。标量子查询很重要,因为它可以在任何地方--或者几乎在任何地方--使用常量。因此,标量子查询可以替换常量,如1'abc'current_date

(注意:一些数据库放宽了对某一列的限制。)

FROM子句中,子查询返回派生表。返回的行或列的数目没有限制。

类似地,使用EXISTSNOT EXISTS引入的子查询可以返回任意数量的行和列。

然后是INNOT IN。大多数数据库要求这些数据库只返回一个列(但不限制行数)。在这种情况下,一些数据库支持多列(“元组”)。

类似地--尽管不常见--子查询可以与使用ANY/SOME/ALL.的比较操作一起使用。它们也只能返回一个列(除非数据库支持元组)。

“子查询”的另一种用法值得一提。它们可以用于定义WITH引入的通用表表达式(CTEs)。

子查询也与横向连接一起使用。

最后,一些子查询引用外部查询中的列。这些是相关的子查询。通常,除了FROM子句之外,它们可以在任何地方使用--尽管横向联接是一个例外。

所有这些都应该在您正在使用的数据库的文档中讨论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64497989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档