mysql---union的用法

union的作用很简单用来合并两条sql的结果集

语法: SQL1 UNION SQL2

现有一张价格表

要求:求出价格低于2000和价格高于3000的商品,不能用or和not between……and

思路:我们可以先求出低于2000的商品得到结果集1

再求出高于3000的商品得到结果集2

再利用union合并结果集1和结果集2



什么时候才允许使用union?

答:只要两个结果集的列数相同就可以使用,即使字段类型不相同,也可以使用。


第一个结果集有2列,第二个结果集有1列,运行后提示列数不一样的提示。



列数相同,但字段类型不同。如goods_name是字符类型而goods_id是整形,但同样可以union。值得注意的是union后字段的名称以第一条SQL为准


关于union的排序


可见内层排序没有发生作用,那现在试试在外层排序


可见外层排序发生了作用

那是不是内层排序就没有用了呢,其实换个角度想想内层先排序,外层又排序,明显内层排序显得多余,所以MYSQL优化了SQL语句,不让内层排序起作用。要想内层排序起作用,必须要使内层排序的结果能影响最终的结果。如:加上limit


这样内层排序就起作用了


若两次有重复的行出现会怎样?

再创建2个表,

表A

表B


表A和表B中有两条相同的记录‘王五’,‘小高’

现在使用union看一下结果


可以看到‘王五’和‘小高’只有一条记录,所以另一条记录被覆盖了,要想不被覆盖可以使用union all


如图所示,‘王五’和‘小高’没有被覆盖

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中的UNION用于将两个或多个SELECT语句的结果合并成一个结果集。以下是关于MySQL UNION的一些用法: 1. UNION的基本用法是将两个SELECT语句的结果合并成一个结果集。要求两个SELECT语句的列数和数据类型必须一致。例如: ``` SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2; ``` 2. 如果希望保留重复的行,可以使用UNION ALL。UNION ALL不会去重,返回所有的行。例如: ``` SELECT column1, column2 FROM table1 UNION ALL SELECT column1, column2 FROM table2; ``` 3. 可以使用ORDER BY对UNION后的结果集进行排序。排序的列必须在SELECT语句中存在。例如: ``` SELECT id, num FROM num_a UNION SELECT id, num FROM num_b ORDER BY num DESC; ``` 4. UNION还可以用于从多个表中选取不同的值。例如: ``` SELECT class FROM student UNION SELECT class FROM teacher; ``` 需要注意的是,UNION操作会对结果集进行排序和去重,因此可能会对性能产生一定的影响。在使用UNION时,建议确保查询语句的效率和索引的使用。 #### 引用[.reference_title] - *1* *2* [MYSQLunion用法](https://blog.csdn.net/weixin_44211388/article/details/100181467)[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^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Mysql union用法](https://blog.csdn.net/weixin_45761237/article/details/123897432)[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^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值