MySQL中ORDER BY子句字段前的'-'符号作用是什么?
MySQL ORDER BY子句中字段前减号的含义
你给出的SQL中ORDER BY -a.emp_no DESC里的减号是一元负号运算符,作用是对a.emp_no的数值结果取反,再用取反后的值参与排序计算,结合你的业务场景具体逻辑如下:
- 首先看你UNION得到的临时表
a的emp_no取值只有两类:- 来自
employees表的正整数类型员工编号 - 来自
dept_manager表的NULL空值
- 来自
- 排序规则推导:
- 正整数取反后为负数,例如员工编号10001取反为
-10001,10002取反为-10002 - NULL值参与负号运算后结果仍然为NULL
- 配合
DESC降序规则:负数的大小关系为-10001 > -10002,因此员工编号更小的行排在更前面;MySQL中降序排序时NULL默认排在所有有效数值之后,因此所有来自部门经理表的行都会排在全部员工行的后面。
- 正整数取反后为负数,例如员工编号10001取反为
- 等效写法参考:这种写法是一种取巧的简写,完全可以替换为可读性更高的等效写法,比如:
ORDER BY a.emp_no ASC, a.emp_no IS NOT NULL DESC
注意:该写法仅适用于数值类型字段的排序场景,若对字符串等非数值类型字段使用,会触发隐式类型转换,大概率得到不符合预期的结果,不建议随意模仿使用。
内容的提问来源于stack exchange,提问作者sudharshana vimalkumar
相关产品推荐
相关产品推荐

