弄清几个概念
1、什么是组合查询
组合查询就是将多个SQL的查询结果进行合并一起返回;
2、使用union关键字有什么要求
1)必须包含多条查询语句
2)查询语句中的列、表达式、聚集函数必须一致,不要求顺序一致;
3)查询语句中的列的数据类型必须兼容,可隐式转换;
3、union和union all的区别
union出来的结果是自动去重的,可能导致不走索引;
union all出来的结果匹配的是不去重的;
4、union的执行顺序是在哪个位置?
位置不定
5、union和order by如何联用
如果直接下列语句会报错:
select * from main where addr like '上海%' order by aaa desc union select * from main where addr like '北京%' order by aaa desc error msg::Incorrect usage of union and order by ps:Union在没有括号的情况下只能使用一个order by
改成如下:
select * from main where addr like '上海%' order by aaa desc union select * from main where addr like '北京%' order by aaa desc ps:该sql的意思就是先union,然后对整个结果集进行order by。
无效写法:
(select * from main where addr like '上海%' order by aaa desc) union (select * from main where addr like '北京%' order by aaa desc) ps:分别排序,在进行union,这样不报错,但是排序无效;
可以改成如下写法:
select * from (select * from main where addr like '上海%' order by aaa desc) table1 union select * from (select * from main where addr like '北京%' order by aaa desc) table2
也就是说,order by要么和union同级使用,要么差两级,order by 要么和union同辈,要么是union的儿子的儿子;