Sql 不同类型的子查询
我正在研究子查询,但我对这个主题有些怀疑。有几种类型的子查询?我已经看到一些网站将子查询分为“单行子查询、多列子查询、多列子查询”。其他人说,这些类型的子查询“子查询作为一个新列,从子查询中选择数据,子查询使用多个表”。因此,我对存在的子查询的类型以及每种类型的工作方式有点困惑。您知道存在哪些类型的子查询以及它们之间的区别吗?或者你有关于这个话题的资源吗?谢谢 我不会称它们为不同类型的子查询。。。子查询只是另一个查询中的任何查询。这可以以各种不同的方式应用 例如,您可能需要一个列,该列使用返回单个结果的子查询显示每行的(相同)最大范围值:Sql 不同类型的子查询,sql,subquery,Sql,Subquery,我正在研究子查询,但我对这个主题有些怀疑。有几种类型的子查询?我已经看到一些网站将子查询分为“单行子查询、多列子查询、多列子查询”。其他人说,这些类型的子查询“子查询作为一个新列,从子查询中选择数据,子查询使用多个表”。因此,我对存在的子查询的类型以及每种类型的工作方式有点困惑。您知道存在哪些类型的子查询以及它们之间的区别吗?或者你有关于这个话题的资源吗?谢谢 我不会称它们为不同类型的子查询。。。子查询只是另一个查询中的任何查询。这可以以各种不同的方式应用 例如,您可能需要一个列,该列使用返回单
SELECT ID, value
,(SELECT MAX(value) from TBL) AS MAX_VALUE
FROM TBL
或者,您可以将子查询作为表/视图进行连接,例如:
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
或'abc'
或当前日期
(注意:某些数据库放宽了对一列的限制。)
在FROM
子句中,子查询返回一个派生表。对返回的行数或列数没有限制
类似地,使用EXISTS
和NOT EXISTS
引入的子查询可以返回任意数量的行和列
然后,在
中有,在
中没有。大多数数据库要求它们只返回一列(但不限制行数)。在此上下文中,一些数据库支持多列(“元组”)
类似地——尽管不太常见——子查询可以与比较操作一起使用ANY
/SOME
/ALL
。它们也只能返回一列(除非数据库支持元组)
“子查询”的另一个用法值得一提。它们可用于定义公共表表达式(CTE),由和引入
子查询也用于横向联接
最后,一些子查询引用外部查询中的列。这些是相关的子查询。一般来说,它们可以在任何地方使用,除了FROM
子句之外——尽管横向联接是一个例外
所有这些都应包含在您正在使用的数据库的文档中。谢谢!您是否知道一些教程或其他关于复杂SQL查询的知识,特别是关于select子句的知识?包含连接、多个表、case语句、分组依据、子查询的复杂查询。这是SQL的基本知识。。。有很多适合不同人群的书籍和在线资源。请尝试在Google上搜索SQL教程或SQL初学者版,并查看一些选项/看看什么适合您。请注意,第二种“类型”也被称为“派生表”。是的,SQL标准将其称为“派生表”:“派生表是通过对@一匹没有名字的马。非常感谢。