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

SQL语句中ORDER BY 1,2的疑问:数字1、2指代什么?为何不直接使用列名?

关于SQL中ORDER BY子句数字排序的疑问解答

咱们先解决第一个问题:在语句select empno , deptno , sal from emp order by 1,2里,ORDER BY后的数字是SELECT子句中列的位置序号(从1开始计数)。具体来说:

  • 数字1对应SELECT列表里的第一列empno
  • 数字2对应SELECT列表里的第二列deptno

所以这条语句的排序逻辑是:先按empno列(默认升序)排序,当empno相同时,再按deptno列(默认升序)排序。

接下来聊聊为什么有人会用数字替代列名,主要有这几个原因:

  • 简化输入:如果列名特别长,或者给列起了复杂的别名,用数字代替能省不少打字功夫,比如select a_really_long_column_name from table order by 1就比重复写长列名方便。
  • 规避列名歧义:如果查询里有来自不同表的同名列(比如同时查emp.deptno和dept.deptno),用数字可以明确指定用SELECT里的第几列排序,避免数据库混淆。不过这种情况其实更推荐给列加别名,可读性会更好。
  • 历史遗留习惯:早期的SQL工具对长语句的支持有限,输入数字比输入长列名更高效,慢慢就形成了一些老开发者的使用习惯。

不过要提醒一句:用数字排序的可读性比较差,尤其是当SELECT子句修改后(比如调整了列的顺序),ORDER BY的逻辑会跟着变,很容易出bug,所以在团队协作的项目里,更推荐直接写列名或者列别名,代码的可维护性会更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:27:43