mysql union all 别名_mysql union 和union all使用

CREATE TABLE `user_info` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

`age` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='用户表';

INSERT INTO `test`.`user_info`(`id`, `name`, `age`) VALUES (1, 'aaa', 11);

INSERT INTO `test`.`user_info`(`id`, `name`, `age`) VALUES (2, 'bbb', 22);

INSERT INTO `test`.`user_info`(`id`, `name`, `age`) VALUES (3, 'ccc', 33);

数据如下

430ce94a8b02873e98dd33f2b8169c06.png

union操作

select id FROM user_info WHERE age = 11 UNION SELECT id FROM user_info WHERE age = 22

结果

+----+

| id |

+----+

| 1 |

| 2 |

+----+

union all

mysql> select id FROM user_info WHERE age > 11 UNION ALL SELECT id FROM user_info WHERE age > 22;

+----+

| id |

+----+

| 2 |

| 3 |

| 3 |

+----+

结论:union会去除重复,union all不会去除重复的数据;

筛选的列数不一致

mysql> select id,name FROM user_info WHERE age = 11 UNION ALL SELECT id FROM user_info WHERE age = 22;

报错

1222 - The used SELECT statements have a different number of columns

筛选列数起别名

mysql> select id,name name1 FROM user_info WHERE age = 11 UNION ALL SELECT id,name name2 FROM user_info WHERE age = 22;

+----+-------+

| id | name1 |

+----+-------+

| 1 | aaa |

| 2 | bbb |

+----+-------+

2 rows in set (0.02 sec)

结论:起别名以最开始出现的列别名为准。

数据类型不一致进行union

表中id是int的 name 是varchar类型的。

mysql> select id FROM user_info WHERE age = 11 UNION ALL SELECT name FROM user_info WHERE age = 22;

+-----+

| id |

+-----+

| 1 |

| bbb |

+-----+

2 rows in set (0.02 sec)

结论:不同数据类型的可以合并为1列。但业务层返回数据接收处理时可能会出问题。建议数据列最好一致。

总结:union数据会去重,union all 数据不会去重,不同数据类型cloumn可以合并为1列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值