SQL 子查询

注意: 我们希望能够尽快以你的语言为你提供最新的帮助内容。本页面是自动翻译的,可能包含语法错误或不准确之处。我们的目的是使此内容能对你有所帮助。可以在本页面底部告诉我们此信息是否对你有帮助吗?请在此处查看本文的英文版本以便参考。

子查询是 SELECT 语句嵌套在选择,选择...到,插入...INTO、 删除或更新语句或另一个子查询内。

语法

三种语法形式可用于创建子查询:

比较[任何 |所有 |某些] (

表达式[不]在 (

[不]EXISTS (

子查询中包含以下部分:

部分

说明

比较

表达式并将与子查询的结果表达式进行比较的比较运算符。

expression

搜索子查询的结果为其设置的表达式。

sqlstatement

SELECT 语句中,为任何其他 SELECT 语句中执行的相同格式和规则。 它必须括在括号中。


备注

您可以使用子查询,而不是在 WHERE 子句或 HAVING 子句 SELECT 语句的字段列表中或表达式。 在子查询,您可以使用 SELECT 语句提供一个或多个特定值,要在 WHERE 子句或 HAVING 子句表达式中计算一组。

使用任何或某些谓词,同义,可以检索满足任何子查询中检索的记录的比较条件的记录中主查询。 下面的示例返回单价大于 25%或更多折扣销售任何产品的所有产品:

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

使用 ALL 谓词只检索记录在主查询检索子查询中的所有记录满足比较。 如果任何到上一示例中的所有更改,查询将返回这些产品单价大于的所有产品销售 25%或更多折扣。 这是更严格。

使用 IN 谓词只检索记录主查询中的子查询中的某些记录包含相等的值。 下面的示例返回 25%或更多折扣的所有产品:

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

相反,您可以使用 NOT IN 只检索记录主查询中的子查询中的任何记录包含相等的值。

使用 EXISTS 谓词 (可选不保留字) 真/假比较,以确定是否子查询返回的任何记录中。

您可以在子查询中使用表名的别名来引用外部子查询 FROM 子句中列出的表。 下面的示例返回薪金等于或大于相同职务的所有雇员的平均薪金雇员的名称。 员工表给出了别名"T1":

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

在前面的示例中,作为保留字是可选的。

某些子查询可以在交叉表查询,特别是作为谓词 (WHERE 子句中)。 交叉表查询中不允许子查询用作输出 (选择列表中)。



扩展你的 Office 技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×