SQL-UNION ALL操作

SQL中的UNION ALL的注意事项:

UNION 操作符用于合并两个或多个 SELECT 语句的结果集,这里需要注意的是:

UNION 内部的 SELECT 语句必须拥有相同数量的列;
列也必须拥有相似的数据类型(实际非必须);
同时,每条 SELECT 语句中列的顺序必须相同。

一、表的结构数据准备如下
1.test_union_1

CREATE TABLE `test_union_1` (
  `one` varchar(255) DEFAULT NULL,
  `two` varchar(255) DEFAULT NULL,
  `three` varchar(255) DEFAULT NULL,
  `four` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

查询结果:
在这里插入图片描述
2.test_union_1

CREATE TABLE `test_union_2` (
  `four` varchar(255) DEFAULT NULL,
  `three` varchar(255) DEFAULT NULL,
  `two` varchar(255) DEFAULT NULL,
  `one` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

查询结果如下:
在这里插入图片描述
两表数据一致,字段一致,只是字段顺序不同。 test_union_1的顺序:one,two,three,four test_union_2的顺序:four,three,two,one

二、验证
2.1验证:列也必须拥有相似的数据类型(实际非必须)

CREATE TABLE `test_union_2` (
 `four` int(255) DEFAULT NULL,
 `three` int(255) DEFAULT NULL,
 `two` int(255) DEFAULT NULL,
 `one` int(255) DEFAULT NULL
) ENGINE = InnoDB CHARSET = latin1;

查询:

SELECT *
FROM (
 SELECT one, two, three, four
 FROM test_union_1
 UNION ALL
 SELECT one, two, three, four
 FROM test_union_2
) T;

在这里插入图片描述
所以,实际不是字段类型必须一致,只要可以转换即可。

2.2、验证:每条 SELECT 语句中列的顺序必须相同

先来说下,如果顺序不同,会是什么结果? 答:结果字段的顺序以 union all 前面的表字段顺序为准。 union all 后面的表的数据会按照顺序依次附在后面。注意:按照字段顺序匹配,而不是按照字段名称匹配。

SELECT *
FROM (
 SELECT *
 FROM test_union_1
 UNION ALL
 SELECT *
 FROM test_union_2
) T;

在这里插入图片描述
可以发现:结果字段是test_union_1的字段顺序:one,two,three,four。

换一组做一下测试:

SELECT *
FROM (
 SELECT *
 FROM test_union_2
 UNION ALL
 SELECT *
 FROM test_union_1
) T;

在这里插入图片描述
可发现:结果字段是test_union_2的字段顺序:four,three,two,one。

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SQL中,UNION ALL是一种用于合并两个或多个SELECT语句的操作符。它将两个或多个查询的结果集按照顺序连接在一起,返回一个包含所有结果的单一结果集。UNION ALL操作符不会去重,即使有重复的行也会全部显示出来。这意味着UNION ALL会保留原始查询的所有行,不进行任何筛选或排序。 例如,如果我们有两个表test_union_1和test_union_2,每个表都有相同的列one、two、three和four。我们可以使用UNION ALL操作符将这两个表的结果合并在一起,并返回一个包含所有行的结果集。 在第一个引用中的示例中,我们首先从test_union_1表中选择所有列,然后使用UNION ALL将其与test_union_2表中的所有行连接起来。结果集的字段顺序将按照UNION ALL操作符前面的表的字段顺序进行匹配。即使两个表的列名称相同,也会按照顺序匹配字段,而不是按照名称匹配。 在第二个引用中的示例中,我们交换了两个表的顺序,首先从test_union_2表中选择所有行,然后将其与test_union_1表中的所有行连接起来。结果集的顺序将按照UNION ALL操作符前面的表的字段顺序进行匹配。 如果我们想要指定结果集的字段顺序,我们可以在UNION ALL操作中明确选择所需的列。在第三个引用中的示例中,我们选择了每个表中的列one、two、three和four,并将它们按照指定的顺序连接起来。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SQL-UNION ALL操作](https://blog.csdn.net/weixin_43586713/article/details/121544361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里Coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值