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 Id | Customer Name | State | Country |
---|---|---|---|
1 | John | California | United States |
2 | Henry | Texas | United States |
3 | Amit | Karnataka | San Franceco |
供应商表
Supplier Id | Supplier Name | State | Country |
---|---|---|---|
1 | Apple | California | United States |
2 | Texas Instruments | Texas | United States |
3 | HCL | Karnataka | San 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;