起因是因为工作中需要实现类似于excel中的多行排序。所以就了解了一下排序规则。
在Oracle中,使用 ORDER BY
子句可以对查询结果进行排序。ORDER BY
子句可以按照一个或多个列对结果集进行排序,您可以指定升序(ASC)或降序(DESC)排序方式。
1、按单个列排序:
如果只指定一个列进行排序,则查询结果将按照该列的值进行排序。例如:
SELECT column1, column2
FROM table_name
ORDER BY column1;
2、按多个列排序:
如果指定多个列进行排序,则查询结果将按照第一个列进行排序,如果有相同的值,则按照第二个列进行排序,以此类推。例如:
SELECT column1, column2, column3
FROM table_name
ORDER BY column1, column2;
3、指定排序顺序:
默认情况下,ORDER BY
子句将按照升序(ASC)排序。如果您想要按照降序(DESC)排序,可以在列名后面添加 DESC
关键字。例如:
SELECT column1, column2
FROM table_name
ORDER BY column1 DESC;
4、空值处理:
当排序列中存在空值时,可以使用 NULLS FIRST
或 NULLS LAST
来指定空值的排序位置。默认情况下,空值将按照升序排序并排在最后。例如:
SELECT column1, column2
FROM table_name
ORDER BY column1 NULLS FIRST;
问题再按照上述排序的时候如果是多行排序会出现问题就是,column1, column2两列会按照默认的
column1按照asc排序column2按照asc排序。
但是当我们需要两个列都按照倒叙排序的时候就不能这样写
SELECT column1, column2, column3
FROM table_name
ORDER BY column1, column2;
--这样写会按照 column1, column2两列均为asc排序
ORDER BY column1 desc, column2 desc;
--这样写会按照 column1, column2两列均为desc排序
ORDER BY column1 asc, column2 desc;
--这样写会按照 column1为asc排序, column2列均为desc排序
注:总之,ORDER BY
子句提供了灵活的排序选项,您可以根据需求指定单个或多个列进行排序,并可以选择升序或降序排序方式。