ホームページ >データベース >Oracle >Oracleでクエリ結果を並べ替える方法

Oracleでクエリ結果を並べ替える方法

青灯夜游
青灯夜游オリジナル
2022-01-13 11:33:4318619ブラウズ

Oracle では、「SELECT」ステートメントと「ORDER BY」句を使用してクエリを並べ替えることができます。1 つ以上の列のクエリ結果セットを昇順または降順で並べ替えることができます。構文 " SELECT フィールド名" FROM データ テーブル名 ORDER BY フィールド名 [ASC|DESC]"。

Oracleでクエリ結果を並べ替える方法

このチュートリアルの動作環境: Windows 7 システム、Oracle 11g バージョン、Dell G3 コンピューター。

Oracle では、「SELECT」ステートメントと「ORDER BY」句を使用してクエリを並べ替えることができます。

Oracle では、行がデータベースに挿入される順序に関係なく、行データ レコードは指定されていない順序でテーブルに格納されます。行レコードを列ごとに昇順または降順でクエリするには、Oracle データベースにソート方法を明示的に指示する必要があります。

たとえば、すべての顧客を名前のアルファベット順にリストしたり、すべての顧客を与信限度額の最低から最高の順に表示したりすることができます。

クエリされたデータを並べ替えるには、次のように ORDER BY 句を SELECT ステートメントに追加します。

ORDER BY 句は、1 つ以上の列の結果セットを昇順または降順で並べ替えることができます。

構文:

SELECT
    字段名,
FROM
    table_name
ORDER BY
    字段名 [ASC | DESC] [NULLS FIRST | NULLS LAST]

結果セットを列で並べ替えるには、ORDER BY 句の後に列をリストします。

#これは列名に基づく並べ替え順序であり、次のようになります。

  • #ASC

    は昇順で並べ替えることを意味します

  • DESC

    は降順での並べ替えを意味します

  • デフォルトでは、
ORDER BY

句が使用されるかどうかに関係なく使用されます。 ##ASC を指定すると、どちらも行を昇順にソートします。行を降順に並べ替える場合は、明示的に DESC を使用します。
NULLS FIRST

NULL 値を非 NULL 値の前に配置し、NULLS LAST を非値の前に配置します。 -##NULL 値を #NULL 値の後に配置します。 ORDER BY 句では、複数の列でデータを並べ替えることができ、各列の並べ替え順序が異なる場合があります。

ORDER BY 句は常に

SELECT

ステートメントの最後の句であることに注意してください。 Oracle ORDER BY 句の例以下では、デモのためにサンプル データベースの

customers

テーブルを使用します。

次のステートメントは、顧客 (

customersOracleでクエリ結果を並べ替える方法) テーブルから顧客のテーブルを取得します:

name

, addressおよび credit limit: <pre class="brush:sql;toolbar:false;">SELECT name, address, credit_limit FROM customers;</pre>上記のクエリ ステートメントを実行すると、次の結果が得られます。

スクリーンショットでわかるように、 、行レコード 順序は指定されていません。

Oracleでクエリ結果を並べ替える方法

1. 列による行の並べ替えの例

#顧客名をアルファベットの昇順に並べ替えるには、次のステートメントを使用します。

SELECT name,address,credit_limit
FROM customers
ORDER BY name ASC;
上記のコード例を実行すると、次の結果が得られます。

ASC

は、Oracle に行を昇順で並べ替えるよう指示します。ただし、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. 複数の列による行の並べ替えの例

Oracleでクエリ結果を並べ替える方法

複数の列を並べ替えるには、文内の各列をカンマで区切ります ORDER BYサンプル データベースの次の連絡先 (

contacts

) テーブルを参照してください。 たとえば、

first_name

を昇順に並べ替え、last_name 列を降順に並べ替えるには、次のステートメントを使用します。

SELECT first_name, last_name
FROM contacts
ORDER BY first_name, last_name DESC;

Execute From上記のサンプル コードを実行すると、次の結果が表示されます。##上のスクリーンショットからわかるように、

contact_id

91

です。および Oracleでクエリ結果を並べ替える方法311

これら 2 つのレコードの

first_name の値は同じであり、last_name の値は降順に並べられます。 この例では、Oracle は最初に行を first_name で昇順に並べ替えて、最初の結果セットを作成します。次に、Oracle は last_name の最初の結果セットを降順にソートします。

次のような結果を参照してください:

上記の結果:

  • 首先,按first_name升序排序。
  • 其次,如果两个名字相同,按last_name降序排列,如Daniel GlassDaniel CostnerDianne SenDianne DerekDoretha TylerDorotha Wong

3、按列位置排序行示例

不需要指定用于排序数据的列名称。如果您愿意,可以使用ORDER BY子句中列的位置。

请参考下语句 -

SELECT name, credit_limit,address
FROM customers
ORDER BY 2 DESC, 1;

在这个例子中,name列的位置是1credit_limit列的位置是2。相当于以下查询语句 -

SELECT name, credit_limit,address
FROM customers
ORDER BY credit_limit DESC, name;

ORDER BY子句中,使用这些列位置来指示Oracle对行进行排序。

4、用NULL值排序行的示例

请参阅示例数据库中的以下地区(locations)表:

Oracleでクエリ結果を並べ替える方法

以下语句按城市(city)和州(state)检索位置并对其进行排序:

SELECT country_id, city, state
FROM locations 
ORDER BY state DESC;

执行上面查询语句,得到以下结果 -

Oracleでクエリ結果を並べ替える方法

state列有NULL值,这意味着state数据与某些城市(例如:Beijing, HiroshimaLondon)无关。

当使用非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;

执行上面示例查询语句,得到以下结果:

Oracleでクエリ結果を並べ替える方法

5、按函数或表达式排序数据

ORDER BY子句可在一列上应用一个函数,例如字符串函数,数学函数等,并按函数的结果对数据进行排序。

例如,以下语句使用ORDER BY子句中的UPPER()函数来区分客户名称的大小写:

SELECT customer_id, name
FROM customers
ORDER BY UPPER( name );

执行上面查询语句,得到以下结果 -

Oracleでクエリ結果を並べ替える方法

推荐教程:《Oracle教程

以上がOracleでクエリ結果を並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。