ORDER BY和ROW_NUMBER() OVER (ORDER BY ...)区别?SQL

2023-12-16 12:34:38

在 SQL 查询中,

ORDER BY 子句用于指定排序的字段以及排序的顺序(升序或降序),

ROW_NUMBER() OVER (ORDER BY ...) 则用于为每一行分配一个唯一的序号,并且这个序号是基于指定的排序字段和排序顺序计算的。当然,这两者的作用不完全相同,因此不能简单地说哪一个更好。

下面是它们的主要区别:

  • ORDER BY 子句会对查询结果进行物理排序,而?ROW_NUMBER() OVER (ORDER BY ...)?仅为每一行分配一个序号,不会改变查询结果的顺序。
  • ORDER BY 子句常用于按照某个字段的值进行排序,而?ROW_NUMBER() OVER (ORDER BY ...)?则可以基于多个字段进行排序,并且可以灵活地指定排序顺序。
  • ORDER BY 子句可以使用 ASC 或 DESC 指定排序顺序,而?ROW_NUMBER() OVER (ORDER BY ...)?只能使用 ASC 或 DESC 中的一个,即不能将不同的字段按照不同的顺序排序。
  • ROW_NUMBER() OVER (ORDER BY ...)?通常用于需要对查询结果进行分页的场景,因为它可以为每一页的第一行到最后一行依次分配唯一序号,方便进行分页操作。

因此,在实际使用中,应根据具体的需求来选择适合的方法。

如果只需要对查询结果按照某个字段进行排序,则可以使用 ORDER BY 子句;

如果需要对查询结果进行分页,则可以使用 ROW_NUMBER() OVER (ORDER BY ...)。当然,也可以结合两种方法来实现更加复杂的排序需求。

文章来源:https://blog.csdn.net/monicateacat/article/details/135030275
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。