SQL 自学:利用 UNION 操作符组合 SELECT 语句结果集

在 SQL 中,UNION操作符是一个非常强大的工具,它允许我们将多条SELECT语句的结果组合成一个单一的结果集。这在很多实际应用场景中都非常有用,比如整合来自不同表但具有相似结构的数据,或者从同一个表中按照不同条件查询数据并将结果合并。

一、UNION操作符的基本语法

UNION操作符的基本语法如下:

SELECT column1, column2, column3 FROM table1
UNION
SELECT column1, column2, column3 FROM table2;

在这个语法中,我们首先有一条SELECT语句从table1中选择特定的列(column1column2column3),然后使用UNION操作符连接另一条从table2中选择相同列的SELECT语句。

二、UNION操作符的规则和注意事项

1. 列数和数据类型匹配

  • 列数必须相同:在使用UNION时,被组合的SELECT语句所选择的列数必须相同。例如,如果第一条SELECT语句选择了 3 列,那么第二条SELECT语句也必须选择 3 列。
  • 数据类型兼容:相应位置的列的数据类型应该是兼容的。虽然不需要完全相同,但必须能够进行隐式转换。例如,可以将INT类型和DECIMAL类型的列进行UNION操作,因为它们在数值上是兼容的。

2. 去除重复行

  • 默认情况下,UNION操作符会自动去除结果集中的重复行。如果想要保留所有的行,包括重复的行,可以使用UNION ALL操作符。UNION ALL的语法与UNION相同,只是它不会对结果进行去重处理。

三、示例应用

1. 整合来自不同表的数据

假设我们有两个表:employees表和contractors表。employees表包含公司正式员工的信息,有employee_idfirst_namelast_namedepartment等列;contractors表包含公司临时工的信息,有contractor_idfirst_namelast_nameproject等列。

如果我们想要获取所有员工(包括正式员工和临时工)的姓名列表,我们可以使用UNION操作符如下:

SELECT first_name, last_name FROM employees
UNION
SELECT first_name, last_name FROM contractors;

在这个示例中,我们从两个不同的表中选择了first_namelast_name列,并使用UNION操作符将结果组合成一个单一的姓名列表。由于我们只关心姓名,所以不需要选择其他列,并且UNION操作会自动去除可能存在的重复姓名(如果有的话)。

2. 从同一个表中按照不同条件查询并合并结果

假设我们有一个sales表,其中包含销售记录,有sales_idproduct_namequantitysales_date等列。我们想要获取在某个特定时间段内销售量大于 100 的产品列表,以及在另一个时间段内销售额排名前 10 的产品列表,并将这两个结果合并。

我们可以使用UNION操作符如下:

-- 获取销售量大于100的产品列表
SELECT product_name FROM sales WHERE quantity > 100 AND sales_date BETWEEN '2023-01-01' AND '2023-03-31'
UNION
-- 获取销售额排名前10的产品列表
SELECT product_name FROM sales WHERE sales_date BETWEEN '2023-04-01' AND '2023-06-30' ORDER BY sales_amount DESC LIMIT 10;

在这个示例中,我们首先从sales表中选择在 2023 年第一季度销售量大于 100 的产品名称,然后使用UNION操作符连接从同一表中选择在 2023 年第二季度销售额排名前 10 的产品名称。需要注意的是,这里的代码可能需要根据实际表结构调整销售额的计算和排名方式等。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值