精通MS-ACCESS SQL之基础篇(14)
时 间:2017-12-04 16:29:50
作 者:Big Young ID:252 城市:襄阳
摘 要: 使用ACCESS SQL的子查询。
正 文:
第十四节 使用ACCESS SQL的子查询
子查询是SQL查询中经常性使用的一个重要对象,所谓子查询就是一个嵌套在其它查询中的Select查询,换句话说,子查询是一个Select语句,它嵌套在Select、Select...INTO、Insert...INTO、Delete或Update语句中,或嵌套在另一个子查询中。
一、子查询的基本语法
可以通过三种语法形式来创建子查询:
comparison [ANY | ALL | SOME] (sqlstatement)
expression [NOT] IN (sqlstatement)
[NOT] EXISTS (sqlstatement)
子查询语句包含了以下部分:
部分 |
说明 |
Comparison |
表达式和比较运算符,用于对表达式与子查询的结果进行比较。 |
Expression |
表达式,用来搜索子查询的结果集。 |
Sqlstatement |
Select 语句,遵循和任何其他 Select 语句一样的格式和规则。它必须用圆括号括起来。 |
需要说明与注解的是:可以在Select语句的字段列表中、在Where子句中或在HAVING子句中使用子查询来代替表达式。在子查询中,可以使用Select语句来提供一组要在Where或HAVING子句表达式中计算的一个或多个特定值。
二、第一种语法形式的子查询
通过同义的ANY或SOME谓词,可以检索在主查询的记录中满足与子查询所检索出的任何记录进行比较的比较条件的记录。下面的示例通过结合子查询来从“产品”表中返回那些折扣高于25%出售的任何产品:
Select * FROM 产品
Where 列出价格 > ANY
(Select 单价 FROM 订单明细
Where 折扣 >= .25);
使用ALL谓词可以在主查询中只检索满足子查询中检索出的记录的比较条件的所有记录。如果将前面的示例中的ANY改为ALL,查询将只返回那些折扣高于以25%出售的所有产品单价的产品。它的限制性更强。
三、第二种形式的子查询
通过IN谓词可以只检索出在主查询的记录中作为子查询的一部分记录而包含相同值的记录。下面示例的SQL语句返回所有以25%或更高折扣出售的所有产品:
Select * FROM 产品
Where ID IN
(Select [产品 ID] FROM 订单明细
Where 折扣 >= .25);
相应地,可以使用NOT IN来仅检索出在主查询的记录中作为子查询的记录而不包含相同值的记录。
四、第三种形式的子查询
在True/False比较条件中使用EXISTS谓词(带有可选的NOT保留字)可确定子查询是否返回任何记录。
也可以在子查询中使用表名的别名来引用在子查询外部的FROM子句中列出的表。以下示例返回薪水等于或高于具有同等职称的所有雇员平均薪水的雇员的姓名。Employees表的别名为"T1":
Select 姓氏, 名字, 职务, 工资
FROM 员工 AS T1
Where 工资 >= (Select Avg(工资)
FROM 员工
Where T1.职务 = 员工.职务)
ORDER BY 职务;
在前面的示例中,AS 保留字是可选的。
允许一些子查询用在交叉表查询中,特别是作为谓词(在Where子句中的谓词)。不允许将作为输出的子查询(在Select列表中)用在交叉表查询中。
五、实际数据库操作实例
还是以“罗斯文商贸”数据库为例来讲解,这里主查询结合子查询通过对“客户”表与“订单”的联合查询列出在2006年第二季度下过订单的每个客户及联系人的信息。
Select (姓氏 & 名字) AS 姓名,
公司,
职务,
业务电话
FROM 客户
Where ID
IN (Select [客户 ID]
FROM 订单
Where 订单日期 BETWEEN #2006-04-01# AND #2006-06-30#);
运行后如下图所示(图14-1)的效果。
图14-1:子查询示例效果
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- 合并列数据到一个文本框的示例;...(05.06)
- 通过命令按钮让Access列表...(04.24)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)

学习心得
最新文章
- 仓库管理实战课程(17)-库存明细...(05.13)
- 【Access高效办公】条件格式设...(05.12)
- 仓库管理实战课程(16)-联合查询...(05.07)
- 合并列数据到一个文本框的示例;输出...(05.06)
- 仓库管理实战课程(15)-月度库存...(04.30)
- Access选择打印机、横纵向、纸...(04.29)
- 仓库管理实战课程(14)-出库功能...(04.26)
- 通过命令按钮让Access列表框指...(04.24)
- 仓库管理实战课程(13)-入库功能...(04.21)
- Access控件美化之--美化按钮...(04.19)