百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> Mysql数据库union和order by优先级
分享文章到:

Mysql数据库union和order by优先级

发布时间:01/15 来源: 浏览: 关键词:
下面我们一起来看看在使用Mysql数据库union和order by优先级一些问题与解决方法,希望本文章对大家会有所帮助哦。

在Mysql的参考手册中,并没有对union和order by的优先级进行说明

它建议的方法是,对SQL语句加上(),这样能使SQL的语义更清晰

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

(SELECT a FROM tbl_name WHERE a=10 AND B=1)

UNION

(SELECT a FROM tbl_name WHERE a=11 AND B=2)

ORDER BY a LIMIT 10;

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

(SELECT a FROM tbl_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)

UNION

(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的操作,如下:

SELECT a FROM tbl_name WHERE a=10 AND B=1

UNION

SELECT a FROM tbl_name WHERE a=11 AND B=2

ORDER BY a LIMIT 10;

发现,它默认的结果也是先进行union,然后再order by,和第一种情况执行结果相同

不过,为了逻辑清晰,最好还是加上对应的()比较好

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

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

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

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有4人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板