并运算,则是将两次查询结果给并起来,大致语法结构:
select xxx union select xxx
- union:输出结果时去除重复项(当数据量很大时使用union去重的排序开销很大)
- union all:将两个集合的并集全部输出
例如:
我有两张表:
shuoshuo_ID | shuoshuo_user | shuoshuo_content | shuoshuo_time |
---|---|---|---|
1 | aaa | 啦啦啦 | 2015-06-20 |
2 | bbb | 哈哈哈 | 2015-11-20 |
3 | ccc | 嘿嘿嘿 | 2016-05-20 |
表1:shuoshuo_info
rizhi_ID | rizhi_user | rizhi_title | rizhi_content | rizhi_time |
---|---|---|---|---|
1 | aaa | lalala | 啦啦啦 | 2015-06-20 |
2 | bbb | hahaha | 哈哈哈 | 2015-11-20 |
3 | ccc | heiheihei | 嘿嘿嘿 | 2016-05-20 |
表2:rizhi_info
我们可以通过union all 的方法将这位用户发布过的内容做一个汇总,创建好一个视图,当我们要集中输出时,只要查找视图就好
select `shuoshuo_user` AS `user`,`shuoshuo_content` AS `content`,
`shuoshuo_time` AS `time` from `shuoshuoinfo`
union all
select `rizhi_user`,`rizhi_content` ,`rizhi_time` from `rizhiinfo`
我们要注意的是,在使用union时,前后两张表选择的字段数、每个字段的类型应该相同,最终生成表的字段名会以第一张表为准,所以我们用 as 给字段取一个别名,方便区分
补充点:
用text还是varchar:
一般在0-2005 用varchar,在8000以下用varchar(max),超过用 text类型在增加记录的同时添加当前时间:
1.数据类型可以选择varchar 然后写入的时候用now(),要写明时间字段,并赋值now()
2.数据类型选择timestemp,加上默认值CURRENT_TIMESTAMP,不用给时间字段赋值,在数据库系统自动填上时间