union的作用是合并两个sql的结果集
语法: SQL1 UNION SQL2
现有价目表
要求:寻求比2000便宜的商品和比3000贵的商品。 or和not between……不能使用and
想法:首先寻求不足2000的商品,可以得到结果集1
进而寻求超过3000种商品,得到结果集2
用union合并结果集1和结果集2
什么时候允许使用union?
答:如果两个结果集中的列数相同,则可以使用。 即使字段类型不同也可以使用。
第一个结果集有两列,第二个结果集有一列,运行后系统会提示列数不同。
列数相同,但字段类型不同。 例如,goods_name是一种字符类型,goods_id是一种格式,但同样可以是union。 值得注意的是,union后字段的名称基于第一个SQL
关于union排序
您可以看到内层排序不起作用。 那么,现在试着在外层排序吧
可以看到外部排序是起作用的
那内层排序没用吗?其实换个角度来看,内层先排序,外层又被排序,显然内层排序看起来很多余,所以MYSQL为了使内层排序不起作用,对SQL语句进行了优化。 内层排序要发挥作用,内层排序的结果就必须影响最终的结果。 例如在:中添加limit
这样内层排序就可以发挥作用了
如果有两次重复的行会怎么样?
再制作两个表,
表a
表b
表a和表b有两个相同的记录‘王五’、‘小高’
现在用union看看结果吧
因为《王五》和《小高》只有一个记录,所以另一个记录被涵盖了。 请使用union all以避免被覆盖
如图所示,“王五”和“小高”没有被覆盖