SQL Server中的嵌套select语句

Bre*_*ent 363 sql sql-server nested querying subquery

有人可以帮助我理解为什么以下不起作用?

SELECT name FROM (SELECT name FROM agentinformation)
Run Code Online (Sandbox Code Playgroud)

我想我对SQL的理解是错误的,因为我会认为这会返回相同的东西

SELECT name FROM agentinformation
Run Code Online (Sandbox Code Playgroud)

内部select语句是否创建了外部SELECT语句然后查询的结果集?

Joe*_*lli 630

您需要为子查询添加别名.

SELECT name FROM (SELECT name FROM agentinformation) a  
Run Code Online (Sandbox Code Playgroud)

或者更明确

SELECT a.name FROM (SELECT name FROM agentinformation) a  
Run Code Online (Sandbox Code Playgroud)

  • 确保你的别名有点冗长!当我和t1,t2,t3,t4,t5,t6一起工作时,我喜欢 (67认同)
  • @BrennanVincent白痴不问问题;) (44认同)
  • 对,我是个白痴!谢谢,一旦允许就会接受. (25认同)
  • @ColonelPanic:外部查询的WHERE子句将在最后添加. (3认同)
  • `where`子句在哪里用于外部查询? (2认同)
  • Oracle 接受没有别名的第一个 `select`。 (2认同)

Som*_*luk 43

Joe Stefanelli提供的答案已经是正确的.

SELECT name FROM (SELECT name FROM agentinformation) as a  
Run Code Online (Sandbox Code Playgroud)

我们需要创建子查询的别名,因为查询需要表对象,我们将从别名到子查询获得.从概念上讲,子查询结果被替换为外部查询.由于我们需要外部查询中的表对象,我们需要创建内部查询的别名.

包含子查询的语句通常采用以下格式之一:

  • WHERE表达式[NOT] IN(子查询)
  • WHERE表达式comparison_operator [ANY | 全部](子查询)
  • 哪里[NOT] EXISTS(子查询)

检查更多子查询规则子查询类型.

嵌套子查询的更多示例.

  1. IN/NOT IN - 此运算符在内部查询执行后获取内部查询的输出,该查询可以是零个或多个值,并将其发送到外部查询.外部查询然后获取所有匹配的[IN运算符]或不匹配的[NOT IN运算符]行.

  2. ANY - [> ANY或ANY运算符获取内部查询生成的值列表,并获取大于列表最小值的所有值.该

例如> ANY(100,200,300),ANY运算符将获取大于100的所有值.

  1. ALL - [> ALL或ALL运算符获取内部查询生成的值列表,并获取大于列表最大值的所有值.该

例如> ALL(100,200,300),ALL运算符将获取大于300的所有值.

  1. EXISTS - EXISTS关键字产生一个布尔值[TRUE/FALSE].此EXISTS检查子查询返回的行的存在.