相关文章推荐
大气的作业本  ·  collect(Collectors.toM ...·  5 月前    · 
豁达的充电器  ·  JS Map 映射(ES6)_js ...·  1 年前    · 
叛逆的乒乓球  ·  BottomSheetDialog ...·  1 年前    · 

SQL中如何合并多个数据表中的字段(列)

在前两节中我们介绍了如何把两个数据表通过JOIN结合起来 ,仔细想一想,这种横向的对每一条记录的扩展实际上是对每一行的字段(列)进行了扩展。

那么与之相对应地,利用SQL中的 UNION 我们也可以对多个数据表中的查询结果在列的方向上进行扩展,比如把两个数据表中数据类型相同的两个字段合并为一列。

UNION & UNION ALL

UNION 的默认形式是 UNION DISTINCT ,也就是说在合并两个字段时,字段中的重复值不会被写进最终的合并结果。而 UNION ALL 则包含重复值。

UNION 在使用时,一般的语法结构为:

SELECT 字段 FROM 数据表_1
UNION
SELECT 字段 FROM 数据表_2

这里我们要注意:

  • 数据表_1和数据表_2中 字段的数据类型要一致
  • 数据表_1和数据表_2中 字段的顺序要一致
  • 数据表_1和数据表_2中的 字段的数目要相同
  • 数据表_1和数据表_2中的字段的名字不一定要相同
  • 最后的返回结果中列的名称为第一个SELECT中所给定的字段的名称


比如在 客户表 中存储有下列客户信息:

ID 客户姓名 城市
1 张立 广州
2 王风 大连
3 李菊 沈阳
4 赵明 南京


在数据表 供货商 中存储有如下供货商的地址信息:

ID 城市
001 广州
002 杭州
003 南京
004 成都
005 武汉

利用下面的SQL语句我们可以找出客户和供货商分布的所有城市

SELECT 城市 FROM 客户表
UNION
SELECT 城市 FROM 供货商

而利用 UNION ALL 则得到如下结果

这里广州和南京出现了两次。


实例操作

  1. 打开免费的SQL数据库练习网站 DB Fiddle - SQL Database Playground
  2. 选择最新的数据库版本, 比如SQLLitev3.39
  3. 利用下列SQL语句在左边的窗口Schema SQL中创建上述实例中所使用的数据库
CREATE TABLE 客户表 (
  id INT,
  客户姓名 varchar(255),
  城市 varchar(255)  
INSERT INTO 客户表 VALUES (1, "张立", "广州");
INSERT INTO 客户表 VALUES (2, "王风", "大连");
INSERT INTO 客户表 VALUES (3, "李菊", "沈阳");
INSERT INTO 客户表 VALUES (4, "赵明", "南京");
CREATE TABLE 供货商 (
  id INT,
  城市 varchar(255)