Maison >base de données >Oracle >Comment trier les résultats d'une requête dans Oracle
Dans Oracle, vous pouvez utiliser l'instruction "SELECT" et la clause "ORDER BY" pour trier la requête. Vous pouvez trier l'ensemble de résultats de la requête d'une ou plusieurs colonnes par ordre croissant ou décroissant. FROM nom de la table de données. ORDER BY nom du champ [ASC|DESC]".
L'environnement d'exploitation de ce tutoriel : système Windows 7, version Oracle 11g, ordinateur Dell G3.
Dans Oracle, vous pouvez utiliser l'instruction "SELECT" et la clause "ORDER BY" pour effectuer le tri des requêtes.
Dans Oracle, les enregistrements de données de ligne sont stockés dans la table dans un ordre non spécifié, quel que soit l'ordre dans lequel les lignes sont insérées dans la base de données. Pour interroger les enregistrements de ligne par colonne dans l'ordre croissant ou décroissant, vous devez indiquer explicitement à la base de données Oracle comment trier.
Par exemple, vous souhaiterez peut-être répertorier tous vos clients par ordre alphabétique par nom, ou afficher tous vos clients par ordre décroissant de limite de crédit la plus basse à la plus élevée.
Pour trier les données interrogées, ajoutez la clause ORDER BY
à l'instruction SELECT comme suit. ORDER BY
子句添加到SELECT语句中。
ORDER BY
子句可以按升序或降序对一列或多列的结果集进行排序。
语法:
SELECT 字段名, FROM table_name ORDER BY 字段名 [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
语句中的最后一个子句。
下面将使用示例数据库中的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
ORDER BY
peut trier l'ensemble de résultats d'une ou plusieurs colonnes par ordre croissant ou décroissant. Syntaxe : SELECT name, credit_limit,address FROM customers ORDER BY 2 DESC, 1;Pour trier le résultat défini par une colonne, vous pouvez lister la colonne après la clause ORDER BY.
Il s'agit d'un ordre de tri selon le nom de la colonne, qui peut être :
ASC
signifie trier par ordre croissant 🎜DESC
signifie trier par ordre décroissant🎜ASC
soit spécifié ou non, ORDER BY trient toutes les lignes par ordre croissant. Si vous souhaitez trier les lignes par ordre décroissant, utilisez explicitement DESC
. NULLS FIRST
place les valeurs NULL
avant les valeurs non NULL
, NULLS LAST
avant non-NULL après la valeur code>NULL. 🎜🎜La clause ORDER BY
peut trier les données sur plusieurs colonnes, et chaque colonne peut avoir un ordre de tri différent. 🎜🎜Veuillez noter que la clause ORDER BY
est toujours la dernière clause de l'instruction SELECT
. 🎜clients
dans l'exemple de base de données à des fins de démonstration. 🎜🎜🎜🎜Le suivant L'instruction récupère le client : nom
, adresse
et limite de crédit
de la table clients (clients
) : 🎜 SELECT name, credit_limit,address FROM customers ORDER BY credit_limit DESC, name;🎜 Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants :🎜🎜🎜🎜Comme vous pouvez le voir sur la capture d'écran, l'ordre des enregistrements de lignes n'est pas spécifié. 🎜🎜1. Exemple de tri des lignes par colonne🎜🎜Pour trier les noms des clients par ordre alphabétique croissant, utilisez l'instruction suivante : 🎜
SELECT country_id, city, state FROM locations ORDER BY state DESC;🎜Exécutez l'exemple de code ci-dessus et obtenez les résultats suivants :🎜🎜🎜🎜
ASC
demande à Oracle de trier les lignes par ordre croissant. Mais ASC
est facultatif, et si elle est omise, par défaut, la clause ORDER BY
trie les lignes par colonne spécifiée dans l'ordre croissant. 🎜🎜Ainsi, l'expression suivante : 🎜SELECT country_id, city, state FROM locations ORDER BY state ASC NULLS FIRST;🎜 équivaut à -🎜
SELECT country_id, city, state FROM locations ORDER BY state ASC NULLS LAST;🎜 Pour trier les noms de clients par ordre alphabétique décroissant, utilisez explicitement
après le nom de la colonne dans le code de la clause <code>ORDER BY
> DESC, comme indiqué ci-dessous : 🎜SELECT customer_id, name FROM customers ORDER BY UPPER( name );🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -🎜🎜🎜🎜2. Exemple de tri des lignes sur plusieurs colonnes span>🎜🎜Pour trier plusieurs colonnes, vous pouvez séparer chaque colonne dans la clause
ORDER BY
par une virgule. 🎜🎜Voir le tableau de contacts (contacts
) suivant dans l'exemple de base de données. 🎜🎜Par exemple, pour trier par first_name
par ordre croissant et la colonne last_name
par ordre décroissant, utilisez l'instruction suivante : 🎜rrreee🎜Exécutez l'exemple de code ci-dessus, vous pouvez voir Obtenez le résultat suivant-🎜🎜🎜🎜Comme vous pouvez le voir sur la capture d'écran ci-dessus, contact_id
est le first_name
des deux enregistrements 91
et 311 Les valeurs sont les mêmes et les valeurs de <code>last_name
sont classées par ordre décroissant. 🎜🎜Dans cet exemple, Oracle trie d'abord les lignes par first_name
par ordre croissant pour créer l'ensemble de résultats initial. Oracle trie ensuite le résultat initial défini sur last_name
par ordre décroissant. 🎜🎜Voir des résultats similaires à celui ci-dessous : 🎜🎜🎜🎜🎜Dans ce résultat ci-dessus : 🎜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教程》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!