在Oracle中,ORDER BY子句可以用来对一列或多列的结果集按升序或降序进行排序。本文,将为大家带来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,ORDER BY子句都按升序对行进行排序。如果要按降序对行进行排序,请明确使用DESC。
NULLS FIRST在非NULL值之前放置NULL值,NULLS LAST在非NULL值之后放置NULL值。
ORDER BY子句可以按多列对数据进行排序,每列可能有不同的排序顺序。
请注意,ORDER BY子句总是SELECT语句中的最后一个子句。
下面将使用示例数据库中的customers表进行演示。
以下语句从客户(customers)表中检索客户的:name, address 和 credit limit :
SELECT name, address, credit_limit FROM customers;
执行上面查询语句,得到以下结果:
要按照字母顺序按升序排列客户名称,请使用以下语句:
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;
执行上面查询语句,得到以下结果:
要对多列进行排序,可以用逗号分隔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排序初始结果集。
看到类似下面的结果如下:
在上面的这个结果中:
不需要指定用于排序数据的列名称。如果您愿意,可以使用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;
SQL
在ORDER BY子句中,使用这些列位置来指示Oracle对行进行排序。
请参阅示例数据库中的以下地区(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
执行上面示例查询语句,得到以下结果:
ORDER BY子句可在一列上应用一个函数,例如字符串函数,数学函数等,并按函数的结果对数据进行排序。
例如,以下语句使用ORDER BY子句中的UPPER()函数来区分客户名称的大小写:
SELECT customer_id, name
FROM customers
ORDER BY UPPER( name );
SQL
执行上面查询语句,得到以下结果:
SQL UNION 操作符SQL UNION 操作符合并两个或多个 SELECT 语句的结果。SQL UNION 操作符 UNION 操作符用于...
SQL FOREIGN KEY 约束SQL FOREIGN KEY 约束 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。 让我们通过一个实例来解释...
SQL UCASE() 函数UCASE() 函数 UCASE() 函数把字段的值转换为大写。 SQL UCASE() 语法SELECT UCASE(column_name) FROM table...
SQL NOW() 函数NOW() 函数 NOW() 函数返回当前系统的日期和时间。 SQL NOW() 语法SELECT NOW() FROM table_name;演示数据库 ...
MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP。 在这些语言中,MySQL在PHP的web开发中是应用最广泛。在本教程中我们...