メインコンテンツへスキップ

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
テーブルには順序がありません。行はサーバーにとって都合のよい順序で返り、 それは実行のたびに変わりえます。結果の順序を決めるものは ORDER BY だけです。 始める前に mysql -u root -p sakila でクライアントを開いてください。

ORDER BY の仕組み

SORT_COLUMN をソートの基準にする列に置き換えます。DIRECTION は、小さい ものから並べる ASC か、大きいものから並べる DESC のどちらかです。省略 可能で、省略すると ASC になります。

例

  1. 1 つの列でソートする

  1. 逆順にソートする

Sakila はすべての映画に 3 つの料金のいずれか 1 つを付けており、336 本の映画が 最高料金の 4.99 を共有しています。この 336 本の同順位の行の間の順序は このクエリでは決まらないので、ここに示した順序と異なることがあります。

  1. 2 つ目の列で同順位を解消する

ソート列を優先順にカンマで区切って並べます。各列はそれぞれの方向を 持ちます。
rental_rate が依然として先頭で、降順です。各料金の中では最も短い映画が 先に来ます。長さが等しい映画はまだ同順位なので、完全に決まった順序には、 すべての行を一意にするだけの列が必要です。

  1. エイリアスでソートする

ORDER BY は同じクエリの列のエイリアスを指定できます。

エイリアスはシングルクォートではなくバッククォートで囲む

空白を含むエイリアスは引用符で囲む必要があり、ここで 2 つの引用スタイルの 一致が崩れます。シングルクォートは名前ではなく文字列を作り、固定の文字列で ソートしても何もソートされません。
料金は 0.99、4.99、2.99 と並んでおり、何もソートされていません。サーバーは 'Rate' を 4 文字の単語として読み、すべての行を同じ値でソートしました。 エラーなし、警告なし、ソートなしです。 バッククォートはエイリアスを指し、ソートが行われます。
表示されている行はすべて 0.99 なので、それらの間の順序もここでは決まって いません。

NULL はどこに並ぶか

列は NULL を保持でき、これは値がまったくないことを記録します。ゼロでも 空文字列でもありません。MySQL は NULL をすべての実際の値より小さいものとしてソート するので、昇順では NULL が先頭に来ます。address の 603 行のうち、4 行には address2 がありません。
4 つの NULL 行が先に来ます。その後の行は空文字列を保持しており、これは実際の 値なので、NULL より大きく、どのテキストよりも小さいものとしてソートされます。この 4 つの NULL 行は互いに同順位なので、それらの間の順序はこのクエリでは決まりません。 DESC はそれを逆にし、NULL は末尾に行きます。これは同じ結果を逆順に ソートしたものの末尾です。

まとめ

  • 結果の順序を決めるには ORDER BY を使います。他に決めるものはありません。
  • 大きいものから並べるには DESC と書きます。ASC がデフォルトです。
  • 同順位を解消するには、複数のソート列を優先順に並べます。
  • エイリアスでソートするときはバッククォートで囲みます。シングルクォートは文字列を作るからです。
  • 昇順では NULL が先頭に、降順では末尾に来ます。

関連項目