建站软件 优化软件 编程软件 网页辅助 站群程序 网站程序 图像处理 资源教程 字体下载 推荐软件


您的位置:首页 > MYSQL学习 > Mysql数据库union和order by的区别

Mysql数据库union和order by的区别

时间:2015-05-07 10:03:28  来源:免费模板网 作者:风雪 阅读次数 tagsmysql排序

一般我们在使用sql的时候经常会用到联合查询和一些排序,时间添加排序或者按照排序大小排序,那么union和order by有什么区别呢
在Mysql的参考手册中,并没有对union和order by的优先级进行说明,它建议的方法是,对SQL语句加上(),这样能使SQL的语义更清晰.

例如,需要对union后的结果进行order by,则"

  1. (SELECT a FROM tbl_name WHERE a=10 AND B=1) 
  2.  
  3. UNION 
  4.  
  5. (SELECT a FROM tbl_name WHERE a=11 AND B=2) 
  6.  
  7. ORDER BY a LIMIT 10; 

如果,需要对单个SQL语句进行order by,则应把order by子句放入圆括号中,如下:

  1. (SELECT a FROM tbl_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10) 
  2.  
  3. UNION 
  4.  
  5. (SELECT a FROM tbl_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10); 

另外注意:圆括号中用于单个SQL语句的ORDER BY只有当与LIMIT结合后,才起作用,否则,ORDER BY被优化去除,我在innodb引擎的2个表上测试了没有加(),进行union和order by的操作,如下:

  1. SELECT a FROM tbl_name WHERE a=10 AND B=1 
  2.  
  3. UNION 
  4.  
  5. SELECT a FROM tbl_name WHERE a=11 AND B=2 
  6.  
  7. ORDER BY a LIMIT 10; 

发现,它默认的结果也是先进行union,然后再order by,和第一种情况执行结果相同,不过,为了逻辑清晰,最好还是加上对应的()比较好.

另外:Mysql中union可以有union,union distinct,union all这3中形式.

union和union distinct会对union后的结果进行排重,保证所有返回的行都是唯一的

union all则会返回所有SELECT语句中得到所有匹配的行.

本文地址:https://www.freemoban.com/mysql/2015/0507/1771.html

猜你喜欢
栏目推荐
模板推荐

Copyright:www.freemoban.com 免费模板网 All Rights Reserved 网站备案:辽ICP备19014872号-2   辽公网安备 21010602000376号  辽公网安备:42900402000182号

免责声明:本站部分资源来自互联网收集,版权归原创者所有,如果侵犯了你的权益,我们会及时删除侵权内容,联系QQ:1615187561 谢谢合作!