OracleOrderBy排序⽤法详解
在Oracle中,ORDER BY⼦句可以⽤来对⼀列或多列的结果集按升序或降序进⾏排序。本⽂,将为⼤家带来ORDER BY⼦句的具体⽤法。Oracle ORDER BY⼦句基本⽤法
在Oracle中,表中是以⾮指定顺序存储⾏数据记录的,它不管⾏插⼊数据库的顺序如何。要按列以升序或降序查询⾏记录,必须明确指⽰Oracle数据库要如何去排序。
例如,您可能希望按名称的字母顺序列出所有客户,或者按照从最低到最⾼信⽤限额的顺序显⽰所有客户。
要对数据进⾏排序,我们可以将ORDER BY⼦句添加到SELECT语句中,参考以下语法:
SELECT
column_1,
column_2,
column_3,
.
..
FROM
table_name
ORDER BY
column_1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
column_1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
要按列排序结果集,可以在ORDER BY⼦句之后列出该列。
按照列名是⼀个排序顺序,可以是:
ASC表⽰按升序排序
DESC表⽰按降序排序
默认情况下,⽆论是否指定ASC,ORDER BY⼦句都按升序对⾏进⾏排序。如果要按降序对⾏进⾏排序,请明确使⽤DESC。
NULLS FIRST在⾮NULL值之前放置NULL值,NULLS LAST在⾮NULL值之后放置NULL值。
ORDER BY⼦句可以按多列对数据进⾏排序,每列可能有不同的排序顺序。
请注意,ORDER BY⼦句总是SELECT语句中的最后⼀个⼦句。
Oracle ORDER BY⽤法⽰例:
下⾯将使⽤⽰例数据库中的customers表进⾏演⽰。
以下语句从客户(customers)表中检索客户的:name, address 和 credit limit :
SELECT name, address, credit_limit FROM customers;
执⾏上⾯查询语句,得到以下结果:
1. 按列排序⾏⽰例
要按照字母顺序按升序排列客户名称,请使⽤以下语句:
SELECT name,address,credit_limit
FROM customers
ORDER BY name ASC;
执⾏上⾯⽰例代码,得到以下结果:
ASC指⽰Oracle按升序对⾏进⾏排序。但是ASC是可选的,如果省略,则在默认情况下,ORDER BY⼦句按指定的列按升序对⾏进⾏排序。
因此,下⾯的表达式:
ORDER BY name ASC
等效于
ORDER BY name
要按字母顺序降序排列客户名称,请在ORDER BY⼦句中的列名之后显式使⽤DESC,如下所⽰:
SELECT name, address, credit_limit
FROM customers
ORDER BY name DESC;
执⾏上⾯查询语句,得到以下结果:
2. 按多个列排序⾏⽰例
要对多列进⾏排序,可以⽤逗号分隔ORDER BY⼦句中的每列。
请参阅⽰例数据库中的以下联系⼈(contacts)表。
例如,要按first_name进⾏按升序排序,并按降序对last_name列进⾏排序,请使⽤以下语句:
SELECT first_name, last_name
FROM contacts
ORDER BY first_name, last_name DESC;
执⾏上⾯⽰例代码,可以看到如下结果:
从上⾯截图中可以看到,contact_id为91和311这两条记录的first_name的值相同,last_name的值是以降序来排列的。
在这个例⼦中,Oracle⾸先按first_name升序对⾏进⾏排序,以创建初始结果集。然后Oracle按降序对la
st_name排序初始结果集。看到类似下⾯的结果如下:
在上⾯的这个结果中:
⾸先,按first_name升序排序。
其次,如果两个名字相同,按last_name降序排列,如Daniel Glass和Daniel Costner,Dianne Sen和Di
anne Derek,Doretha Tyler和Dorotha Wong。
3. 按列位置排序⾏⽰例
不需要指定⽤于排序数据的列名称。如果您愿意,可以使⽤ORDER BY⼦句中列的位置。
请参考下语句:
SELECT name, credit_limit,address
FROM customers
ORDER BY 2 DESC, 1;
在这个例⼦中,name列的位置是1,credit_limit列的位置是2。相当于以下查询语句:
SELECT name, credit_limit,address
oracle切割字符串函数FROM customers
ORDER BY credit_limit DESC, name;
SQL
在ORDER BY⼦句中,使⽤这些列位置来指⽰Oracle对⾏进⾏排序。
4.⽤NULL值排序⾏的⽰例
请参阅⽰例数据库中的以下地区(locations)表:
以下语句按城市(city)和州(state)检索位置并对其进⾏排序:
SELECT country_id, city, state
FROM locations
ORDER BY state DESC;
SQL
执⾏上⾯查询语句,得到以下结果:
state列有NULL值,这意味着state数据与某些城市(例如:Beijing, Hiroshima 和 London)⽆关。当使⽤⾮NULL值对混合NULL进⾏排序时,Oracle允许指定哪个应该⾸先出现。
例如,以下语句按升序对state列进⾏排序,并⾸先将NULL值放置在前⾯。
SELECT country_id, city, state
FROM
locations
ORDER BY
state ASC NULLS FIRST;
SQL
要放置NULL值在后⾯,可以使⽤NULLS LAST,如下⾯的语句所⽰:
SELECT country_id, city, state
FROM
locations
ORDER BY
state ASC NULLS LAST;
SQL
执⾏上⾯⽰例查询语句,得到以下结果:
5. 按函数或表达式排序数据

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。