TOP

SQL-第 12 课。组合查询 (UNION)

大多数 SQL 查询使用单个语句从一个或多个表返回数据。 SQL 还允许您同时运行多个单独的查询并将结果显示为单个数据集。这种组合查询通常称为连接或复杂查询。


1.使用UNION运算符

SQL 查询使用 UNION 运算符进行组合。为此,您需要指定每个请求 SELECT 并在它们之间放置关键字 UNION。一次常规查询中 UNION 运算符的使用次数没有限制。在上一节中,我们注意到 MS Access 不具备创建完整外联合的能力,现在我们将了解如何通过 UNION 运算符来实现这一点。

Run SQLSELECT *
FROM Sumproduct 
LEFT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City
UNION
SELECT * 
FROM Sumproduct 
RIGHT JOIN Sellers2 
ON Sumproduct.City = Sellers2.City

我们看到查询显示了第一个表和第二个表中的所有列,无论所有记录是否在另一个表中都有对应项。

还值得注意的是,在许多情况下,我们可以使用具有许多条件的 WHERE 子句来代替 UNION,并得到类似的结果。不过,通过UNION,记录看起来更加简洁、清晰。

编写组合查询时还需要遵循一定的规则:

  • UNION 请求必须包含两个或多个由 UNION 关键字分隔的 SELECT 运算符(即,如果请求中使用四个 SELECT 运算符,则必须有三个 UNION 关键字);
  • UNION 运算符中的每个查询必须具有相同的列、表达式或统计函数,而且必须以相同的顺序列出;
  • 列数据类型必须兼容。它们不一定必须是相同的类型,但它们必须具有相似的类型,以便 DBMS 可以明确地转换它们(例如,它们可以是不同的数值数据类型或不同的日期类型)。
  • 2. 包含或排除重复行

    使用 UNION 的查询会自动从查询结果集中删除所有重复行(换句话说,其行为类似于单个 SELECT 语句中具有多个条件的 WHERE 子句)。这是 UNION 运算符的默认行为,但我们可以根据需要更改它。为此,我们应该使用运算符 UNION ALL 而不是 UNION。

    3. 对组合查询的结果进行排序

    SELECT 语句的结果使用 ORDER BY 语句进行排序。使用 UNION 组合查询时,只能使用一个 ORDER BY 子句,并且必须将其放置在最后一个 SELECT 语句中。事实上,在实践中,将部分结果按一种顺序排序,而另一部分按另一种顺序排序并没有多大意义。因此,多个句子 ORDER BY 是不允许的。