Access 2003完整教程:创建子查询 (ADP)

注释本主题中的信息仅适用于 Microsoft Access 项目 (.adp)。

可以将一个查询的结果用作另一个查询的输入。通常,把一个子查询的结果用作搜索条件,该条件使用 IN(?) 函数或 EXISTS 操作符。但是,也可以在 FROM 子句中使用子查询。

可以通过将子查询输入到“网格”窗格或“SQL”窗格,来创建一个子查询。

在“网格”窗格中定义一个 EXISTS 子查询

  1. 在“数据库”窗口中,单击“对象”下的“查询”,单击要打开的主查询,再单击“数据库”窗口工具栏上的“设计”。
  2. 在“表格”窗格第一个空行的“列”列中,输入 EXISTS,它后面跟随用括号括起来的子查询。
  3. 在包含子查询的行的“准则”列,输入 TRUE、FALSE、=TRUE 或 =FALSE。输入 FALSE 或 =FALSE 会得到一个 NOT EXISTS 查询。

    注释若要创建一个 NOT EXISTS 查询,可以像以上步骤所示创建一个 EXISTS 查询,并将“准则”列设置为 FALSE。如果在“网格”窗格中输入了 NOT EXISTS,“查询设计器”会显示一条错误信息。

在“SQL”窗格中定义子查询

  1. 在“数据库”窗口中,单击“对象”下的“查询”,单击要打开的主查询,再单击“数据库”窗口工具栏上的“设计”。
  2. 如果需要,单击“SQL”显示“SQL”窗格。
  3. 在“SQL”窗格中,选定 SQL 语句,然后使用“复制”命令将该查询移到剪贴板上。
  4. 打开新查询,然后使用“粘贴”命令将第一个查询移到新查询的 WHERE 或 FROM 子句。

例如,假设有两张表,“products”表和“suppliers”表,要创建查询,显示所有瑞典供应商的产品。基于“suppliers”表创建第一个查询,查找所有瑞典供应商:

SELECT supplier_id
FROM supplier
WHERE (country = 'Sweden')

使用“复制”命令将这个查询移到剪贴板上。创建使用“products”表的第二个查询,列出需要的关于产品的信息:

SELECT product_id, supplier_id, product_name
FROM products

在“SQL”窗格中,将一个 WHERE 子句添加到第二个查询,然后从剪贴板粘贴第一个查询。将第一个查询用括号括起来,最终结果如下:

SELECT product_id, supplier_id, product_name
FROM products
WHERE supplier_id IN
 (SELECT supplier_id
 FROM supplier
 WHERE (country = 'Sweden'))

注释当向 WHERE 子句添加子查询时,这个子查询会显示在“网格”窗格的“准则”列中。可以在“网格”窗格或“SQL”窗格中进一步编辑它。但是,子查询所引用的表、视图和表达式不显示在“图表”或“网格”窗格中。

上页:Access 2003完整教程:在查询中手动创建自联接 (ADP) 下页:Access 2003完整教程:在查询中创建表别名 (ADP)

Access 2003完整教程:创建子查询 (ADP)

Access 2003完整教程:在查询中创建表别名 (ADP)Access 2003完整教程:创建触发器 (ADP)
Access 2003完整教程:创建唯一约束 (ADP)Access 2003完整教程:创建唯一索引 (ADP)
Access 2003完整教程:创建更新查询 (ADP)Access 2003完整教程:关于检查约束表达式 (ADP)
Access 2003完整教程:定义主键约束 (ADP)Access 2003完整教程:删除检查约束 (ADP)
Access 2003完整教程:从表中删除列 (ADP)Access 2003完整教程:删除索引 (ADP)
Access 2003完整教程:删除关系 (ADP)Access 2003完整教程:从数据库中删除表 (ADP)
Access 2003完整教程:删除触发器 (ADP)Access 2003完整教程:绘制反身关系 (ADP)
Access 2003完整教程:复制表 (ADP)Access 2003完整教程:实施表之间的参照完整性 (ADP)
Access 2003完整教程:在查询中排除重复的行 (ADP)Access 2003完整教程:在“查询设计器”中执行查询 (ADP)
Access 2003完整教程:在查询结果中对行进行分组 (ADP)Access 2003完整教程:将列插入到表中 (ADP)
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号