UNION 操作 (Microsoft Access SQL)

适用于:Access 2013、Office 2013

创建联合查询,该查询将两个或两个以上的独立查询或表的结果组合在一起。

语法

[TABLE] query1 UNION [ALL] [TABLE] query2 [UNION [ALL] [TABLE] queryn [ ... ]]

UNION 操作包含以下部分:

Part

说明

query1-n

一个 SELECT 语句、存储查询的名称或在 TABLE 关键字后面的存储表的名称。

说明

可以在单个 UNION 操作中以任何组合方式合并两个或两个以上的查询、表和 SELECT 语句的结果。 下面的示例将一个名为 New Accounts 的现有表和一个 SELECT 语句进行合并:

TABLE [New Accounts] UNION ALL 
SELECT * 
FROM Customers 
WHERE OrderAmount > 1000;

默认情况下,使用 UNION 操作时不会返回重复的记录;但是,可以包含 ALL 谓词以确保返回所有记录。 这样也会使查询运行得更快。

在 UNION 操作中的所有查询必须请求相同数量的字段;但是,这些字段不必都具有相同的大小或数据类型。

请只在第一个 SELECT 语句中使用别名,因为别名在其他语句中会被忽略。 在 ORDER BY 子句中,请根据第一个 SELECT 语句中使用的字段名来引用该字段。

注意

  • 可以在每个 query 参数中使用 GROUP BYHAVING 子句,以便对返回的数据进行分组。
  • 可以在最后一个 query 参数的末尾使用 ORDER BY 子句,以便按指定顺序显示返回数据。

示例

此示例检索巴西所有供应商和客户的名称和城市。 它调用 EnumFields 过程,你可以在 SELECT 语句示例中找到该过程。

    Sub UnionX() 
     
        Dim dbs As Database, rst As Recordset 
     
        ' Modify this line to include the path to Northwind 
        ' on your computer. 
        Set dbs = OpenDatabase("Northwind.mdb") 
         
        ' Retrieve the names and cities of all suppliers  
        ' and customers in Brazil. 
        Set rst = dbs.OpenRecordset("SELECT CompanyName," _ 
            & " City FROM Suppliers" _ 
            & " WHERE Country = 'Brazil' UNION" _ 
            & " SELECT CompanyName, City FROM Customers" _ 
            & " WHERE Country = 'Brazil';") 
         
        ' Populate the Recordset. 
        rst.MoveLast 
         
        ' Call EnumFields to print the contents of the  
        ' Recordset. Pass the Recordset object and desired 
        ' field width. 
        EnumFields rst, 12 
     
        dbs.Close 
     
    End Sub