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
相关产品推荐
相关产品推荐

