订单在ORDER BY子句中是否重要?

时间:2017-09-12 10:51:48

标签: mysql sql

SQL ORDER BY子句中的

,对于示例中的此类表格。

[ a  -  b   -   c   -  d ]
--------------------------
[ x  -  1   -   i   -  e ]
[ y  -  2   -   k   -  f ]
[ z  -  3   -   m   -  g ]

如果我写下如下

的条款
ORDER BY a ASC, b DESC, c DESC, d ASC

如果我将列的顺序更改为某些类似

,是否有任何区别
ORDER BY d DESC, c DESC, b ASC, a ASC

或者它的工作方式是否相同并且没有任何区别,因为对于ORDERd DESC, c DESC, b ASC, a ASC相同但不同顺序的列,它总是会选择精确的ORDER BY a ASC, b DESC, c DESC, d ASC

3 个答案:

答案 0 :(得分:3)

两者非常非常不同。

ASCDESC适用于特定密钥。它与键的顺序无关。

因此,按ORDER BY列的第一个a订单按升序排列。其余的密钥仅在存在联系a时使用。

按列ORDER BY按降序排列的第二个d订单。其余的密钥仅在d中有联系时使用。

当然,您可以找到两个版本相同的特定数据。但这很不寻常。

答案 1 :(得分:2)

显示的列/表达式的顺序很重要。它按照指定的顺序排序,然后按下一个排序,然后排序。结果与您要反转列的排序顺序不同。

将每个有序列视为先前有序列的子顺序。

(实际上,你可以用比写这个问题更短的时间来测试它......)

答案 2 :(得分:2)

ORDER BY a ASC, b DESC, c DESC, d ASC表示

  • 首先按升序排序
  • 然后按降序排列b
  • 然后按降序排列c
  • 按升序排序的最后一个订单

在您的示例中,它无关紧要,因为值是相同的,但在下面的示例中,它会感知到诸如

示例无序列表suach as;

| a  |  b  |  c  | d  |
-----------------------
| 10 |  5  |  2  |  7 | 
| 10 |  3  |  1  |  7 | 
| 5  |  5  |  6  |  3 | 
| 4  |  2  |  5  |  3 | 
| 5  |  4  |  6  |  3 |    
| 3  |  5  |  9  |  4 |
| 3  |  6  |  6  |  4 | 
| 5  |  5  |  6  |  3 | 
| 4  |  2  |  5  |  3 | 
| 5  |  4  |  6  |  3 |    
| 3  |  5  |  1  |  4 |
| 3  |  6  |  2  |  4 | 

ORDER BY d ASC, a ASC, b DESC, c DESC;

 | a   |  b |  c | d  |
 -----------------------
 |  4  |  2 |  5 |  3 |
 |  4  |  2 |  5 |  3 |
 |  5  |  5 |  6 |  3 |
 |  5  |  5 |  6 |  3 |
 |  5  |  4 |  6 |  3 |
 |  5  |  4 |  6 |  3 |
 |  3  |  6 |  6 |  4 |
 |  3  |  6 |  2 |  4 |
 |  3  |  5 |  9 |  4 |
 |  3  |  5 |  1 |  4 |
 |  10 |  5 |  2 |  7 |
 |  10 |  3 |  1 |  7 |

然后在ORDER BY a ASC, b DESC, c DESC, d ASC之后订购

 | a  |  b |  c |  d | 
  --------------------
 | 3  |  6 |  6 |  4 | 
 | 3  |  6 |  6 |  4 | 
 | 3  |  6 |  2 |  4 | 
 | 3  |  5 |  9 |  4 | 
 | 3  |  5 |  1 |  4 | 
 | 4  |  2 |  5 |  3 | 
 | 4  |  2 |  5 |  3 | 
 | 5  |  5 |  6 |  3 | 
 | 5  |  5 |  6 |  3 | 
 | 5  |  4 |  6 |  3 | 
 | 5  |  4 |  6 |  3 | 
 | 10 |  5 |  2 |  7 | 
 | 10 |  3 |  1 |  7 |

对于ORDER BY d DESC, c DESC, b ASC, a ASC,结果将是那样的

 |  a  |  b |  c |  d | 
 |  10 |  5 |  2 |  7 |
 |  10 |  3 |  1 |  7 |
 |  3  |  5 |  9 |  4 |
 |  3  |  6 |  6 |  4 |
 |  3  |  6 |  2 |  4 |
 |  3  |  5 |  1 |  4 |
 |  5  |  4 |  6 |  3 |
 |  5  |  4 |  6 |  3 |
 |  5  |  5 |  6 |  3 |
 |  5  |  5 |  6 |  3 |
 |  4  |  2 |  5 |  3 |
 |  4  |  2 |  5 |  3 |

请在此处使用订单命令播放给定示例http://rextester.com/LKBRK29917