Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 不同类型的子查询_Sql_Subquery - Fatal编程技术网

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标准将其称为“派生表”:“派生表是通过对@一匹没有名字的马。非常感谢。