You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中ORDER BY子句字段前的'-'符号作用是什么?

MySQL ORDER BY子句中字段前减号的含义

你给出的SQL中ORDER BY -a.emp_no DESC里的减号是一元负号运算符,作用是对a.emp_no的数值结果取反,再用取反后的值参与排序计算,结合你的业务场景具体逻辑如下:

  • 首先看你UNION得到的临时表a的emp_no取值只有两类:
    • 来自employees表的正整数类型员工编号
    • 来自dept_manager表的NULL空值
  • 排序规则推导:
    1. 正整数取反后为负数,例如员工编号10001取反为-10001,10002取反为-10002
    2. NULL值参与负号运算后结果仍然为NULL
    3. 配合DESC降序规则:负数的大小关系为-10001 > -10002,因此员工编号更小的行排在更前面;MySQL中降序排序时NULL默认排在所有有效数值之后,因此所有来自部门经理表的行都会排在全部员工行的后面。
  • 等效写法参考:这种写法是一种取巧的简写,完全可以替换为可读性更高的等效写法,比如:
    ORDER BY a.emp_no ASC, a.emp_no IS NOT NULL DESC
    

注意:该写法仅适用于数值类型字段的排序场景,若对字符串等非数值类型字段使用,会触发隐式类型转换,大概率得到不符合预期的结果,不建议随意模仿使用。

内容的提问来源于stack exchange,提问作者sudharshana vimalkumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:45:03