Oracle では、「SELECT」ステートメントと「ORDER BY」句を使用してクエリを並べ替えることができます。1 つ以上の列のクエリ結果セットを昇順または降順で並べ替えることができます。構文 " SELECT フィールド名" FROM データ テーブル名 ORDER BY フィールド名 [ASC|DESC]"。
このチュートリアルの動作環境: 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 を使用します。
NULLS FIRST
NULL 値を非
NULL 値の前に配置し、
NULLS LAST を非値の前に配置します。 -
##NULL 値を #NULL
値の後に配置します。 ORDER BY
句では、複数の列でデータを並べ替えることができ、各列の並べ替え順序が異なる場合があります。
ORDER BY
句は常に
ステートメントの最後の句であることに注意してください。 Oracle ORDER BY 句の例
以下では、デモのためにサンプル データベースの
customers) テーブルから顧客のテーブルを取得します:
name, address
および credit limit
: <pre class="brush:sql;toolbar:false;">SELECT name, address, credit_limit FROM customers;</pre>
上記のクエリ ステートメントを実行すると、次の結果が得られます。
1. 列による行の並べ替えの例
#顧客名をアルファベットの昇順に並べ替えるには、次のステートメントを使用します。 SELECT name,address,credit_limit
FROM customers
ORDER BY name 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) テーブルを参照してください。 たとえば、
を昇順に並べ替え、last_name
列を降順に並べ替えるには、次のステートメントを使用します。
SELECT first_name, last_name FROM contacts ORDER BY first_name, last_name DESC;
Execute From上記のサンプル コードを実行すると、次の結果が表示されます。##上のスクリーンショットからわかるように、
は
91です。および 311
これら 2 つのレコードの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教程》
以上がOracleでクエリ結果を並べ替える方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。