SQL Union(联合),SQL Union All(联合全部)

时间:2020-02-23 14:32:36  来源:igfitidea点击:

在现实世界中,有时候我们想合并来自两个不同的SELECT查询的结果集。
对于这种情况,SQL提供了称为联合的功能。
联合的字面意思是结合。
SQL Union也与其字面意思非常相似。

SQL Union

SQL Union可以用于合并多个查询的结果集。
但是,为了使用联盟,有一些规则。

SQL Union的使用规则

  • 查询应具有与选择查询相同的列数。

  • 结果集的数据类型应该相同。

  • 联合使用列位置进行组合,而不使用列名称。

  • 每个选择查询中的列必须具有相同的顺序。

SQL Union的语法

SELECT column_name FROM table1
UNION
SELECT column_name FROM table2;

SQL Union示例

让我们考虑以下用于SQL Union的两个表。

客户表

Customer IdCustomer NameStateCountry
1JohnCaliforniaUnited States
2HenryTexasUnited States
3AmitKarnatakaSan Franceco

供应商表

Supplier IdSupplier NameStateCountry
1AppleCaliforniaUnited States
2Texas InstrumentsTexasUnited States
3HCLKarnatakaSan Franceco

这是创建这些表并插入测试数据的SQL查询。

CREATE TABLE `Customer` (
`customer_id` int(11) unsigned NOT NULL,
`customer_name` varchar(20) NOT NULL DEFAULT '',
`state` varchar(20) NOT NULL DEFAULT '',
`country` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`customer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `Supplier` (
`supplier_id` int(11) unsigned NOT NULL,
`supplier_name` varchar(20) NOT NULL DEFAULT '',
`state` varchar(20) NOT NULL DEFAULT '',
`country` varchar(20) NOT NULL DEFAULT '',
PRIMARY KEY (`supplier_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `Customer` (`customer_id`, `customer_name`, `state`, `country`)
VALUES
	(1, 'John', 'California', 'United States'),
	(2, 'Henry', 'Texas', 'United States'),
	(3, 'Amit', 'Karnataka', 'San Franceco');

INSERT INTO `Supplier` (`supplier_id`, `supplier_name`, `state`, `country`)
VALUES
	(1, 'Apple', 'California', 'United States'),
	(2, 'Texas Instruments', 'Texas', 'United States'),
	(3, 'HCL', 'Karnataka', 'San Franceco');

让我们来看一些使用这些表的SQL Union查询示例。

  • 基于"国家/地区"列的联合。
Select state from Customer
Union
Select state from Supplier where Country = 'San Franceco';

输出:

State
California
Texas
Karnataka

在上面的结果集中,将两个选择查询的状态组合在一起。
而且,消除了重复的结果。

  • 按照state进行排序,联合输出
Select state from Customer
Union
Select state from Supplier order by state asc;

输出:

State
California
Karnataka
Texas

上面的输出是根据状态以升序排序后并集的。

SQL UNION ALL

SELECT column_name FROM table1
UNION ALL
SELECT column_name FROM table2;

SQL Union ALL和SQL Union之间的主要区别在于,SQL Union ALL允许重复值作为组合的一部分。

SQL Union ALL示例

我们将重用之前定义的Customer和Supplier表。

  • SQL Union全部基于"国家/地区"列。
Select state from Customer
Union ALL
Select state from Supplier where Country = 'San Franceco';

在上面的结果集中,两个选择查询的状态组合在一起。
同样,不会消除重复的结果。

  • SQL Union所有输出按状态排序。
Select state from Customer
Union ALL
Select state from Supplier order by state asc;