概要 :このチュートリアルでは、SQLite ORDER BY
を使用してクエリの結果セットを並べ替える方法を学習します 条項。
SQLite ORDER BY
の紹介 条項
SQLiteは、データを不特定の順序でテーブルに保存します。これは、テーブル内の行が挿入された順序である場合とそうでない場合があることを意味します。
SELECT
を使用する場合 テーブルからデータをクエリするステートメントの場合、結果セットの行の順序は指定されていません。
結果セットを並べ替えるには、ORDER BY
を追加します SELECT
の句 次のようなステートメント:
SELECT
select_list
FROM
table
ORDER BY
column_1 ASC,
column_2 DESC;
Code language: SQL (Structured Query Language) (sql)
ORDER BY
句はFROM
の後にあります 句。 1つ以上の列に基づいて結果セットを昇順または降順で並べ替えることができます。
この構文では、並べ替える列名をORDER BY
の後に配置します。 句の後にASC
が続く またはDESC
キーワード。
-
ASC
キーワードは昇順を意味します。 - そして
DESC
キーワードは降順を意味します。
ASC
を指定しない場合 またはDESC
キーワード、SQLiteはASC
を使用して結果セットをソートします オプション。つまり、デフォルトでは結果セットが昇順で並べ替えられます。
結果セットを複数の列で並べ替える場合は、コンマ(、)を使用して2つの列を区切ります。 ORDER BY
句は、列または式を使用して行を左から右に並べ替えます。つまり、ORDER BY
句は、リストの最初の列を使用して行をソートします。次に、2番目の列を使用してソートされた行をソートし、以下同様に続きます。
SELECT
の選択リストに表示されない列を使用して結果セットを並べ替えることができます 条項。
SQLite ORDER BY
条項の例
tracks
を見てみましょう デモンストレーション用のサンプルデータベースのテーブル。
名前、ミリ秒、アルバムIDの列からデータを取得する場合は、次のステートメントを使用します。
SELECT
name,
milliseconds,
albumid
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
試してみてください
SELECT
ORDER BY
を使用しないステートメント 句は、順序が決まっていない結果セットを返します。
AlbumId
に基づいて結果セットを並べ替えるとします。 列を昇順で使用するには、次のステートメントを使用します。
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC;
Code language: SQL (Structured Query Language) (sql)
試してみてください
結果セットは、AlbumId
で並べ替えられます。 スクリーンショットに示されている昇順の列。
SQLiteはASC
を使用します デフォルトでは、次のように上記のステートメントで省略できます。
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid;
試してみてください
ソートされた結果を(AlbumId
で)ソートするとします。 )上記のMilliseconds
降順の列。この場合、Milliseconds
を追加する必要があります ORDER BY
への列 次のような条項:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC,
milliseconds DESC;
Code language: SQL (Structured Query Language) (sql)
試してみてください
SQLiteはAlbumId
で行を並べ替えます 最初に昇順の列。次に、ソートされた結果セットをMilliseconds
でソートします。 降順の列。
AlbumId
でアルバムのトラックを見る場合 1、2つのステートメント間でトラックの順序が変わることがわかります。
SQLite ORDER BY
列の位置で
列の名前を指定する代わりに、ORDER BY
で列の位置を使用できます 条項。
たとえば、次のステートメントは、両方のalbumid
でトラックを並べ替えます。 (3列目)およびMilliseconds
(2列目)昇順。
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
3,2;
Code language: SQL (Structured Query Language) (sql)
試してみてください
番号3と2は、AlbumId
を表します。 およびMilliseconds
SELECT
に表示される列リスト 条項。
NULLの並べ替え
データベースの世界では、NULLは特別です。情報が不足しているか、データが該当しないことを示します。
アーティストの誕生日をテーブルに保存するとします。アーティストの記録を保存する時点では、誕生日情報はありません。
データベース内の不明な誕生日情報を表すために、01.01.1900
のような特別な日付を使用できます。 または''
空の文字列。ただし、これらの値はどちらも、誕生日が不明であることを明確に示しているわけではありません。
NULLは、この問題を解決するために考案されました。情報が欠落していることを示すために特別な値を使用する代わりに、NULLが使用されます。
NULLは、別の値と比較できないため、特別です。簡単に言えば、2つの情報が不明な場合、それらを比較することはできません。
NULLはそれ自体と比較することさえできません。 NULLはそれ自体と等しくないため、NULL = NULL
常にfalseになります。
ソートに関しては、SQLiteはNULLを他のどの値よりも小さいと見なします。
これは、ASCを使用する場合は結果セットの最初に、DESCを使用する場合は結果セットの最後にNULLが表示されることを意味します。
SQLite3.30.0はNULLS FIRST
を追加しました およびNULLS LAST
ORDER BY
のオプション 句。 NULLS FIRST
オプションは、NULLS LAST
の間、結果セットの先頭にNULLが表示されることを指定します。 オプションは、結果セットの最後にNULLを配置します。
次の例では、ORDER BY
を使用しています 作曲家でトラックを並べ替える句:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer;
Code language: SQL (Structured Query Language) (sql)
まず、SQLiteがNULLを最小値として扱うため、結果セットの先頭にNULLが表示されることがわかります。結果を下にスクロールすると、他の値が表示されます:
次の例では、NULLS LAST
を使用しています 他の値の後にNULLを配置するオプション:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer NULLS LAST;
Code language: SQL (Structured Query Language) (sql)
出力を下にスクロールすると、結果セットの最後にNULLが配置されていることがわかります。
このチュートリアルでは、SQLiteのORDER BY
の使用方法を学びました。 単一の列、複数の列を昇順および降順で使用して結果セットを並べ替える句。