Oracle中的ORDER BY用于对查询结果进行排序。通过ORDER BY子句,可以指定按照哪个列或多个列进行排序,可以是升序或降序排序。ORDER BY子句必须位于SELECT语句的末尾,并且在WHERE子句之后。
ORDER BY子句的语法如下:
```
SELECT column1
column2
...
FROM table_name
ORDER BY column1
column2
...;
```
在ORDER BY子句中,可以指定一个或多个列,并可以针对每个列指定排序方式。例如:
```
SELECT last_name
first_name
FROM employees
ORDER BY last_name ASC
first_name DESC;
```
上述例子中,查询结果首先按照last_name列进行升序排序,然后按照first_name列进行降序排序。如果不指定排序方式,默认为升序排序。
除了指定列名外,ORDER BY子句还可以使用列的位置来进行排序。例如,上例中也可以写成:
```
SELECT last_name
first_name
FROM employees
ORDER BY 1 ASC
2 DESC;
```
其中,数字1代表*个列last_name,数字2代表第二个列first_name。
ORDER BY子句还可以使用列的别名进行排序。在SELECT语句中为列指定别名后,可以在ORDER BY子句中使用该别名进行排序。例如:
```
SELECT last_name AS surname
first_name AS given_name
FROM employees
ORDER BY surname ASC
given_name DESC;
```
别名也可以使用列位置:
```
SELECT last_name AS surname
first_name AS given_name
FROM employees
ORDER BY 1 ASC
2 DESC;
```
在ORDER BY子句中,还可以使用特殊操作符来控制排序方式。常用的操作符有ASC(升序,默认)和DESC(降序),可以单独使用或者与列相结合。例如:
```
SELECT last_name
first_name
salary
FROM employees
ORDER BY last_name ASC
salary DESC;
```
上例中,查询结果首先按照last_name列进行升序排序,然后按照salary列进行降序排序。
另外,ORDER BY子句也支持对NULL值进行排序。默认情况下,NULL值会排在排序结果的*。如果需要将NULL值排在最前面,可以使用NULLS FIRST操作符;如果需要将NULL值排在*面,可以使用NULLS LAST 操作符。例如:
```
SELECT last_name
commission_pct
FROM employees
ORDER BY commission_pct NULLS LAST;
```
上例中,查询结果会将commission_pct列中的NULL值排在*。
需要注意的是,ORDER BY子句中列出的列必须是SELECT列表中的列或是SELECT语句中计算出来的值,不能使用表达式或者从未在SELECT语句中出现过的列。
总的来说,ORDER BY子句是用于在Oracle查询语句中对结果集进行排序的重要部分,可以指定升序或降序排序,并支持对列名、列别名、列位置进行排序。ORDER BY子句的灵活性和功能强大性使得我们可以轻松地对查询结果进行排序,满足不同的排序需求。