Access 2003完整教程:SQL 子查询

子查询是指嵌套于 SELECT、SELECT...INTO、INSERT...INTO、DELETE 或 UPDATE 语句或其他子查询中的 SELECT 语句。

语法

可以通过三种语法形式来创建子查询:

comparison [ANY | ALL | SOME] (sqlstatement)

expression [NOT] IN (sqlstatement)

[NOT] EXISTS (sqlstatement)

子查询语句包含了以下部分:

部分说明
comparison表达式和比较运算符,用于对表达式与子查询的结果进行比较。
expression用来搜索子查询的结果集的表达式。
sqlstatementSELECT 语句,遵循和任何其他 SELECT 语句一样的格式和规则。它必须用圆括号括起来。

说明

可以在 SELECT 语句的字段列表中、在 WHERE 子句中或在 HAVING 子句中使用子查询来代替表达式。在子查询中,可以通过 SELECT 语句来提供一组要在 WHERE 或 HAVING 子句表达式中计算的一个或多个指定值。

通过同义的 ANY 或 SOME 谓词,可以检索在主查询的记录中满足与子查询所检索出的任何记录进行比较的比较条件的记录。下面的示例返回那些单价高于以 25% 或更高折扣出售的任何产品的单价的产品:

SELECT * FROM Products

WHERE UnitPrice > ANY

(SELECT UnitPrice FROM OrderDetails

WHERE Discount >= .25);

使用 ALL 谓词可以只检索出在主查询的记录中满足子查询所检索出的所有记录的比较条件的记录。如果将前面的示例中的 ANY 改为 ALLG,查询将只返回那些单价高于以 25% 或更高折扣出售的任何产品的单价的产品。它的限制性更强。

通过 IN 谓词可以只检索出在主查询的记录中作为子查询的一部分记录而包含相同值的记录。下面的示例返回所有以 25% 或更高折扣出售的所有产品:

SELECT * FROM Products

WHERE ProductID IN

(SELECT ProductID FROM OrderDetails

WHERE Discount >= .25);

相应地,可以使用 NOT IN 来仅检索出在主查询的记录中作为子查询的记录而不包含相同值的记录。

使用 EXISTS 谓词(带有可选的 NOT 保留字)可以通过 True/False 比较来确定子查询是否返回了任何记录。

您也可以在子查询中使用表名的别名来引用在子查询外部的 FROM 子句中列出的表。下面的示例返回了薪金等于或大于具有同等职称的所有雇员的平均薪金的雇员名。Employees 表别名为“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;

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

允许一些子查询用在交叉表查询中,特别是作为谓词(在 WHERE 子句中的谓词)。不允许将作为输出的子查询(在 SELECT 列表中)用在交叉表查询中。

请参阅
ALL、DISTINCT、DISTINCTROW、TOP 谓词 SELECT 语句
DELETE 语句 SELECT INTO 语句
HAVING 子句 UNION 操作
INNER JOIN 操作 UPDATE 语句
INSERT INTO 语句 WHERE 子句
LEFT JOIN、RIGHT JOIN 操作

上页:Access 2003完整教程:StDev、StDevP 函数 下页:Access 2003完整教程:Sum 函数

Access 2003完整教程:SQL 子查询

Access 2003完整教程:Sum 函数Access 2003完整教程:TRANSACTION 语句
Access 2003完整教程:TRANSFORM 语句Access 2003完整教程:UNION 操作
Access 2003完整教程:UPDATE 语句Access 2003完整教程:在字符串比较中使用通配符
Access 2003完整教程:Var、VarP 函数Access 2003完整教程:WHERE 子句
Access 2003完整教程:WITH OWNERACCESS OPTION 声明Access 2003完整教程:Jet 4.0 数据定义语言的新增功能
Access 2003完整教程:Jet 4.0 数据处理语言的新增功能Access 2003完整教程:Microsoft Jet 4.0 中的新增功能
Access 2003完整教程:Jet 4.0 Windows 注册表设置的新增功能Access 2003完整教程:删除索引
Access 2003完整教程:删除或取消筛选Access 2003完整教程:删除查询中的联接
Access 2003完整教程:删除关系Access 2003完整教程:删除排序
Access 2003完整教程:带 Service Pack 2 (SP2) 的 Internet Explorer 5.01 与 5.5 或更高版本在页支持方面的区别Access 2003完整教程:重复选项值
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号