Oracle Order By语句 Oracle Select语句 Oracle Distinct语句 Oracle Order By语句 在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按降序对last_name排序初始结果集。 看到类似下面的结果如下: 在上面的这个结果中: 首先,按first_name升序排序。 其次,如果两个名字相同,按last_name降序排列,如Daniel Glass和Daniel Costner,Dianne Sen和Dianne 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 FROM customers ORDER BY credit_limit DESC, name; 在ORDER BY子句中,使用这些列位置来指示Oracle对行进行排序。 4.用NULL值排序行的示例 请参阅示例数据库中的以下地区(locations)表: 以下语句按城市(city)和州(state)检索位置并对其进行排序: SELECT country_id, city, state FROM locations ORDER BY state DESC; 执行上面查询语句,得到以下结果: state列有NULL值,这意味着state数据与某些城市(例如:Beijing, Hiroshima 和 London)无关。 当使用非NULL值对混合NULL进行排序时,Oracle允许指定哪个应该首先出现。 例如,以下语句按升序对state列进行排序,并首先将NULL值放置在前面。 SELECT country_id, city, state FROM locations ORDER BY state ASC NULLS FIRST; 要放置NULL值在后面,可以使用NULLS LAST,如下面的语句所示: SELECT country_id, city, state FROM locations ORDER BY state ASC NULLS LAST; 执行上面示例查询语句,得到以下结果: 5. 按函数或表达式排序数据 ORDER BY子句可在一列上应用一个函数,例如字符串函数,数学函数等,并按函数的结果对数据进行排序。 例如,以下语句使用ORDER BY子句中的UPPER()函数来区分客户名称的大小写: SELECT customer_id, name FROM customers ORDER BY UPPER( name ); 执行上面查询语句,得到以下结果: Oracle Select语句 Oracle Distinct语句