SQL必知必会-读书笔记(十)

UNION

性能问题

多数DBMS内部会使用查询优化程序,理论上讲,相同含义的UNION和多条WHERE子句在性能上应该没有实际的差别,但实践上,查询程序并不能达到理想状态,实践中,可以通过测试两种方法工作效果更好。

UNION规则

  • 每个子查询都需要 UNION 连接
  • 每个子查询必须都有相同数量的列、表达式或聚集函数(不过各个列不需要以相同的次序出现)
  • 列数据类型必须兼容,但不必完全相同,满足隐式转换条件即可

如果遇到不同列名时会发上什么?

MySQL会采用第一个结果集的列名,因此,如果想要排序,也只能使用第一个字查询的别名进行排序,否则会报错

UNION 和 UNION ALL

  • UNION总是完成与多个WHERE条件相同的工作,为此,UNION 的查询结果是自动去重的

  • 如果希望所有字查询结果都出现,可以使用 UNION ALL

关于排序

UNION 或者 UNION ALL 只能进行一次排序,对整个结果集进行排序,不允许对多个字查询进行 ORDER BY