语法: 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

这样内层排序就起作用了
本文介绍了如何在SQL中利用UNION操作符来选取价格低于2000和高于3000的商品,避免使用OR和NOT BETWEEN...AND条件。通过创建两个结果集分别获取低价和高价商品,然后合并结果。强调了UNION操作符的使用条件,即两结果集列数必须相同,即使字段类型不同也可合并。同时,讨论了UNION后的排序问题,指出内层排序在某些情况下可能被优化掉,但可通过添加LIMIT实现内层排序效果。
1058

被折叠的 条评论
为什么被折叠?



