7.15 SQL Server UNION联合查询(并集)


 

SQL Server UNION(并集)

 

 

简介

SQL Server联合查询
SQL Server UNION是一种集合操作,它允许将两个查询的结果合并到一个结果集中,该结果集中包含属于UNION中SELECT语句的所有行。

语法:

  query_1
  UNION
  query_2

上面的语法有如下要求:

  • 在两个查询中,列的数量和顺序必须相同
  • 对应列的数据类型必须相同或者兼容

以下维恩图说明了T1表的结果集与T2表的结果集合合并:

UNION 与 UNION ALL

默认情况下,UNION会从结果集中删除重复行。如果要保留重复行,则需要明确指定ALL关键字,如下所示:

  query_1
  UNION ALL
  query_2

换句话说,UNION删除重复行,而UNION ALL在最终结果集中包含重复行。

UNION(联合)与JOIN(联接)

联接(如内联接或左联接)合并两个表中的列,而联合合并两个查询中的行。

换句话说,join水平地附加结果集,而union垂直地附加到结果集中。

下图说明了联合和联接之间的主要区别:

示例

有如下员工和客户表:

以下示例将员工和客户的姓名合并到一个列表中:

  SELECT
  first_name,
  last_name
  FROM
  sales.staffs
  UNION
  SELECT
  first_name,
  last_name
  FROM
  sales.customers;


一共返回1454行。

staffs表有10行,customers表有1445行,如下查询所示:

  SELECT
  COUNT (*)
  FROM
  sales.staffs;
  -- 10
   
  SELECT
  COUNT (*)
  FROM
  sales.customers;
  -- 1445

因为联合的结果集只返回1454行,这意味着删除了一个重复行。

如果要包含重复行,使用UNION ALL,如以下查询所示:

  SELECT
  first_name,
  last_name
  FROM
  sales.staffs
  UNION ALL
  SELECT
  first_name,
  last_name
  FROM
  sales.customers;

查询按预期返回1455行。

UNION与ORDER BY示例

要对UNION返回的结果进行排序,直接在最后一个查询中放置ORDER BY子句,如下所示:

  SELECT
  select_list
  FROM
  table_1
  UNION
  SELECT
  select_list
  FROM
  table_2
  ORDER BY
  order_list;

要对客户和员工的名字和姓氏进行排序,可以使用以下查询:

  SELECT
  first_name,
  last_name
  FROM
  sales.staffs
  UNION ALL
  SELECT
  first_name,
  last_name
  FROM
  sales.customers
  ORDER BY
  first_name,
  last_name;

 
分类: SQL Server
标签: SQL Server , 数据库

posted on 2025-04-21 16:44  漫思  阅读(82)  评论(0)    收藏  举报

导航